我用了一块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都顺心! |
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
如何使用ST官网例程_LIN总线通讯_STM8AF
STM8 LIN
IAR代码编辑太费劲了,想问一下有没有好的方法,试了VScode但是头文件老是报错,调了很久也没调好,想换个方法了。
想问一下各位大佬,IAR下载调试代码时出现 warning: is an illegal data sample expression IAR是什么意思啊?
STM8S标准库TIM1编码器功能不计数,请大师帮我看看
回大神,我在每发送数据后延时1MS,不行,后来更换成了1.311,问题还是没有解决。这个程序也还有其它问题也没解决,暂时放一下用51了,我51用的是20M1T的
谢谢您在百忙中回答
看你的代码估计发送的数据是采用串行模式,我在调试串行发送数据时用示波器捕捉过时钟和数据的时序,当SEND指令结束后,实际上数据还在发送过程中,这时需要延时后才执行第二次发送,否则缓冲区会出错。而51系列由于执行速度慢些,不会出现此问题。
回大神,我用的是IAR1.40,我感觉用STM8这个芯片出的问题都很怪,可能像您所说的是编译器的问题,不知道大神您推荐使用哪个版本的编译器好!谢谢
这句里头的 size ,在哪里定义的?
如何传递进来的?
感谢您的回复:
在这个子程序的开头,头文件的下一行,用的是:#define size 5,5代表的是5个芯片
在循环中每次操作函数后插入延时应该就能解决
回大神,谢谢您的回复,加延时不行!
你可以试试STVD,官方的可能会好点。
谢谢,我试试