You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

__HAL_TIM_SET_AUTORELOAD与__HAL_TIM_SET_COUNTER的区别及动态选型

__HAL_TIM_SET_AUTORELOAD 和 __HAL_TIM_SET_COUNTER 的区别

核心作用

  • __HAL_TIM_SET_AUTORELOAD(&htim3,45):设置定时器的自动重载寄存器(ARR),该寄存器定义了计数器的计数上限。当计数器递增/递减到ARR值时,会触发更新事件(溢出/下溢),随后计数器重置到初始值(如向上计数模式下回到0)。
  • __HAL_TIM_SET_COUNTER(&htim3,45):直接修改定时器**计数器寄存器(CNT)**的当前值,强制将计数器的瞬时计数设为45,不改变计数上限。

具体差异对比

  1. 操作对象不同

    • __HAL_TIM_SET_AUTORELOAD 操作ARR寄存器,负责控制计数周期的长度
    • __HAL_TIM_SET_COUNTER 操作CNT寄存器,仅调整当前计数的位置
  2. 对周期的影响

    • 定时器周期(两次更新事件的间隔)由ARR值和时钟频率决定:周期 = (ARR + 1) / 定时器时钟频率(向上计数模式)。修改ARR会直接改变周期长度。
    • 修改CNT仅改变当前计数起点,不会影响周期,下一次更新事件仍会在计数器到达原ARR值时触发。
  3. 生效时机与事件触发

    • 修改ARR时,若开启ARR预加载(默认配置常开启),新值会在下次更新事件生效;未开启则立即生效。部分配置下修改ARR可能触发更新事件。
    • 修改CNT是立即生效,直接改变当前计数,默认不会触发更新事件。

动态修改周期的选择

如果需要动态调整定时器的计数周期,必须使用__HAL_TIM_SET_AUTORELOAD——只有修改ARR寄存器才能改变计数上限,从而实现周期的调整。__HAL_TIM_SET_COUNTER仅用于校准当前计数位置,无法改变周期。

内容的提问来源于stack exchange,提问作者user22269571

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:17:08