C语言的强制转换对PWM输出会产生莫名的影响

在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工作异常。只需把强制转换去掉,灯珠驱动恢复正常。
具体原因仍不明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值