一般情况串口的接受和发送分别需要使用TX和RX两个引脚来实现,但在一些UART的实际应用中,通信双方身份为主机和从机,数据流是半双工的,那么当IO口资源紧张时可以使用半双工模式通过一个引脚实现数据的发送和接受,同时又保证数据不出错。我们一起来看下红枫派开发板例程中是如何实现的?
首先GD32F303的UART是支持半双工模式的,但想要真正使用起来,软硬件还需要特殊设计。
首先是硬件设计,在红枫派开发板中的RS485通信使用半双工实现,原理图是这样的:

其中很重要的两个点是:
1、在MCU的TX引脚上一定要增加一个上拉电阻,保证MCU发送和接受模式切换时IO口电平可以保持高电平的空闲态。
2、485端实际还是发送和接受分开两个引脚,那为了避免MCU发送时和485芯片的发送引脚形成电平竞争,在485芯片的RO引脚上串联一个电阻后再连接到MCU TX引脚和485的DI引脚。
如果通信双方都是半双工引脚,那么只需要有一个上拉电阻、双方都使用开漏输出模式即可。
在软件设计方面,让我们看下红枫派开发板例程的实现过程:
1、初始化时使能半双工模式,同时使能接受并关闭发送,因为除了MCU发送过程,其他状态都可以保持为接受。

2、开启发送时,首先关闭UART接受功能,再使能发送功能,否则将接受到自己发送的数据。

3、在发送过程中可以查询TBE标志进行发送等待,但在执行完最后一个字节发送后一定要等待TC标志置位。

4、发送完毕并等待到TC标志置位后,代表发送已经实际完成,此时关闭UART发送,使能接受。

5、对于接受,只需要按正常的处理方式使用中断或者DMA就可以,只要前面发送步骤正确,就不会干扰到接受功能。

