要有帧头 帧尾 我写过两个单片机蓝牙通信的程序。你加上帧头 帧尾就行了,再有校验位的话,基本万无一失。这个代码虽然不难 但是想了好久 分享一下 |
QQ截图20181127195125.jpg (38.71 KB, 下载次数: 41)
进入中断时候,先判断RI是否等于1,然后在把sbuf的数据放入数组中 |
请问现在解决了吗?求 |
可能是中断问题 |
谢谢讲解 |
4:在中断里加while(!ri)这样的语句,是巴不得系统死掉的写法。应该用if(ri==0) {再查下为啥进中断居然不置位,然后清掉,return;} 这样才是王道 |
1:你的代码没有任何容错。你既然用0d开头,那你就要检查一下0d,或者插入两到三个无意义的数据作为头。同时加入长度域和校验值。 2:出现ff的可能有两种情况,发送出错或接收出错。 起始位为逻辑0,那么不发送的时候最好是逻辑1.你开始初始化pc机或者单片机的时候,pc机或单片机在初始化之前他的状态不是rs232协议,单片机很多时候口是复用的,有可能开始收到或发送的就会错。这个很好解释。 3:你的代码计数到12,所以多了个ff,自然少了最后一个,这个很正常,这就是为啥我建议你加校验和头,长度的原因。 4:这种代码风格出错是正常的,不错才不正常。 |
SER中断有问题,判断到RI==0马上退出;RI==1才接收SBUF,清RI |
ser中断有问题,里面判断RI==1就清RI=0,接收SBUF,退出中断;如果RI==0直接退出 |
同样问题同求 |
第一次单片机也是接收12个字节, 只不过第一个字节是FF,楼主可以重点分析这个FF是从哪来的 |
老贴不回了 |
建议接收到数据后delay 一下,再发送数据。先调试发送一个BYTE成功后再调试发送接收多个BYTE。 |
init加flag=0试试 |
我感觉要先设置串口工作方式后在允许串口发送数据 |
发送的数据回传么,接收到一个字节进入接收中断后,直接发送, |
是不是缓冲区里有上次发送的数据导致乱码。。 |
这个问题我也遇到过,有时候也自己就正常了 |
在中断里面接收到数据之后马上发送看看 不要设置flag标志位 你看看结果是不是正确的 |
从调试方法上来说,先单个字节发送,然后在多个字节发送 |
51串口常於power on第一次傳送时常会發生資料錯誤, 所以, 建議power on時, 可以要求51串口, 傳任意資料, 之後, 才開始接收資料.... |
在中断里面接收到数据之后马上发送看看 不要设置flag标志位 你看看结果是不是正确的 |
没人回复,自顶 |