stm8 16位单片机高级定时器TIM1的PWM改变频率时要注意的地方

2019-12-19 18:12发布

当你用stm8 TIM1输出PWM时,如果你要改变PWM的频率(周期),那么你当你从低频向高频转换时,你会发现PWM有一段时间不输出了,特别是分频较大时会认为没输出了,问题更难找。向我这个项目的例子:16MHZ时钟分频成4ms计数一次。有效电平占空比:TIM1_CCR1H = 0x00,TIM1_CCR1L = 0x7c,不变,当从TIM1_ARRH = 0x09,TIM1_ARRL = 0x3C,改变为 TIM1_ARRH= 0x00,TIM1_ARRL = 0xF9,时PWM输出完全停止。因为CNT计数器已经走过了小周期的溢出位置,需要重新计满65535再走到0x7C才可以有需出但是按我这个项目计数算要4多分钟才能重新输出。找了我半天的时间才找到问题。希望能对做同样功能时遇到同样问题没发现的朋友们有帮助。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
NEXEN1106
1楼-- · 2019-12-19 20:12
 精彩回答 2  元偷偷看……
way2888
2楼-- · 2019-12-20 01:51
设置好新的频率,ug置一应该就可以解决了
ZDHCKJS
3楼-- · 2019-12-20 06:01
多谢楼主分享经验
一心2013
4楼-- · 2019-12-20 07:10

楼主有没有试过改频率时直接重置计数器的,

//*******重置 定时器 清除定时器 写入新的计数值**************/
void TIM1_CoutReset( u16 TIM1_CoutVout )
{      
      TIM1_CNTRH = 0;//计数清零
      TIM1_CNTRL = 0;
      TIM1_ARRH = (u8)(TIM1_CoutVout>>8);
      TIM1_ARRL = (u8) TIM1_CoutVout;
      
}
codefish
5楼-- · 2019-12-20 07:47
学习一下!
xmm
6楼-- · 2019-12-20 11:55
 精彩回答 2  元偷偷看……

一周热门 更多>