在stm8s003上,C语言的强制转换对PWM输出会产生莫名的影响
unsigned char r;
int value;
value = ((255-r)/1.0/255)*RELOAD_VALUE; //RELOAD_VALUE是PWM计数器的最高数值
TIM2->CCR2H = (value&0xff00)>>8; //比较值高八位
TIM2->CCR2L = value&0xff; //比较值低八位
unsigned char r;
int value;
value = (int)((255-r)/1.0/255)*RELOAD_VALUE; //RELOAD_VALUE是PWM计数器的最高数值
TIM2->CCR2H = (value&0xff00)>>8; //比较值高八位
TIM2->CCR2L = value&0xff; //比较值低八位
通过把unsigned char 强制转换为int,使得编译时的警告消失,最初在灯板上测试,功能正常。
后来,程序作了其他的修改,灯板硬件也重新设计,灯珠颜色驱动便变得不正常,在改变r、g、b数值时,PWM得不到想要的占重比,有时还会出现先恢复到默认颜色,然后才变到目标颜色。
此时应该是PWM工作异常。只需把强制转换去掉,灯珠驱动恢复正常。
具体原因仍不明。