节省IO的小技巧:GD32 MCU如何使用一个GPIO实现串口半双工收发

[复制链接]
1281|7
手机看帖
扫描二维码
随时随地手机跟帖
聚沃科技|  楼主 | 2024-8-20 09:17 | 显示全部楼层 |阅读模式
一般情况串口的接受和发送分别需要使用TXRX两个引脚来实现,但在一些UART的实际应用中,通信双方身份为主机和从机,数据流是半双工的,那么当IO口资源紧张时可以使用半双工模式通过一个引脚实现数据的发送和接受,同时又保证数据不出错。我们一起来看下红枫派开发板例程中是如何实现的?
首先GD32F303UART是支持半双工模式的,但想要真正使用起来,软硬件还需要特殊设计。
首先是硬件设计,在红枫派开发板中的RS485通信使用半双工实现,原理图是这样的:
图片3.png
其中很重要的两个点是:
1、在MCUTX引脚上一定要增加一个上拉电阻,保证MCU发送和接受模式切换时IO口电平可以保持高电平的空闲态。
2485端实际还是发送和接受分开两个引脚,那为了避免MCU发送时和485芯片的发送引脚形成电平竞争,在485芯片的RO引脚上串联一个电阻后再连接到MCU TX引脚和485DI引脚。
如果通信双方都是半双工引脚,那么只需要有一个上拉电阻、双方都使用开漏输出模式即可。
在软件设计方面,让我们看下红枫派开发板例程的实现过程:
1、初始化时使能半双工模式,同时使能接受并关闭发送,因为除了MCU发送过程,其他状态都可以保持为接受。
图片4.png
2、开启发送时,首先关闭UART接受功能,再使能发送功能,否则将接受到自己发送的数据。
图片5.png
3、在发送过程中可以查询TBE标志进行发送等待,但在执行完最后一个字节发送后一定要等待TC标志置位。
图片6.png
4、发送完毕并等待到TC标志置位后,代表发送已经实际完成,此时关闭UART发送,使能接受。
图片7.png
5、对于接受,只需要按正常的处理方式使用中断或者DMA就可以,只要前面发送步骤正确,就不会干扰到接受功能。
图片8.png
此时,释放出来的串口的RX引脚可以做其他功能使用了,大家可以购买红枫派开发板进行这个功能的体验。

教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462

图片1.png
图片2.png

使用特权

评论回复
tpgf| | 2024-9-3 14:02 | 显示全部楼层
需要进行硬件设计和软件配置两个方面的工作

使用特权

评论回复
磨砂| | 2024-9-7 10:12 | 显示全部楼层
在初始化时使能半双工模式,同时使能接受并关闭发送功能,因为除了在MCU发送过程中,其他状态都可以保持为接受状态

使用特权

评论回复
晓伍| | 2024-9-7 16:51 | 显示全部楼层
在初始化时使能半双工模式,同时使能接受并关闭发送功能,因为除了在MCU发送过程中,其他状态都可以保持为接受状态

使用特权

评论回复
木木guainv| | 2024-9-12 15:36 | 显示全部楼层
由于在单线半双工模式下,TX引脚既需要作为输入也需要作为输出,因此应当选择开漏输出或复用推挽输出模式

使用特权

评论回复
八层楼| | 2024-9-15 08:11 | 显示全部楼层
开启发送时,首先关闭UART接受功能,再使能发送功能,以防止接受到自己发送的数据

使用特权

评论回复
观海| | 2024-9-16 09:19 | 显示全部楼层
在MCU的TX引脚上增加上拉电阻,确保在模式切换时IO口电平能够保持稳定

使用特权

评论回复
发货后已经wi| | 2024-9-30 21:52 | 显示全部楼层
同时又保证数据不出错。我们一起来看下红枫派开发板例程中是如何实现的

使用特权

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

本版积分规则

170

主题

190

帖子

8

粉丝