GD32F103RCT6/GD32F303RCT6(6.1)USART串口介绍+寄存器

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发

       后续项目主要在下面该专栏中发布:

手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客

       感兴趣的点个关注收藏一下吧!

       电机驱动开发可以跳转:

手把手教你嵌入式国产化-实战项目-无刷电机驱动(1)-CSDN博客

       BMS电源系统开发可以跳转:暂未放链接

 向上代码兼容GD32F303RCT6中使用

本项目配套开发板:

基于GD32F103RCT6国产GD32平台,以下教程编写基于该开发板

图片:

bca894effff94ea4963130c35b5c4418.jpeg

原理图以及例程请联系客服获取!

注意:

本教程致力于解决所有在调试中出现的所有问题,如有未包含在的问题,请联系QQ:2049363803,有奖更新文档!

USART介绍

USART是通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx和Tx)就可以完成通信过程,因此也称为异步串行通信。

  • 全双工异步通信。
  • 小数波特率发生器系统,提供精确的波特率。
  • 可配置的16倍过采样或8倍过采样,因而为速度容差与时钟容差的灵活配置提供了可能。
  • 可编程的数据字长度(8位或者9位);
  • 可配置的停止位(支持1或者2位停止位);
  • 可配置的使用DMA多缓冲器通信。
  • 单独的发送器和接收器使能位。
  • 检测标志:① 接受缓冲器 ②发送缓冲器空 ③传输结束标志
  • 多个带标志的中断源。触发中断。
  • 其他:校验控制,四个错误检测标志。

引脚分布

其中USART0由PCLK2分频得到,USART1/2和UART3/4由PCLK1分频得到;



总线

APB2总线

APB1总线

APB1总线

APB1总线

APB1总线

引脚

USART0

USART1

USART2

USART3

USART4

TX

PA9(重映射PB6)

PA2(重映射PD5)

PB10(重映射PC10)

PC10

PC12

RX

PA10(重映射PB7)

PA3(重映射PD6)

PB11(重映射PC11)

PC11

PD2

SCLK

PA8

PA4(重映射PD7)

PB12(重映射PC12)

CTS

PA11

PA0(重映射PD3)

PB13

RTS

PA12

PA1(重映射PD4)

PB14

USART不仅支持标准的异步收发模式,还实现了一些其他类型的串行数据交换模式,如红外编

码规范SIR智能卡协议LIN半双工以及同步模式。它还支持多处理器通信和Modem流控

操作(CTS/RTS)

USART支持DMA功能,以实现高速率的数据通信,除了UART4

我们平常大部分时候只会用到全双工异步通信,所以后文的介绍主要以该模式为主。

USART0/1/2完全实现上述功能,但是UART3/4只实现了上面所介绍功能的部分,下面这些功

能在UART3/4中没有实现,所以没有 SCLK、CTS 和 RTS 功能引脚:

 智能卡模式;

 同步模式;

 硬件流操作(CTS/RTS)。

USART传输模型

cd06d5b11f8148f491762126d708e272.png

帧结构

串口异步通信需要定义的参数

① 起始位

② 数据位(8位或者9位)

③ 奇偶校验位(第9位)

④ 停止位(1,15,2位)

⑤ 波特率设置

带奇偶校验的数据为就是9位

74f8681317ea484d8887b38687b4cbb6.png

波特率

由于异步通信中没有时钟信号,所以接收双方要约定好波特率,即每秒传输的码元个数,以便对信号进行解码,常见的波特率有4800、9600、115200等。GD32中波特率的设置通过串口初始化结构体来实现。

f33fc3681db64b93916da43eb9aa2955.png

全双工异步通信

通用同步异步收发器(USART)提供了一个灵活方便的串行数据交换接口,数据帧可以通过全

双工或半双工,同步或异步的方式进行传输。USART提供了可编程的波特率发生器,能对UCLK

进行分频产生USART发送和接收所需的特定频率。

90e10f00f10e4ec4a68c73afee07d6b3.png

USART接口对外引出了五个引脚,但是对于全双工异步通信来说,使用到的引脚主要是RX以及TX

为了方便理解工作模式,这里放出手册中的模块内部框图:

ff73acdbebfc410ba0248bf35dfb2106.png

看起来很复杂?但是其实我们在该工作模式下,以串口接收线和串口发送线为主。

串口发送

