一般情况串口的接受和发送分别需要使用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方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462
|