☰
stm32时基单元
2026/10/28 2:06:38 网站建设 项目流程

Stm32时基单元包含,预分频器 PSC(prescaler),自动重装载器ARR,计数器CNT(count)。下面是从向上计数的方向说明。

1、PSC(预分频器 Prescaler)

结构体成员名称及赋值TIM_Prescaler = N;

PSC是分频:把定时器要用的基准72MHz的高频时钟,放慢,给CNT计数器用

计数器计数频率:

f_{CNT} = 72000000/(PSC+1)

为什么加一,因为PSC在STM32中也是16位,0到65535,0就是1分频,或者说不分频,1就是2分频。

PSC决定:CNT计数器多久会加1,计数步长

举例:PSC=71

定时器计数f_{CNT}=72M/(71+1)=1{MHz} → T=1/1MHZ=1us,CNT每1微秒加1

PSC=719,f_{CNT}=72M/720=10^5{HZ},10us记一次。

PSC越大,基准频率分频越小,周期越长,CNT加得越慢。但是最大不能超过65535。

2、ARR(自动重装载寄存器 Auto-Reload Register)

结构体成员名称及赋值TIM_Period = M ;

如果CNT没设置初值,为0的话,CNT从 0 开始往上数,一直数到 ARR。

当 CNT == ARR :

1.产生 Update更新事件(可以发TRGO、进中断)。

2.CNT自动清零,回到0,重新开始下一轮计数。

ARR决定:一轮计数一共要加多少次,取值范围0~65535,不要超过。

接上例,PSC=71,CNT每1us加1:

如果 ARR=99:CNT从0→99,一共要加100次。

一轮总时间 t=(99+1)*1us=100us

定时器溢出频率f=1/t

也就是f =72M/(PSC+1)/(ARR+1)

3、CNT(计数器Count)

没有专门的结构体,库函数配置TIM_SetCounter(TIMx, uint16_t NUM);

决定是从一开始计数还是从NUM计数,值越大,到达ARR的值用时越短。

4、形象举列

一个水盆在接水龙头滴水,CNT就是水盆里的初始水量,ARR就是水盆的容量,水量超过这个刻度就会溢出,水龙头滴水的间隔就是PSC来决定,决定是1s滴一滴,还是1us滴一滴,滴得越快,水量加的越快,溢出的时间也就越快,定时的时间就越短。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询