简述
单片机的定时器是我们平常最常用的功能之一,这篇文章就带大家看一下单片机的定时器功能。由于之前芯片涨价严重,许多项目都换成了国产单片机,这次我们就用GD32单片机来做讲解。
定时器功能
大家都知道定时器包括通用和高级定时器两种,通用定时器有输入捕获,输出PWM,输出比较和单脉冲输出。今天我们主要给大家说一下定时器中断问题。
如果说我们想要200ms触发一次中断,然后完成一些功能,那么怎么才能产生200ms的中断那,可能公式大家都知道,如下:

定时器时间计算公式
但是这个公式怎么来的那?大家知道我们定时器常常配置分频系数和预装载值,其中分频系数那就是用来控制我们这个定时器的频率的,而预装载值就是一个目标值,当数值累加到这个目标值的时候就会产生中断。第一我们需要确定当前定时器的工作频率,上图中psc就是我们设置的预分频,定时器的工作频率就是: 频率=Tclk /psc,那么好,为什么要再加1那,我理解的是分配是从0开始计数的,0-不分频,就还是本身频率,; 1就相当分一次频率,分一次就是分一半嘛,所以需要除以2,所以公式就是 频率=Tclk /(psc+1);周期=1/频率,周期的意思就是记一次数所需要的时间,那么我们记录arr个数字需要多长时间那?就是:
周期*arr,由于计数也是从0开始计数的,所以arr个数正确应该是记了arr+1个数,所以公式就成了周期*(arr+1),整理就是:
计时时间=周期*(arr+1)= (1/频率) *(arr+1)= (1/Tclk /(psc+1)) *(arr+1)= (psc+1)) *(arr+1)/Tclk。
时钟树的观看
到这里arr和psc怎么设置大家都知道,那么Tclk频率怎么得到那?可能我们按照开发板例子上人家说是多少就是多少,目前那我们就看一下怎么查Tclk的数值。

STM32时钟树
图中红色1,2,3,4是我们使用的时钟源,蓝色框是我们的外设时钟,假设我们没有接外部时钟,使用内部时钟1,经过5,PLL倍频后得到最大72Mhz的时钟,然后到AHB模块,这里可以进行1,2等其他分频,然后传到APB1上,这里可以进行1,2等其他分频,APB1写的最大36M,所以这里是2分频,然后下一框写的 如果APB1预分频为1,频率不变,其他*2,APB1进行2分频,所以这里是不是应该*2,所以为72Mhz, 然后传递到定时器2-7。所以我们知道上述公式中Tclk=72Mhz。


