0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

聚沃科技 2024-03-15 09:39 次阅读

一般情况串口的接受和发送分别需要使用TX和RX两个引脚来实现,但在一些UART的实际应用中,通信双方身份为主机和从机,数据流是半双工的,那么当IO口资源紧张时可以使用半双工模式通过一个引脚实现数据的发送和接受,同时又保证数据不出错。我们一起来看下红枫派开发板例程中是如何实现的?

首先GD32F303的UART是支持半双工模式的,但想要真正使用起来,软硬件还需要特殊设计。

首先是硬件设计,在红枫派开发板中的RS485通信使用半双工实现,原理图是这样的:

wKgaomXzpmCATEZJAADP3FM-y0s818.png

其中很重要的两个点是:

1、在MCU的TX引脚上一定要增加一个上拉电阻,保证MCU发送和接受模式切换时IO口电平可以保持高电平的空闲态。

2、485端实际还是发送和接受分开两个引脚,那为了避免MCU发送时和485芯片的发送引脚形成电平竞争,在485芯片的RO引脚上串联一个电阻后再连接到MCU TX引脚和485的DI引脚。

如果通信双方都是半双工引脚,那么只需要有一个上拉电阻、双方都使用开漏输出模式即可。

在软件设计方面,让我们看下红枫派开发板例程的实现过程:

1、初始化时使能半双工模式,同时使能接受并关闭发送,因为除了MCU发送过程,其他状态都可以保持为接受。

wKgZomXzpmaAZnd8AAAjahjR6m4449.png

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

wKgZomXzpmuALtt6AABNh8aWLgc977.png

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

wKgaomXzpnGAd1LJAABAWuoKl-o839.png

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

wKgZomXzpnaAWXrLAABGIgvI9_c632.png

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

wKgZomXzpnuANzrCAAB0QJilucA129.png

此时,释放出来的串口的RX引脚可以做其他功能使用了,大家可以购买红枫派开发板进行这个功能的体验。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6030

    文章

    44482

    浏览量

    631706
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16846

    浏览量

    349782
  • 嵌入式
    +关注

    关注

    5056

    文章

    18953

    浏览量

    301633
  • GPIO
    +关注

    关注

    16

    文章

    1187

    浏览量

    51803
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24092
收藏 人收藏

    评论

    相关推荐

    使用MCU GD32替代STM32的体会

    GD32作为国产MCU里的佼佼者,产品线也比较丰富,是替代STM32的很好的选择。前段时间有项目用到
    发表于 07-29 08:53 9547次阅读

    怎么用半双工模块去实现类似全双工模块的效果呢?

    怎么用半双工模块去实现类似全双工模块的效果呢
    发表于 02-14 06:59

    GD32串口回环的设置解析

    GD32串口IO该怎样去设置呢?GD32串口接收该怎样去设置呢?
    发表于 02-28 06:33

    GD32 MCU原理及固件库开发指南》+读后感

    ,所以从STM32切换到GD32能够很快实现节省了很多精力和时间成本。并且刚好出了《GD32 MCU原理及固件库开发指南》这本书,能帮助快
    发表于 06-06 21:52

    AN092GD32MCU GPIO结构与使用注意事项

    AN092 GD32 MCU GPIO结构与使用注意事项
    发表于 03-01 18:48 0次下载
    AN092<b class='flag-5'>GD32MCU</b> <b class='flag-5'>GPIO</b>结构与使用注意事项

    兆易创新GD32 MCU选型手册,适用于GD32全系列MCU

    兆易创新GD32MCU选型手册,适用于GD32全系列MCUGD32MCU选型手册,适用于GD32全系列MCU
    发表于 10-19 17:26 49次下载

    你了解GD32 MCU的命名规则吗

    下面为大家介绍GD32 MCU的通用命名规则,以GD32F303ZGT6为例,其中,GD32代表GD32
    的头像 发表于 01-13 09:38 3340次阅读
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名规则吗

    GD32 MCU的选项字节是什么?

    GD32 MCU的选项字节是什么,有什么功能呢?选项字节被误篡改如何回复?
    的头像 发表于 01-17 09:42 1158次阅读
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的选项字节是什么?

    GD32 串口接受异常的几个原因

    前面我们介绍过GD32 485发送时出现异常的最常见原因,有小伙伴反馈想要知道GD32 串口接受异常的可能原因,今天我们就来安排。
    的头像 发表于 01-18 09:57 4034次阅读
    <b class='flag-5'>GD32</b> <b class='flag-5'>串口</b>接受异常的几个原因

    不同型号的GD32 MCU如何区分?

    大家是否碰到过以下应用场景:同套软件代码希望跑在不同型号的GD32 MCU中,但有些地方需要根据MCU型号进行调整?或者上位机或其他MCU
    的头像 发表于 01-27 09:32 906次阅读
    不同型号的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何区分?

    GD32 MCU如何将烧录口配置为GPIO使用?

    如果大家在进行GD32 MCU开发时发现GPIO引脚使用不足,可以尝试将烧录口配置为GPIO使用,这样就可以多出几个引脚使用,但使用的时候如何配置以及有哪些注意事项,本视频将会为大家进
    的头像 发表于 02-20 10:18 1781次阅读
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何将烧录口配置为<b class='flag-5'>GPIO</b>使用?

    GD32 MCU 入门教程】GD32 MCU 常见外设介绍(14)RTC 模块介绍

    GD32 MCU内部提供了RTC(实时时钟)模块,通过RTC可以实现日历时钟、闹钟等功能。RTC也可以用于深度睡眠或待机模式的低功耗唤醒
    的头像 发表于 08-23 09:18 335次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入门教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 常见外设介绍(14)RTC 模块介绍

    GD32 MCU 入门教程】GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的头像 发表于 08-25 09:24 394次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 入门教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> FPU 使用方法

    GD32 MCU入门教程】GD32 MCU GPIO 结构与使用注意事项

    本文是专门为基于GD32 MCU开发的工程设计人员提供,主要介绍了GPIO的功能配置、内部结构以及在不同场景使用时的注意事项,旨在帮助GD32 MC
    的头像 发表于 09-07 10:34 489次阅读
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>入门教程】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>GPIO</b> 结构与使用注意事项