当前位置: 首页 > news >正文

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

一般情况串口的接受和发送分别需要使用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相关咨询:https://www.gd32bbs.com/


http://www.mrgr.cn/news/1576.html

相关文章:

  • Vue 3中deep属性的深度解析:ref与reactive的不同表现
  • Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间
  • 16:【stm32】I2C的使用一:I2C片上外设的使用
  • 记录一次edu web端渗透测试实录
  • C#与其它编程语言有什么区别,以及相关优势有哪些
  • Windows禁止应用联网
  • Awesome-Chinese-LLM:收集和梳理中文LLM相关的开源模型、应用、数据集及教程等资料
  • Android about event log
  • Java设计模式之中介者模式
  • EmguCV学习笔记 VB.Net 3.1 直线
  • python工具--mysql2doris的datax json生成工具
  • C语言整数溢出的问题
  • 智能驾驶时代的中控屏UI设计创新
  • android13隐藏调节声音进度条下面的设置按钮
  • 开放式耳机哪种好用?开放式种草测评!
  • 网络热门编程项目导学:尚医通
  • 【C++深度探索】unordered_set、unordered_map封装
  • 全栈笔记_浏览器工作原理篇(浏览器架构)
  • Spring 中 @EnableAspectJAutoProxy 注解未生效的原因及解决方案
  • 【概率论与数理统计】学习线路