你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于在STM8S用FOR的一个问题,请教知道的大神

[复制链接]
anny 提问时间:2015-2-15 11:19 /
我用了一块STM8F103F3P,TSSOP20封装的最小系统板,直接连接WS2811的灯条,用数组来存贮要发送的数据,发送是这样写的:
/***********************
函数功能:发送LED_DATA数组的数据
输入参数:无
输出参数:无
备    注:无
***********************/
void send_string_data()
{
                u8 i;
                sim();//关总中断,防止发送数据中出错
                for(i=0;i<size;i++)
                {
                        WS2811_SendByte(LED_data[i][1]);
                        WS2811_SendByte(LED_data[i][0]);
                        WS2811_SendByte(LED_data[i][2]);
                }
                   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[0][1]);
                        WS2811_SendByte(LED_data[0][0]);
                        WS2811_SendByte(LED_data[0][2]);                  
                    }
                    else if(i==1)
                    {
                        WS2811_SendByte(LED_data[1][1]);
                        WS2811_SendByte(LED_data[1][0]);
                        WS2811_SendByte(LED_data[1][2]);                  
                    }
                    else if(i==2)
                    {
                        WS2811_SendByte(LED_data[2][1]);
                        WS2811_SendByte(LED_data[2][0]);
                        WS2811_SendByte(LED_data[2][2]);                  
                    }
                    else if(i==3)
                    {
                        WS2811_SendByte(LED_data[3][1]);
                        WS2811_SendByte(LED_data[3][0]);
                        WS2811_SendByte(LED_data[3][2]);                  
                    }
                    else if(i==4)
                    {
                        WS2811_SendByte(LED_data[4][1]);
                        WS2811_SendByte(LED_data[4][0]);
                        WS2811_SendByte(LED_data[4][2]);                  
                    }
                }
                   Reset();
                rim();//开总中断                               
}

更改成这样后,颜色问题解决了,功能正常了。。。。。。。
有没有知道原因的大神,解释一下,这是什么原因?
大过年的,在此祝各位明年工作顺利,用啥U都顺心!
收藏 评论17 发布时间:2015-2-15 11:19

举报

17个回答
arm8686 回答时间:2015-2-15 12:27:28
  1. 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这个芯片出的问题都很怪,可能像您所说的是编译器的问题,不知道大神您推荐使用哪个版本的编译器好!谢谢
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版