关于在STM8S用FOR的一个问题,请教知道的大神
我用了一块STM8F103F3P,TSSOP20封装的最小系统板,直接连接WS2811的灯条,用数组来存贮要发送的数据,发送是这样写的:/***********************
函数功能:发送LED_DATA数组的数据
输入参数:无
输出参数:无
备 注:无
***********************/
void send_string_data()
{
u8 i;
sim();//关总中断,防止发送数据中出错
for(i=0;i<size;i++)
{
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
}
Reset();
rim();//开总中断
}
上面的发送程序在51中验证过,是没问题的,想想也不应该有问题,但是在STM8S103中,始终是发送的数据不对,出现了颜色不对的现象,但是我把程序更改成这样:
/***********************
函数功能:发送LED_DATA数组的数据
输入参数:无
输出参数:无
备 注:无
***********************/
void send_string_data()
{
u8 i;
sim();//关总中断
for(i=0;i<size;i++)
{
if(i==0)
{
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
}
else if(i==1)
{
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
}
else if(i==2)
{
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
}
else if(i==3)
{
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
}
else if(i==4)
{
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
WS2811_SendByte(LED_data);
}
}
Reset();
rim();//开总中断
}
更改成这样后,颜色问题解决了,功能正常了。。。。。。。
有没有知道原因的大神,解释一下,这是什么原因?
大过年的,在此祝各位明年工作顺利,用啥U都顺心!
for(i=0;i<size;i++)
这句里头的 size ,在哪里定义的?
如何传递进来的? arm8686 发表于 2015-2-15 12:27
这句里头的 size ,在哪里定义的?
如何传递进来的?
感谢您的回复:
在这个子程序的开头,头文件的下一行,用的是:#define size 5,5代表的是5个芯片 没遇到过,帮顶 建议试试设置一下编译器的优化等级。 本帖最后由 wenyangzeng 于 2015-2-15 21:21 编辑
在循环中每次操作函数后插入延时应该就能解决 循环应该是没问题的,问题很可能出在编译器上面 学习了,谢谢! wenyangzeng 发表于 2015-2-15 21:18
在循环中每次操作函数后插入延时应该就能解决
回大神,谢谢您的回复,加延时不行! 逍遥李 发表于 2015-2-16 08:36
循环应该是没问题的,问题很可能出在编译器上面
回大神,我用的是IAR1.40,我感觉用STM8这个芯片出的问题都很怪,可能像您所说的是编译器的问题,不知道大神您推荐使用哪个版本的编译器好!谢谢
页:
[1]
2