完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
使用串口调试助手做串口通信,使用的单片机型号是STC15F2K60S2,写了一个返回接收到的数据的程序,然而,实际调试时,两位数的可以正常接收显示,一旦发送3位数,串口就只能接收到分开的数据,比如用串口调试助手发送111,接收回来显示的是11 01,试过好多次都是这样。求助大神请问是哪里出问题了呢?
|
|
相关推荐
11个回答
|
|
|
你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
最佳答案
|
|
|
|
|
|
本帖最后由 blust 于 2016-11-14 11:45 编辑
你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换成十进制数就是17,是一个字节,所以不会错。但是你发111时,按照十六进制的解析就是前一个字节是0x11,后一个字节由于你只输了一位,默认高位为0,就是0x01,所以你接收到的就是11 01 ,并没有错误。 |
|
|
|
|
|
如果你发送区接收区都选成文本模式,就不会出现这个情况了。
|
|
|
|
|
|
试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。
|
|
|
|
|
blust 发表于 2016-11-14 11:44 意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。 |
|
|
|
|
|
是的,十六进制就是从00到FF |
|
|
|
|
|
你的程序没有问题,你在发送的时候是发送的16进制数据,你输入的是111其实系统默认变成1101 。你输入11 01 结果也一样。至于你在文本模式下,有时候能接受到有时不能接受到应该是你单片机没有处理过来,因为你在接收里有在发送,建议你做数据断帧处理,然后将接收到数据全部发送出去。数据断帧处理代码你要的话可以免费提供(95186869@qq.com)
|
|
|
|
|
|
|
|
|
|
|
blust 发表于 2016-11-14 15:32 恍然大悟.jpg 谢谢指导。
|
|
|
|
|
mingmingge8991 发表于 2016-11-14 23:13 谢谢, 如果可以的话,代码我也想要。
|
|
|
|
|
|
单片机的缓冲寄存器是8位 你要发多位数字的话得写循环或检测有没有发送完成。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16901 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:39 , Processed in 0.982872 second(s), Total 94, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2960