stm32修改PWM频率的同时,占空比不变

参考资料:
stm32影子寄存器、预装载寄存器,TIM_OC1PreloadConfig和TIM_ARRPreloadConfig的作用
STM32定时器自动重装载寄存器和预加载寄存器的区别与联系
关于STM32影子寄存器和预装载寄存器和TIM_ARRPreloadConfig
结合代码与手册分析这两个函数

void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)

在这里插入图片描述
第一个参数:哪个定时器的通道1
第二个参数:使能还是失能
在这里插入图片描述过程:
1,临时保存CCMR1的整个16位值
2,将第3位OC1PE位(0x0008)取反(得到0xfff7)再和临时保存值按位与,也就是对第3位清0
在这里插入图片描述
3,对第3位被清0后的临时值按位或,也就是再从新对第3位写1(0x0008)或0(0x0000)
在这里插入图片描述
4,最后将临时值写入16位寄存器CCMR1,整个过程也就是修改了第3位。

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)

在这里插入图片描述
第一个参数:哪个定时器
第二个参数:使能还是失能
过程:
根据是哪个定时器使能能还是失能,将位置1或0
在这里插入图片描述
ARPE在控制寄存器的第7位,对应0x0080
在这里插入图片描述
1,直接或,怎么不用先清0?因为我要的就是对于位置1,使能它。
或运算:假如这位是1,那1或1是1,1或0还是1,强制使得改为置1.
2,按位取反再按位与,按位取反后,0x0080变成0xff7f,7对应四位二进制:0111,0与1为0,0与0为0,可以使得对应位置0,结果写入CR1,整个过程也就是修改了第7位。
这个过程比上面那个效率更好,才2个语句。
在这里插入图片描述
在这里插入图片描述
思路:先修改预装载寄存器的ARR和CCR的值,再同时送到影子寄存器生效
在这里插入图片描述
在这里插入图片描述

实验暂时没做

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值