此时,释放出来的串口的RX引脚可以做其他功能使用了,大家可以购买红枫派开发板进行这个功能的体验。
关键字:GD32 MCU 串口
引用地址:
节省IO的小技巧:GD32 MCU如何使用一个GPIO实现串口半双工收发
推荐阅读最新更新时间:2026-03-25 11:09
全双工和半双工RS-485收发器MAX13430E–MAX1
MAX13430E–MAX13433E为全双工和半双工RS-485收发器,具有可调节的低压逻辑接口,能够工作在多电压系统。该特性允许器件直接与低压ASIC/FPGA连接,无需额外元件。MAX13430E–MAX13433E RS-485收发器工作在+3V至+5V VCC电源电压范围内。低电压逻辑接口工作在+1.62V至VCC电源电压范围内。 MAX13430E/MAX13432E具有简单的限摆率驱动器,有助于降低EMI,并降低由于不恰当的终端匹配引起的电缆反射,支持最高500kbps的无差错数据传输。MAX13431E/MAX13433E的驱动器摆率不受限制,可以支持最高16Mbps的传输速率。MAX13430E/MAX13
[模拟电子]
半双工iCoupler隔离型RS - 485收发器ADM24
差分总线收发器的ADM2481是一个综合,电隔离组件的数据双向平衡,多点总线传输线的通信设计。它符合:与ANSI和ISO 8482 EIA/TIA-485-A 1987(e)项。利用ADI公司的iCoupler ®技术,公司的ADM2481结合了3通道隔离器,三态差分线路驱动器,并成为一个单一的包差分输入接收机。该设备的动力与逻辑方无论是5 V或3 V电源供电,以及母线侧采用5 V电源只。 摆率限制的控制数据速率为500 kbps的。该设备的输入阻抗为96kΩ的,允许多达256个总线收发器。它的驱动程序有主动高启动功能。该名司机差分输出和接收器差分输入内部连接,形成一个差分I / O端口。当驱动程序被禁用或当VDD1或VDD
[模拟电子]
3D打印“狂飙”背后:兆易创新GD32 MCU多元方案驱动性能升级
从一张设计图纸到指尖触手可及的精巧玩具,3D打印正在化身为创客空间与家庭中的全能助手。 以全球约12亿个家庭为基数计算,目前消费级3D打印机的整体渗透率尚不足1%,却已展现出高达28.8%的年复合增长率 。今年行业预估全球销量有望冲击千万台级别,这意味着3D打印正在从小众爱好迈向规模化普及。 在需求爆发与制造能力成熟的双重驱动下,3D打印已成为消费电子领域成长显著的细分赛道之一。而在这场浪潮背后,真正决定用户体验与性能边界的,是不断迭代的硬件架构与核心控制能力。在此过程中,兆易创新多元3D打印方案,凭借GD32 MCU以及与模拟、存储等多条产品线优势组合,正成为驱动行业突破性能瓶颈的关键力量。 以高性能算法重塑控制架构
[嵌入式]
【GD32 MCU 移植教程】10、从STM32F030系列移植到GD32E230系列
1. 前言 GD32E230 对比 STM32F030 有着很好的兼容性和更高的性价比,内核和外设都有所增强。本人曾做过产品的 MCU 替换,将基于 STM32F0xx 1.5.0 固件库的应用程序移植到 GD32E230 上,大体上来说工作量不大,移植后的效果也不错,GD32E230 相比 STM32F030 有不少功能的升级,主频也更高,能感觉到国产 MCU 一直在进步。本人将此前的移植经验进行了整理,可帮助有需要的朋友快速将应用程序从 STM32F030 移植到GD32E230 上(基于STM32F0xx 标准库 V3.5.0 和 STM32F10x 标准库 V3.5.0)。本移植工作除基于STM32F0xx 1.5.0固件
[单片机]
【GD32 MCU 移植教程】7、从 GD32F10x 移植到 GD32E103
1. 前言 本应用笔记旨在帮助您快速将基于 GD32F10x 2.0 版本及以上固件库开发的应用程序从GD32F10x 系列微控制器移植到 GD32E103 系列微控制器。GD32E103 和 GD32F10x 系列相比,考虑软硬件兼容性,从 Flash 和 SRAM 容量,包括外设模块的增强性能上来看,E103 最接近 F105。 开始前您需要安装 GD32E103 关于 KEIL 或 IAR 的插件,在工程选项的器件条目中选择GD32E103 对应型号,添加 GD32E103 的 Flash 下载算法。 为了更好的利用本应用笔记中的信息,您需要对 GD32 系列微控制器有比较深刻的了解。您可在 GD32MCU 资料网站 下
[单片机]
keil中GD32 MCU IAP中APP的存储地址如何设置?
前面和大家聊过什么是IAP(有不懂的小伙伴请看下前面的视频哦),那么IAP中APP的存储地址该如何设置呢 以keil为例,打开工程的option选项卡: 将IROM1中的地址改为你想要保存的位置,比如0x08008000开始的位置: 这样通过keil烧录,程序就自动下载到从0x08008000起始的flash区域哦。 如果你想要通过IAP烧录APP,也一定要烧录到0x08008000起始的flash区域哦,否则跳转到APP中执行程序就会出错的。
[单片机]
【GD32 MCU 移植教程】1、从 GD32F10x 移植到 GD32F30x
1. 前言 对于使用 GD32 系列微控制器进行产品开发的设计人员来说,因产品及功能升级,往往需要将一种微控制器替换成另一种微控制器,在保留既有功能的情况下增加新功能。为了更快地推出新产品,设计人员经常要将应用程序移植到新的微控制器。本应用笔记旨在帮助您快速将应用程序从 GD32F10x 系列微控制器移植到 GD32F30x 系列微控制器。 为了更好的利用本应用笔记中的信息,您需要对 GD32 系列微控制器有比较深刻的了解。 2. 引脚兼容性 GD32F10x 与 GD32F30x 在相同封装下是 Pin To Pin 兼容的。但由于 GD32F30x 较 GD32F10x 增加了内部 48MHz RC 振荡器给 USBD
[单片机]
关于使用GD32 MCU实现位带操作的指南
MCS-51单片机可以简单的将P1口的第2位独立操作,如P1.2=0;P1.2=1,就是这样把P1口的第三个脚(BIT2)置0置1。对于32位ARM MCU 我们可以像51单片机一样单独的对某个端口的某一个IO单独操作吗?答案是可以的。并且这样就引入了“位带操作”的概念。简而言之,为了能够实现单独的位控制,所以就有了位带这样的操作机制。 ARM Cortex-M3处理器采用哈佛结构,可以使用相互独立的总线来读取指令和加载/存储数据。指令代码和数据都位于相同的存储器地址空间,但在不同的地址范围。程序存储器,数据存储器,寄存器和I/O端口都在同一个线性的4 GB的地址空间之内。这是Cortex-M3的最大地址范围,因为它的地址总线
[单片机]