三种定时器的区别
通用定时器功能特点的描述
STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,下面我们就以通用定时器为例进行讲解,其功能和特点包括:
-
通用与基本定时器(2~7)位于低速的APB1总线上
-
高级定时器(1、8)位于高速的APB2总线上
-
自动装载计数器(TIMx_CNT)有16 位向上、向下、向上/向下(中心对齐)计数模式。
-
预分频器(TIMx_PSC)是16 位可编程(可以实时修改)的,计数器时钟频率的分频系数由它设置,可以为 1~65535 之间的任意数值。
-
每个定时器都有4个独立的通道,这4个通道与相应的引脚一一对应可以查表
-
4 个独立通道(TIMx_CH1~4),这些通道功能可以用来作为:
- 输入捕获
- 输出比较
- PWM 生成(边缘或中间对齐模式)
- 单脉冲模式输出
-
可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。
-
如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器): (前4件用的比较多)
- 更新中断(TIM_IT_Update):计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
- 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
- 输入捕获
- 输出比较
- 支持针对定位的增量(正交)编码器和霍尔传感器电路
- 触发输入作为外部时钟或者按周期的电流管理
-
STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。
-
使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
时基单元
时基单元包含:
- 计数器寄存器(TIMx_CNT) :不断计数
- 预分频器寄存器 (TIMx_PSC) :分频系数
- 自动装载寄存器 (TIMx_ARR):装载值
计数器模式
- 向上计数模式(从0到ARR的值)
- 向下计数模式(从ARR的值到0)
- 中央对齐模式(向上/向下计数) (在中央对齐模式,计数器从0开始计数到ARR寄存器−1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。)
时钟选择
计数器时钟可由下列时钟源提供:两个内部时钟、两个外部时钟
- 内部时钟(CK_INT)(用的最多)
- 外部时钟模式1:外部输入脚(TIx),定时器下通道输入捕获捕获的信号
- 外部时钟模式2:外部触发输入(ETR),外部IO口输入的时钟信号
- 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器(仅2.3.4定时器有)。参见14.3.15
基本定时器的功能只占通用定时器的一部分,所以学习基本定时器比较简单易上手,新手先看参考手册的基本定时器章节。
先掌握基本定时器是最佳的选择。
计算定时器时钟频率(两个总线频率不同)以APB1为例:
如果AHB=72M,APB1由AHB分频可得不同的频率72/1,72/2,72/4,72/8,72/16。
PCLK1最大为36M不能1分频(这里不会用到它)
TIMxCLK的值由APB1决定,APB1=AHB/1时,TIMCLK=APB1;APB1=AHB/2、4、8、16时,TIMCLK=APB1×2=AHB/2、4、8、16×2。
例AHB=72,APB1=72,则TIMCLK=72
例AHB=72,APB1=36,则TIMCLK=72÷2×2
实验:定时器中断
例:计算溢出时间每500ms产生更新中断
Tout=(ARR+1)÷[(TIMCLK)÷(PSC+1)]
例500ms=(4999+1)÷[(72M)÷(7199+1)]
与中断有关的位:UIF位、UIE位文章来源:https://www.toymoban.com/news/detail-715211.html
文章来源地址https://www.toymoban.com/news/detail-715211.html
到了这里,关于STM32定时器-定时器中断功能详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!