目录
绪言
定时器可以说是32中非常重要的一个外设了,之前虽然知道怎么去配置和使用它,但是其中的原理却是一知半解。通过最近的学习,才慢慢摸索到其中的奥秘。这篇文章主要聊一聊定时器的工作原理和定时器中断,只是最最基础的东西,关于定时器的输入输出,会在接下来的文章中更新。
一、定时器整体工作流程梳理
在最开始,先来看一下ST官方手册给出的框图
这里只是截取了本次内容需要关注的东西,有兴趣的读者可以自行去查看官方手册。
可以看到,其最基本的工作原理还是比较简单的,就是一个时钟源的选择,然后用选择的时钟源作为一个计数器的时钟。CNT计数器按照自动重装载寄存器里面的值向上或者向下计数。当计数达到阈值时,可以选择产生中断与否,然后将自动重装载寄存器的值更新到CNT计数器重新计数。如此循环往复,就是定时器的工作原理。
二、寄存器剖析
上面已经说了定时器的基本工作原理,那它是怎么知道时钟源的选择以及该向上还是向下计数呢?这些问题都是通过配置相应的寄存器去控制定时器的。接下来就来剖析剖析定时器相关的寄存器。
1·CR1、ARR、PSC寄存器
基本上很多外设都会有一个CR寄存器(控制寄存器),各个外设的这个寄存器的大致作用也都差不多,都是对外设的一些初始化参数进行配置。
对于只是让定时器“跑起来”,我们只需要关注这个寄存器的以下位:
1)ARPE位:作用是使能预装载寄存器缓冲(会在后面介绍)
2)CMS位、DIR位