目录
1.定时器简介:
从字面来看,定时器就是用来计时的机器, 可以通过计时来触发中断或者事件。
2.时基单元:
定时器计时是通过时基单元来实现的,时基单元主要包括:预分频器(PSC),计数器(CNT),自动重装器(ARR)。这三个单元都是16位的,也就是说它们的取值范围都是0~65535,具体实现的功能在下面会提到。
计数器分三种模式:
1.向上计数:从某个数(初值)减到零,产生一个计数器更新事件后重装载初值;
2.向下计数:从零加到某个数(终值),产生一个计数器更新事件后重装载零;
3.中央对齐:也叫向上/向下计数模式;计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)−1,产生一个计数器更新事件,然后向下计数到1并且产生一个计数器更新事件;然后再从0开始重新计数。
3.定时器资源:
定时器分为三种,分别是基本定时器,通用定时器,高级定时器,这三个定时器分别有着不同的功能
在c8t6中,一共有四个定时器,分别是高级定时器(TIM1),通用定时器(TIM2,TIM3,TIM4)。
3.1:基本定时器
虽然说c8t6并没有搭载基本定时器,但是通过基本定时器理解时基单元会更清晰一些。
基本定时器中有三个重要的寄存器,分别是预分频器、计数器、自动重装寄存器,构成了最基本的计数计时电路,这块电路叫做时基单元。
预分频器(PSC): 从图中可以看见,时基单元的输入连接的是CK_INT,来源是RCC_TIMxCLK,频率值一般都是系统的主频72MHz。 预分频器可以将72MHZ分频,要注意的是,这个寄存器写入的值是实际分频程度-1,例如1分频,也就是不分频时,PSC的值为0;要2分频输出36MHZ的频率时,PSC的值为1。所以输出频率=输入频率/(PSC+1)。
计数器(CNT):可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值就加1,因为计数器是16位,范围在0~65535,超过65535,计数器就会回到0重新开始。
自动重装载器(ARR):是计数器计数的目标值,当计数到自动重装载值时,就会产生中断开始下一次计时。
在此补充一下,hz是频率的单位,1hz就是每秒1次,60hz就是每秒60次,单位的换算:1mhz=1000000hz。所以72MHZ的意思就是每秒有72000000次方波。
3.2:通用定时器
通用定时器的框图就要复杂很多了,很多东西我也不太清楚,对照框图大概说一下
通用定时器的四大部分(红框):
①:时钟产生部分: a.内部时钟
b.外部时钟挂载:ETR引脚
通过引脚定义图可以看到,ETR引脚是在PA0上的,也就是我们如果要外接外部时钟,接在ETR引脚上就可以了
c.ch1引脚的边沿
d.ch1引脚和ch2引脚
其实目前来说用的最多的就是内部时钟了,其他几个了解一下就可以了。
②:时基单元:这一部分和基本定时器一样,前面已经说过了。
③:输入捕获部分:输入捕获可以通过检测通道输入引脚出现的指定电平跳变,通过计时器内部计时测量PWM波形的频率、占空比、脉冲问题、电平持续时间等参数。后面的章节会讲到
④:输出比较部分:输出比较可以通过CNT与比较(CCR)寄存器的关系来对输出电平进行置1,置0或翻转的操作,用于输出一定频率和占空比的PWM波形。
高级定时器就不说了,因为我也没有用过,以后用到的话会补充。
4.总结:
定时器的结构看起来很复杂,但在我们应用的时候相对会简单一些,只需要进行一些简单的计算,修改PSC,ARR,CCR的值就可以达到我们想要的效果。