三种定时器:高级定时器、通用定时器、基本定时器。
STM32F407ZGT6有14个定时器:12个16位定时器、2个32位定时器(更高精度、更长时间)。
高级定时器(TIM1、TIM8):位数(16位),计数器模式(向上、向下、向上 / 下),可产生DMA请求,输出 / 比较通道(4),互补输出,带可编程死区的互补输出。
通用定时器(TIM2、TIM5):位数(32位),计数器模式(向上、向下、向上 / 下),可产生DMA请求,输出 / 比较通道(4),定时计数、PWM输出、输入捕获、输出比较。
通用定时器(TIM3、TIM4):位数(16位),计数器模式(向上、向下、向上 / 下),可产生DMA请求,输出 / 比较通道(4),定时计数、PWM输出、输入捕获、输出比较。
通用定时器(TIM9-14) :位数(16位),计数器模式(向上) , ,输出 / 比较通道(2),定时计数、PWM输出、输入捕获、输出比较。
基本定时器(TIM6、TIM7):位数(16位),计数器模式(向上、向下、向上 / 下),可产生DMA请求,输出 / 比较通道(0),主要应用于驱动DAC。
TIM2-5定时器的特点:1、16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1-65535之间 的任意数值。
2、4个独立通道(TIMx_CH1-4):输入捕获、输出比较、PWM生成(边缘或中间对齐(向上 / 下计数))、单脉冲模式输出。
3、6个独立的IRQ / DMA请求生成器,每个通用定时器是完全独立的,没有相互共享任何资源 。
时钟来源:
1、APB1倍频 -> 内部RCC提供的时钟 (TIMxCLK)-> 内部时钟(CK_INT) -> CK_PSC
2、TIMx_ETR外部引脚 -> 极性选择、边沿检测、预分频 -> 滤波 -> ETRF -> CK_PSC
3、其他定时器输出 -> 内部触发输入口(ITR0-3)(支持定时器级联) -> CK_PSC
4、定时器外部通道 -> TI(1-4)-> 输入滤波器、边沿检侧器 -> TI1F_EO / TI1FP1 / TIAFP2 -> CK_PSC
时钟来源 -> 时基单元(计数寄存器(TIMx_CNT)、预分频寄存器(TIMx_PSC)、自动装载寄存器(TIMx_ARR)) -> 输入捕获 / 输出比较
相关寄存器:计数器当前值寄存器(TIMx_CNT、0-15位)、预分频寄存器(TIMx_PSC、0-15位)、自动重装载寄存器(TIMx_ARR、0-15位)、
控制寄存器(TIMx_CR、0-9位)、DMA中断使能寄存器(TIMx_DIER、0-15位)
输入捕获:
通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升 / 下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获 / 比较寄存器(TIMx_CCRx)里面,完成一次捕获。
输入捕获过程(通道1为例):TI1 -> 滤波器(设置输入采样频率(fDTS)和数字滤波器的长度、防信号抖动) -- TI1F -> 边沿检侧器 -- (TI1F_Rising / Falling)
-> 选择器 -- TI1FP1 --> 选择器 -- IC1--> 分频器 (例如分频n,就是n次边沿产生一次捕获)-->IC1PS --> 触发中断