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

关于在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个回答
anny 回答时间:2015-2-23 09:43:59
wenyangzeng 发表于 2015-2-22 13:06
我用的就是1.40版。
看你的代码估计发送的数据是采用串行模式,我在调试串行发送数据时用示波器捕捉过时钟 ...

回大神,我在每发送数据后延时1MS,不行,后来更换成了1.311,问题还是没有解决。这个程序也还有其它问题也没解决,暂时放一下用51了,我51用的是20M1T的
谢谢您在百忙中回答
wenyangzeng 回答时间:2015-2-22 13:06:21
我用的就是1.40版。
看你的代码估计发送的数据是采用串行模式,我在调试串行发送数据时用示波器捕捉过时钟和数据的时序,当SEND指令结束后,实际上数据还在发送过程中,这时需要延时后才执行第二次发送,否则缓冲区会出错。而51系列由于执行速度慢些,不会出现此问题。
anny 回答时间:2015-2-22 10:13:01
逍遥李 发表于 2015-2-16 08:36
循环应该是没问题的,问题很可能出在编译器上面

回大神,我用的是IAR1.40,我感觉用STM8这个芯片出的问题都很怪,可能像您所说的是编译器的问题,不知道大神您推荐使用哪个版本的编译器好!谢谢
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
在循环中每次操作函数后插入延时应该就能解决

回大神,谢谢您的回复,加延时不行!
那片清茶 回答时间:2015-2-24 09:34:59
anny 发表于 2015-2-23 09:43
回大神,我在每发送数据后延时1MS,不行,后来更换成了1.311,问题还是没有解决。这个程序也还有其它问题 ...

你可以试试STVD,官方的可能会好点。
w小菜才 回答时间:2015-2-24 11:01:42
了解一下
anny 回答时间:2015-2-25 09:21:48
那片清茶 发表于 2015-2-24 09:34
你可以试试STVD,官方的可能会好点。

谢谢,我试试
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版