e9049892795f4031b44502ef25a55811.png

  • 1. 在USART_CTL0寄存器中置位UEN位,使能USART;
  • 2. 通过USART_CTL0寄存器的WL设置字长;
  • 3. 在USART_CTL1寄存器中写STB[1:0]位来设置停止位的长度;
  • 4. 如果选择了多级缓存通信方式,应该在USART_CTL2寄存器中使能DMA(DENT位);
  • 5. 在USART_BAUD寄存器中设置波特率;
  • 6. 在USART_CTL0寄存器中设置TEN位;
  • 7. 等待TBE置位;
  • 8. 向USART_DATA寄存器写数据;
  • 9. 若DMA未使能,每发送一个字节都需重复步骤7-8;
  • 10. 等待TC=1,发送完成。

这里详细请参考gd32的用户使用手册有详细的使用介绍

手册P413页

串口接收

上电后,USART接收器使能按以下步骤进行:

  • 1. 在USART_CTL0寄存器中置位UEN位,使能USART;
  • 2. 写USART_CTL0寄存器的WL去设置字长;
  • 3. 在USART_CTL1寄存器中写STB[1:0]位来设置停止位的长度;
  • 4. 如果选择了多级缓存通信方式,应该在USART_CTL2寄存器中使能DMA(DENR位);
  • 5. 在USART_BAUD寄存器中设置波特率;
  • 6. 在USART_CTL0中设置REN位。

这里详细请参考gd32的用户使用手册有详细的使用介绍

手册P414页

DMA 方式访问数据缓冲区

为减轻处理器的负担,可以采用DMA访问发送缓冲区或者接收缓冲区。置位USART_CTL2寄

存器中DENT位可以使能DMA发送,置位USART_CTL2寄存器中DENR位可以使能DMA接收。

DMA数据发送:

281208c3e3184fe9ab3cb97e5e9db242.png

DMA数据接收:

976652ab60604d3cb4d0e58fec6b5c22.png

当USART接收到的数据数量达到了DMA传输数据数量,DMA模块将产生传输完成中断。

手册P416页

寄存器讲解:

接下来对串口使用到的寄存器进行介绍

寄存器基地址:

USART0 基地址:0x4001 3800

USART1 基地址:0x4000 4400

USART2 基地址:0x4000 4800

UART3 基地址:0x4000 4C00

UART4 基地址:0x4000 5000

状态寄存器(USART_STAT

地址偏移:0x00

复位值:0x0000 00C0

该寄存器只能按字(32位)访问。

a15ef06b69584127827ab41e86a20705.png

be78d21ad8d148f39ab6eb5dbeeb5ebc.png

cc634351ba574616b20fb68c23b2dc7e.png

0bb228e5a5fd44a9849188bef6d80501.png

2be38a949fb047479f3558aea42f20e1.png

数据寄存器(USART_DATA

地址偏移:0x04

复位值:未定义

该寄存器只能按字(32位)访问

889ab2a188134528bb8295f18de6997a.png

波特率寄存器(USART_BAUD

地址偏移:0x08

复位值:0x0000 0000

使能USART(UEN=1)时,不能写该寄存器。

该寄存器只能按字(32位)访问。

90dc2e51071940aabfbe00b0e202ddc1.png

54ec79678f06485790a43cde073485ef.png

接下来三个控制寄存器涉及内容较多,将会贴出常用部分,不常用部分请自行查阅手册!

控制寄存器 0USART_CTL0

地址偏移:0x0C

复位值:0x0000 0000

该寄存器只能按字(32位)访问。

237c12e31e3e45c6a86aedc4b1b05322.png

d15a5e196c1b4faa90521fbd7ee2836a.png

c147a238b2684dd78fddd08796c78bd2.png

3f2886966d0b4e0f8912f02bb9322406.png

24066a2b61544322a6257d10415d3e3c.png

控制寄存器 1USART_CTL1

地址偏移:0x10

复位值:0x0000 0000

该寄存器只能按字(32位)访问。

8c7a66364bc04f1ea583da7cd7062ad3.png

控制寄存器 2USART_CTL2

地址偏移:0x14

复位值:0x0000 0000

该寄存器只能按字(32位)访问。

fddaf74629854e6e9a8eca7b5a6b8273.png

33dda97b9691413dbac372d8201a0b9f.png

a885d9da432643b4ac18cda1167b85cc.png

群号:621154399

有问题欢迎大家加入我们一起交流,这个群是开源性技术交流群。

  • 24
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不及你的温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值