这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】定时器底层逻辑----from阿加

共1条 1/1 1 跳转至

【原创】定时器底层逻辑----from阿加

工程师
2026-08-22 01:49:33     打赏

朋友们,在咱们STM32版块里,定时器绝对是绕不开的核心外设。很多新手朋友在配置PWM呼吸灯或者1ms精准定时中断时,总是算不对频率,最后只能靠玄学去试参数。其实这往往是因为忽略了底层硬件的计数机制。STM32的定时器本质上就是一个不断累加的计数器。当我们配置预分频器PSC和自动重装载寄存器ARR时,千万不要忘记硬件底层的“加1”规则。因为计数器是从0开始计数的,所以真正的定时时间公式应该是:定时时间=(PSC+1)×(ARR+1)/定时器时钟频率。很多朋友在写代码时直接套用数学公式,漏掉了这个加1,导致定时永远差那么一点点。

另外还有一个极易踩坑的隐藏规则,那就是APB1总线的分频机制。在STM32F103的72MHz主频下,虽然APB1的分频系数是2,但挂载在APB1上的定时器时钟频率实际上会自动翻倍到72MHz,而不是36MHz。如果不把这个隐藏机制算进去,你的PWM频率和定时时间就会直接差出一倍。掌握了这些底层逻辑,以后无论是驱动舵机还是控制步进电机,参数配置就能做到心中有数。

在实际的工程开发中,定时器的应用远不止简单的定时中断和PWM输出。很多高级玩法都依赖于对定时器底层逻辑的深刻理解。例如,在需要生成高精度多通道PWM波形时,我们会用到定时器的中心对齐模式。在这种模式下,计数器会先从0递增到ARR的值,然后再递减回0,整个过程触发两次更新事件。这种对称的波形在电机控制(FOC算法)中至关重要,因为它能有效减少电机的谐波损耗和发热。但这也意味着,你在计算PWM频率时,必须考虑到这种双倍的计数行为,否则你设定的频率就会比预期慢一倍。

此外,关于定时器的影子寄存器(Shadow Register)机制,也是很多工程师容易忽视的盲点。为了防止在定时器运行过程中,我们修改ARR或CCR(捕获/比较寄存器)的值导致计数器突然溢出或产生毛刺,STM32设计了预装载功能。当我们开启预装载后,写入寄存器的值并不会立即生效,而是会暂存在预装载寄存器中,直到下一个更新事件(Update Event)发生时,才会被转移到影子寄存器中真正参与计数。这个机制保证了波形周期的平滑过渡,但在需要动态、实时修改PWM频率的极端场景下,如果不理解这个机制,你可能会发现修改了寄存器,波形却迟迟没有变化。因此,深入理解定时器的每一个底层机制,不仅是为了解决眼前的Bug,更是为了在面对复杂的工业控制需求时,能够游刃有余地设计出高可靠性的底层驱动。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]