求助单片机串口通信的问题
调试助手

串口初始化

串口发送字节

串口中断服务程序

你是在接收中断里面直接调用发送函数,在连续接收时可能会导致数据发送与接收冲突,从而丢失数据。最好是在接收中断里做一个标志位,然后在主程序里面调用发送函数。或者等一组数据接收完之后再整体发送回去。
你调试时选择的是HEX模式,这个模式是十六进制表示的,你发11时其实不是发送的11,而是十六进制数0x11,换成十进制数就是17,是一个字节,所以不会错。但是你发111时,按照十六进制的解析就是前一个字节是0x11,后一个字节由于你只输了一位,默认高位为0,就是0x01,所以你接收到的就是11 01 ,并没有错误。
如果你发送区接收区都选成文本模式,就不会出现这个情况了。
试了,发送文本模式的话有时候能接到有时候接不到完整数据,比如我发一个120过去,接收到的是12。
意思就是我选择HEX模式发送的话,那我写进缓存区的数据就是用十六进制表示的是吧,我这样试了一下,发送一个字节最大的数FF,确实是可以接收回来的。
是的,十六进制就是从00到FF
你的程序没有问题,你在发送的时候是发送的16进制数据,你输入的是111其实系统默认变成1101 。你输入11 01 结果也一样。至于你在文本模式下,有时候能接受到有时不能接受到应该是你单片机没有处理过来,因为你在接收里有在发送,建议你做数据断帧处理,然后将接收到数据全部发送出去。数据断帧处理代码你要的话可以免费提供(95186869@qq.com)
楼上解释的精辟
恍然大悟.jpg 谢谢指导。
谢谢,如果可以的话,代码我也想要。
单片机的缓冲寄存器是8位 你要发多位数字的话得写循环或检测有没有发送完成。
