anny 发表于 2015-2-15 11:19:41

关于在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都顺心!

arm8686 发表于 2015-2-15 12:27:28

for(i=0;i<size;i++)

这句里头的 size ,在哪里定义的?
如何传递进来的?

anny 发表于 2015-2-15 12:48:08

arm8686 发表于 2015-2-15 12:27
这句里头的 size ,在哪里定义的?
如何传递进来的?

感谢您的回复:
在这个子程序的开头,头文件的下一行,用的是:#define size 5,5代表的是5个芯片       

lkl0305 发表于 2015-2-15 14:40:16

没遇到过,帮顶

arm8686 发表于 2015-2-15 20:44:39

建议试试设置一下编译器的优化等级。

wenyangzeng 发表于 2015-2-15 21:18:26

本帖最后由 wenyangzeng 于 2015-2-15 21:21 编辑

在循环中每次操作函数后插入延时应该就能解决

逍遥李 发表于 2015-2-16 08:36:03

循环应该是没问题的,问题很可能出在编译器上面

_ilikerome_ 发表于 2015-2-16 09:07:51

学习了,谢谢!

anny 发表于 2015-2-22 10:10:56

wenyangzeng 发表于 2015-2-15 21:18
在循环中每次操作函数后插入延时应该就能解决

回大神,谢谢您的回复,加延时不行!

anny 发表于 2015-2-22 10:13:01

逍遥李 发表于 2015-2-16 08:36
循环应该是没问题的,问题很可能出在编译器上面

回大神,我用的是IAR1.40,我感觉用STM8这个芯片出的问题都很怪,可能像您所说的是编译器的问题,不知道大神您推荐使用哪个版本的编译器好!谢谢
页: [1] 2
查看完整版本: 关于在STM8S用FOR的一个问题,请教知道的大神