STM32 定时器总结
本资源总结了 STM32 微控制器中的定时器使用方法,特别是使用 TIM3 作为示例,介绍了使用定时器产生中断,并在中断服务函数中进行一些必要的操作。下面是详细的知识点:
1. TIM3 时钟使能:通过 APB1ENR 的第 1 位来设置 TIM3 的时钟,因为 Stm32_Clock_Init 函数里面把 APB1 的分频设置为 2 了,所以我们的 TIM3 时钟就是 APB1 时钟的 2 倍,等于系统时钟。
知识点:APB1ENR 寄存器,TIM3 时钟使能,APB1 时钟分频。
2. 设置 TIM3_ARR 和 TIM3_PSC 的值:通过这两个寄存器,我们来设置自动重装的值,以及分频系数。这两个参数加上时钟频率就决定了定时器的溢出时间。
知识点:TIM3_ARR 寄存器,TIM3_PSC 寄存器,自动重装值,分频系数,溢出时间。
3. 设置 TIM3_DIER 允许更新中断:因为我们要使用 TIM3 的更新中断,所以设置 DIER 的 UIE 位,并使能触发中断。
知识点:TIM3_DIER 寄存器,更新中断,UIE 位,触发中断。
4. 允许 TIM3 工作:光配置好定时器还不行,没有开启定时器,照样不能用。我们在配置完后要开启定时器,通过 TIM3_CR1 的 CEN 位来设置。
知识点:TIM3_CR1 寄存器,CEN 位,定时器开启。
5. TIM3 中断分组设置:在定时器配置完了之后,因为要产生中断,必不可少的要设置 NVIC 相关寄存器,以使能 TIM3 中断。
知识点:NVIC 寄存器,中断分组设置,TIM3 中断使能。
6. 编写中断服务函数:在最后,还是要编写定时器中断服务函数,通过该函数来处理定时器产生的相关中断。在中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。然后执行相关的操作,我们这里使用的是更新(溢出)中断,所以在状态寄存器 SR 的最低位。在处理完中断之后应该向 TIM3_SR 的最低位写 0,来清除该中断标志。
知识点:中断服务函数,状态寄存器 SR,中断类型判断,清除中断标志。
Timerx_Init 函数:该函数执行了我们上面介绍的那 5 个步骤,使得 TIM3 开始工作,并开启中断。该函数的 2 个参数用来设置 TIM3 的溢出时间。
知识点:Timerx_Init 函数,TIM3 初始化,溢出时间设置。
TIM3_IRQHandler 函数:该函数是中断服务函数,在每次中断后,判断 TIM3 的中断类型,如果中断类型正确,则执行 LED1(DS1)的取反。
知识点:TIM3_IRQHandler 函数,中断服务函数,LED1 取反。
计算公式:Tout=Tclk/psc*arr;其中:Tclk:TIM3 的计数时钟(单位为 Khz)。Tout:TIM3 溢出时间(单位为 ms)。
知识点:溢出时间计算公式,Tclk,psc,arr。