STM32之影子寄存器

在这里插入图片描述
预分频寄存器计数到一半的时候,改变预分频值,此时不会立即生效,会等到计数完成,再从影子寄存器即预分频缓冲器里装载修改的预分频值。在这里插入图片描述
如上图,第一行是内部时钟72M,第二行是时钟使能,高电平启动。第三行是计数器时钟,分频系数为2,所以是上面除2,第四行计数器在每个上升沿递增,直到0036发生溢出,计数器寄存器清零,计数器溢出,产生更新事件脉冲,产生更新中断标志。

通过设置ARPE=1可以使用影子计数器。在这里插入图片描述
在这里插入图片描述

### PWM影子寄存器的工作原理 PWM影子寄存器是一种用于提高定时器性能和稳定性的机制。它通过在特定条件下更新比较寄存器的值,从而减少因频繁写入引起的干扰或不稳定性。以下是关于其工作方式的具体说明: #### 1. 更新时机控制 影子寄存器的主要功能是在后台存储新的比较值,并仅在指定事件发生时将其传输到主比较寄存器中。这种设计可以防止在计数过程中直接修改比较寄存器而导致的异常行为[^1]。 #### 2. 配置过程 为了配置并使用影子寄存器,在应用程序开发阶段通常需要执行以下操作: - **设置初始比较值**:利用 `__HAL_TIM_SET_COMPARE()` 宏定义初始的比较值,该宏会将新值加载至影子寄存器而非立即作用于主寄存器。 - **启动PWM输出**:调用 `HAL_TIM_PWM_Start()` 函数激活定时器及其关联的功能模块(如主输出通道),此时影子寄存器中的数据不会立刻生效[^2]。 #### 3. 数据同步条件 只有当满足预设条件时,例如上溢(Upper Overflow)或者下溢(Lower Underflow),影子寄存器的内容才会被复制到实际使用的比较寄存器里去影响波形生成逻辑。这样的安排有助于保持信号周期的一致性和精确度[^3]。 #### 示例代码展示如何正确运用这些工具实现动态调整占空比而不破坏当前运行状态: ```c // 初始化TIMx外设参数... void TIMx_Init(void){ ... } int main(){ uint16_t new_compare_value; // 外设初始化 TIMx_Init(); while(1){ // 动态计算下一个期望的比较数值 CalculateNewCompareValue(&new_compare_value); // 将新值送入影子寄存器, 不会影响即时输出直到下次刷新时刻到来 __HAL_TIM_SET_COMPARE(htim, Channel, new_compare_value); // 延迟或其他任务处理.. } } ``` 上述例子展示了在一个循环体内不断改变PWM脉宽的过程,其中每次更改都先保存进影子区域等待适当时机再正式采用,这样就能保障整个流程平稳过渡无明显突变现象出现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值