本帖最后由 ggafish 于 2018-11-23 14:09 编辑
最近调试一个程序。
PC和STM32串口通信。
STM32以串口中断方式接收,在中断中检测帧头和帧尾,帧头为AA,帧尾为0xBB.
中断服务程序中,检测到帧头,malloc一个buffer,开始接收,将数据放到buffer中,检测到帧尾,接收结束,把buffer地址发送到另一个任务做处理。
如:aa 11 22 33 bb
为了调试,另一个任务接收到buffer地址后,将一帧的数据输出到串口打印出来。
出现的问题是:两帧之间必须有时间间隔,不然程序就会出错。 比如 aa 11 22 33 bb aa 44 55 66 bb,程序就会出错。
我如果分两次发,先发aa 11 22 33 bb,再发送aa 44 55 66 bb。就没有问题。
经过反复测试发现:发完bb之后,下位机会通过串口输出,这是如果pc紧跟着bb发送一个字节,stm32程序就跑飞了,不再响应串口,程序就锁死了。
我将串口输出语句注释掉,就可以连续接收两帧。或者,将串口打印的代码改到另外一个串口输出,程序也正常了。如aa 11 22 33 bb aa 44 55 66 bb。
得出的结论是:stm32在往pc发送数据时,pc不可以发送数据,可是我的程序不能保证双方不在同一时刻发送数据,这个问题有什么觉得方法吗?
串口通信不应该是全双工的吗? |