STMCU小助手
发布时间:2022-5-2 09:09
|
在的PWM输出例程中,感觉对捕获/比较寄存器(CCR)的设置不太合理。 8 w! o$ G5 t8 k1 r 原子哥的主函数如下,9 Z$ D% x! E; H) X % G/ [! q" c& F
TIM_SetCompare函数设置CCR2的值,从而改变PWM的占空比,但是在上面PWM_Init函数中,最后一段代码是 7 U, I) R: P& O
所以执行完PWM_Init函数后,定时器已经开始工作,但是此时的CCR2寄存器的值我们并没有设置过,所以应该是默认值0,即前面若干个PWM周期的占空比不是我们想要得到的。只有函数执行到上图红色方框中的TIM_SetCompare2函数后,才会设置目标CCR2的值,从而得到目标占空比。 下面是STM32 固件库中TIM_OC2Init函数的源码(截取),可以看到,在初始化TIM_OCInitTypeDef结构体的时候,通过TIM_Pulse成员变量设置了CCR2 的值,但是在原子哥的例程中并没有该结构体变量的初始化。并且在TIM_OC2Init函数之前调用TIM_SetCompare函数设置CCR2的值是无效的,因为TIM_OC2Init函数中会以默认值重新赋给CCR2寄存器。4 b6 d' I- D+ k4 s) v- p% V' e5 ] - B& J5 {- a# w' U! k+ m
如果想要精准地控制PWM输出,需要注意以下两点: 1、CCRx寄存器的初始化时间" V6 F7 x* \1 u ^% `( r) w . v- G7 X7 O8 S+ H( T 2、定时器的开启时间7 l l, {: n1 E . C0 S) I1 f# W: e+ k; D, U |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版