注:该帖为自己在使用stm32时的问题总结贴,如有错误欢迎大家指正出来,一起交流学习
该文章正在完善中。。。。
目录
一、高级定时器简介
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。STM32的定时器可以分为3种,有基本定时器,通用定时器,高级定时器。本篇学习基本定时器。
通用定时器就比基本定时器要复杂一些。除了基本的定时器,它主要用在测量输入脉冲的频率、脉冲宽与输出PWM脉冲的场合,还具有编码器的接口。
二、高级定时器功能框图
1.定义
设置等待时间,到达等待时间之后执行指定的硬件操作。
定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集AD数据,也可以产生PWM方波等,定时器产生PWM控制电机状态是工业控制的普通。
2、STM32F4xx系列的芯片:2个高级控制定时器(TIM1和TIM8)、10个通用定时器(10TIM2-TIM5,TIM9-TIM14)、2个基本定时器(TIM6和TIM7)、2个看门狗定时器
具体可参考中文参考手册了解其特性及原理
3、定时器计数模式:
通用定时器可以向上计数、向下计数、向上向下双向计数模式。
①向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
②向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
③中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
如图:
4、通用定时器工作原理:
● 计数器寄存器 (TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)
● 自动重载寄存器 (TIMx_ARR)
假如是向上增长模式,计数器(CNT)从0加到自动重载值(ARR),预分频器(PSC)减一次。
时间计算方式:
假设频率为:42M*2 == 84M == 84000000 == 1s //42根据定时器时钟数可知 并且一般都是*2
定时器定时1s产生中断:
ARR = 84000; // 1ms
PSC = 1000; // 1000*1ms == 1s
如图:可知基本定时器的时钟是42M,那么对应*2就是84M=84000000=1S(ARR*PSC)
高级的既是84*2=96M=96000000=1S
三、高级定时器功能描述
基本定时器的核心是时基,通用计时器和高级定时器也有。
1、时钟源
定时器时钟TIMxCLK,即内部时钟CK_INT,经APB1预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M 。
2、计数器时钟
定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。PSC 是一个16 位的预分频器,可以对定时器时钟 TIMxCLK 进行 1~65536 之间的任何一个数进行分频。
具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。
3.计数器
计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为 65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。
4、自动重装载寄存器
自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。
5. 定时时间的计算
定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在 CK_CNT 的驱动下,计一个数的时间则是 CK_CLK 的倒数,等于:1/(TIMxCLK/(PSC+1)),产生一次中断的时间则等于:1/(CK_CLK * ARR)。如果在中断服务程序里面设置一个变量 time,用来记录中断的次数,那么就可以计算出我们需要的定时时间等于: 1/CK_CLK *(ARR+1)*time。