打印

串口可以实现全双工吗?

[复制链接]
316|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一片混沌|  楼主 | 2018-8-10 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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不可以发送数据,可是我的程序不能保证双方不在同一时刻发送数据,这个问题有什么觉得方法吗?
串口通信不应该是全双工的吗?

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

391

主题

391

帖子

0

粉丝