硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3924|回复: 4
收起左侧

[UART] 串口可以实现全双工吗?

[复制链接]

31

主题

53

回帖

146

积分

初级会员

积分
146
发表于 2018-11-23 14:06:55 | 显示全部楼层 |阅读模式
本帖最后由 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不可以发送数据,可是我的程序不能保证双方不在同一时刻发送数据,这个问题有什么觉得方法吗?
串口通信不应该是全双工的吗?


回复

使用道具 举报

17

主题

248

回帖

299

积分

高级会员

积分
299
发表于 2018-11-23 14:14:37 | 显示全部楼层
本来就是全双工的,是你的处理方式有问题
回复

使用道具 举报

17

主题

248

回帖

299

积分

高级会员

积分
299
发表于 2018-11-23 14:14:37 | 显示全部楼层
本来就是全双工的,是你的处理方式有问题
回复

使用道具 举报

2

主题

58

回帖

64

积分

初级会员

积分
64
发表于 2018-11-23 16:05:22 | 显示全部楼层
贴程序,看怎么改!
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2018-11-23 21:26:29 | 显示全部楼层
使用FIFO              
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 11:31 , Processed in 0.159736 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表