完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位好!
上位机发送数据,单片机接收后再将同样的数据发送出来,但是发送出来的数据会丢失1~2个数据,不知道怎么回事,望解答!
|
|
相关推荐
1 条评论
14个回答
|
|
你说的1~2个数据,指的是1~2个字节,还是1~2个bit.还有你用的是串口助手之类的发的么?如果这样你还丢失的话,你可以在发送的字节中间加一个delay(30)之类的延时就应该好了
|
|
|
|
|
|
|
|
发送中断时关闭了,接收的时候进入中断已经是RI=1啦,我也试了下还是有丢数据的问题。 比如我发送字符串“123”。接收后发出来只有12或13 |
|
|
|
liuxiu1991 发表于 2016-7-5 14:53 比如:发送字符串“1234”,单片机接收后再发送出来可能只有123,或124,或者134等等; 我在发送数据的时候,添加了: while(!TI);这个应该一样的效果吧 |
|
|
|
liuxiu1991 发表于 2016-7-5 14:53 在SBUF = temp的后面加吗,加了无论接收到的数据是多少,发出后只有一位 |
|
|
|
就是这种状况。 |
|
|
|
你试过加延时了,还是不正常么? WHILE(!TI)这句话一般是放到你发送之前,就是SBUF=...这条之前。肯定是先判断串口闲置,才会发送的啊 |
|
|
|
liuxiu1991 发表于 2016-7-6 08:23 后面我把flag=0放在了ES=1之前就没有问题了。。。。。 |
|
|
|
你这个flag除了占一个系统时钟,什么用都没有,所以你还得找找原因 |
|
|
|
应该不是flag位置的问题,你可是试试吧flag再换换位置,看看有没有什么变化
|
|
|
|
我看你的串口助手上勾选是以ASCII格式发送的,你想想看以ASCII格式发送123会得到什么?以十进制发送试试看
|
|
|
|
如果一定要用ASCII发送,把发送程序放到中断中
|
|
|
|
|
|
|
|
我认为原因是: flag=0放在ES=1之后的话,在发送数据的同时,已完成另外一个字节数据的接收,RI置1; 然后执行完ES=1之后瞬间进入中断,flag=1; 退出中断服务程序,再执行flag=0; 这样,在/* ES=1;flag=0;*/中间多执行了一个/* flag=1;*/,这样就丢失了一字节的数据; |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32串口接受中断使用C++STL中的queue导致所有中断失效
462 浏览 1 评论
2456 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1262 浏览 0 评论
3334 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
3100 浏览 4 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-25 09:04 , Processed in 0.653088 second(s), Total 70, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号