既生瑜,何生亮?

STM32的定时器中,ARR寄存器配置计数周期,而RCR寄存器针对高级定时器提供更灵活的更新事件控制。RCR允许设置溢出次数来触发更新事件,适用于需要不同频率驱动脉冲和定时触发的场景。在中心对齐计数模式下,RCR的奇偶数值会影响更新事件的发生位置。对于开发者,理解RCR的工作原理能够优化定时器的使用,尤其是在实时性和时序要求高的应用中。
摘要由CSDN通过智能技术生成

a60b5ea0a98b956d3aafb0a335a6464f.jpeg

我们知道在STM32 MCU片内的常规定时器【基本定时器、通用定时器、高级定时器】里面,有个ARR寄存器,它负责配置定时器的计数时钟个数,进而决定每个计数周期的时长。【下图是计数器三种计数方式及溢出点的示意图,绿色圆圈表示溢出位置。】

aca8070eac37bb14ed6634d5319a0eec.png

对于基本定时器和通用定时器,每次溢出时都可以产生更新事件,该事件可以用来触发中断、触发DMA请求、触发其它外设【ADC/DAC等】或与其它定时器级联等。显然,这个更新事件发生频率跟ARR值直接相关,对于单向【边沿对齐】计数模式,更新事件发生频率跟计数频率一致,对于双向【中心对齐】计数模式,更新事件发生的频率是计数频率的2倍。如果希望更新事件发生的频率快点或慢点,只需相应调整计数时钟及分频值和ARR值即可。然而在高级定时器里,又引入了另外一个寄存器RCR,它针对计数器的溢出动作进行计数,每发生RCR+1次溢出就可以产生更新事件。它不再要求更新事件于每个计数周期都发生,让更新事件发生点更具灵活性。如果单从影响更新事件发生频率这个角度来看,它的引入似乎多余。我们调整ARR及时钟分频不照样可以达到目的吗?为何还要来个RCR呢?

的确,单从计数定时这个角度来看,引入这个对溢出次数进行统计的寄存器意义并不大,正因为如此,也就不难理解基本定时器和通用定时器就没有这个RCR寄存器及相关部件。

不过,

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值