目录
定时器的作用
为什么要使用定时器,在写单片机流水灯的时候,会使用到delay函数,delay函数会让程序在delay那个位置等待,等待期间系统不会处理其他事情,直到等待结束,这很浪费系统资源。
而定时器是个外设,独立出来运行,配置好定时器让定时器固定一个间隔产生一个中断,然后单片机再去中断函数里执行一些程序,这就可以节约资源,不会让单片机处于等待期间。
基本定时器框图如下:
其中下面的三个:PSC预分频器、CNT计数器、自动重装在寄存器是时基单元的三个组成部分。
PSC预分频器
在使用定时器的计时功能时,内部时钟会给到PSC上进行分频,为了方便计数,需要设置一个合适的分频值。
例如:设置主频为72Mhz,设置PSC预分频器为7200分频,则可以得到一个10Khz的时钟频率给计数器。因为频率是10khz,周期是t=1/f,可以得到周期是0.0001s,即0.1ms,也就是计数器0.1ms计数加1。
CNT计数器
计数器的作用就是它的名字,计数,需要有输入,可以是时钟输入,也可以是外部输入。外部输入可以是IO口的按键输入,可以设置成按键按下一次计数器加1,那么计数器就可以保存按键按下的次数。
自动重装载寄存器
计数器的计数限制。配置自动重装载寄存器之后,可以再计数器计到一定次数之后,清零计数器,重新计数,并可以产生中断、DMA、事件。
例如:
配置STM32主频72Mhz,配置定时器的预分频器为7200,则可以得到10khz的时钟给CNT计数器,CNT计数器每0.1ms计数加1,再配置自动重装载寄存器值为5000,也就是CNT计数到5000时重新计数,CNT计5000次就是500ms,也就可以500ms产生一次中断
例:
配置定时器的时钟成36Mhz时,配置预分频器3600,可以得到10khz的时钟给CNT计数器
CNT计数器每0.1ms计数加1,再配置自动重装载寄存器值为1000,也就是CNT计数到1000时重新计数,CNT计1000次就是100ms,也就是100ms产生一次中断