TIM定时器
- 对输入的时钟进行计数,在计数值达到设定值时触发中断(相当于计数器)
- 核心部分有16位计数器、预分频器、自动重装寄存器,这一部分称为时基单元
- 功能:定时中断、内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
基本定时器框图
基本定时器只能选择内部时钟(系统频率72MHz)
预分频器可以对72MHz的计数时钟进行预分频,比如这个寄存器写0,那就是不分频(1分频),这时候输出频率=输入频率=72MHz;如果寄存器写1(2分频),输出频率=输入频率=72MHz / 2=36MHz,实际分频系数=预分频器值+1,以此类推。
计数器可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器值就+1,如果溢出,计数值变为0重新开始计数。
自动重装寄存器存入的是我们写入的计数目标,允许过程中,计数值不断自增,自动重装值是固定的目标,当计数值=计数目标时,就是计时时间到了,此时会产生一个中断信号,并且清0计数器,计数器自动开始下一次的计数。这里的中断信号我们一般称为更新中断或者更新事件。更新中断之后会通往NVIC,我们再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应了。更新事件不会触发中断,但可以触发内部其他电路的工作。
主模式:将定时器更新事件映射到触发输出TRGO(Trigger Out)的位置,然后由TRGO来触发DAC转换,这样,定时器的更新事件就不需要通过反复中断来触发DAC转换了,实现硬件自动化。
通用定时器框图
通用定时器可以选择内部时钟或外部时钟
外部时钟:
TIMx_ETR引脚:如TIM2的ETR复用到了PA0引脚,因此可以在PA0接一个外部方波时钟,通过配置内部的极性选择、边沿检测和预分频器电路以及配置输入滤波电路来对外部时钟进行整形,最终滤波后的信号可以选择两路,一路ETRF进入触发控制器,随后便作为时基单元的时钟了,这一过程也叫作“外部时钟模式2”。另一路通向TRGI
TRGI(Trigger In):用作触发输入来使用,可以触发从模式。这一路也叫作 “外部时钟模式1”。 外部时钟模式1信号来源有ETR引脚、ITR(来自其他定时器)、TI1F_ED(CH1引脚边沿)、TI1FP1/TI2FP2(CH1和CH2引脚的时钟)。
ITR:来自其他定时器的时钟(为了定时器级联而设计),主模式输出TRGO可通向其他定时器的ITR引脚,实现定时器的级联。
TI1F_ED:从输入捕获单元的CH1引脚获得时钟,ED为边沿的意思,通过这一路的时钟,上升沿和下降沿均有效
TI1FP1/TI2FP2:分别获取输入捕获单元的CH1和CH2的时钟
高级定时器
增加了一个重复次数计数器,实现每隔几个计数周期才发生一次更新事件和更新中断
定时中断基本结构图
RCC开启时钟(定时器时钟和GPIO时钟)
选择时基单元时钟源(定时中断选择内部时钟源)
配置时基单元
配置输出中断控制,允许更新中断输出到NVIC
配置NVIC,在NVIC中打开定时器中断通道,并分配一个优先级
运行控制,使能计数器
计数器计数频率:CK_CNT=CK_PSC / (PSC+1)
计数器溢出频率:CK_CNT_OV=CK_CNT / (ARR+1)
=CK_PSC / (PSC+1)(ARR+1)
计数器溢出时间:1 / CK_CNT_OV
RCC时钟树