02.立创梁山派GD32的串口发送以及使用DMA进行串口接收

  • 此系列文章源于SYSU 2024电信学院通信工程专业工训课的训练题目,同时也是2024电子设计校内赛的题目。题目的要求描述如下:
    无线手持二维码识别器是一个通过图像识别技术,对二维码图片进行识别,并解析出二维码的内容数据,并通过无线传输给手机或电脑的一种设备,通过这个设备,可以快速对物品进行扫描并在电脑端进行归档。要求能够对二维码图片进行扫描,二维码可自行生成,源信息包含字母和数字,能够支持将扫描数据上传到电脑,并在电脑端设计上位机进行数据显示,能够支持识别特殊二维码时,进行报警鸣叫处理,同时要使用3D建模软件对识别器进行建模并制作,大小符合手持。
  • 项目使用的主控为立创梁山派GD32F470ZGT6,项目源码存放地址为https://github.com/liangbm3/GD32_QR_Decoder
  • 此系列文章更多的是对开发过程的记录和思路的呈现,文章分则可以作为教程实现单个功能,合则可以作为复现整个项目的教程。
  • 文章的撰写部分参考了立创官方文档
  • 文章未经作者许可,不得转载。


前言

本节根据嘉立创给出的入门手册进行串口的配置,并加入自己的理解和注释。串口是电脑与MUC进行通讯的重要手段,因此在工程开始之前配置好串口对后面的调试有很大的便利。


一、新建文件和配置include路径

1.在hardware中新建DMAusart文件夹,并分别新建dma.cdma.husart.husart.c文件,如图
在这里插入图片描述
2.将文件添加至工程中
在这里插入图片描述
3.添加include路径
在这里插入图片描述
有时vscode中的配置更新会不及时,这时最简单粗暴的方法便是在keil中编译后,删除.vscode文件夹再重新用vscode打开工程即可

二、编写文件

1.usart介绍

串口是指外设和处理器之间通过数据信号线、地线和控制线等,按位进行传输数据的一种通讯方式。尽管传输速度比并行传输低。但串口可以在使用一根线发送数据的同时用另一根线接收数据。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验位,这些参数在两个通信端口之间必须一致。

  • 波特率: 衡量通信速度的参数,它表示每秒钟传送的bit的个数。
  • 数据位: 衡量通信中实际数据位的参数,表示一个信息包里包含的数据位的个数。
  • 停止位: 用于表示单个信息包的最后位,典型值为1、1.5和2位。由于数据是在传输线上传输的,每个设备都有自己的时钟,很有可能在通信过程中出现不同步,停止位不仅仅表示传输的结束,还能提供校正时钟同步的机会。停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率也越慢。
  • 奇偶检验位: 表示一种简单的检查错误的方式。
    在这里插入图片描述
    串口的协议如上图,是一位一位地传输,每传输一个字节总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位(低电平),后面由8位数据位组成,如果开启了校验位,则最后一位数据位是校验位,最后是停止位。停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。

2.DMA介绍

DMA(Direct Memory Access)控制器提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据,而无需CPU的介入,避免了CPU多次进入中断进行大规模的数据拷贝,最终提高整体的系统性能。

DMA是一种能够在无需CPU参与的情况下,将数据块在内存和外设之间高效传输的硬件机制。实现这种功能的集成电路单元叫做DMA Controller,即DMA控制器。

DMA控制器在没有CPU参与的情况下从一个地址向另一个地址传输数据,它支持多种数据宽度,突发类型,地址生成算法,优先级和传输模式,可以灵活的配置以满足应用的需求。

GD32F450ZGT6单片机的DMA控制器的两个AHB主机接口分别对应存储器和外设的数据访问。
DMA支持三种传输模式,如下:

  • 外设到存储器:通过AHB外设主机接口从外设读取数据,通过AHB存储器主机接口向存储器写入数据。比如串口的DMA接收,就是从外设到存储器。
  • 存储器到外设:通过AHB存储器主机接口从存储器读取数据,通过AHB外设主机接口向外设写入数据。比如串口的DMA发送,就是存储器到外设。
  • 存储器到存储器:通过AHB外设主机接口从存储器读取数据,通过AHB存储器主机接口向存储器写入数据。
       存储区和外设都可以配置为源端和目的端。

每个DMA控制器有两个分别对应于外设和存储器的仲裁器。当DMA控制器在同一时间接收到多个外设请求时,仲裁器将根据外设请求的优先级来决定响应哪一个外设请求。

优先级规则如下:

  • 软件优先级:分为4级,低,中,高和超高。可以通过寄存器的DMA_CHxCTL的PRIO位域配置。
  • 硬件优先级:当通道具有相同的软件优先级时,编号低的通道优先级高。

存储器和外设都独立的支持两种地址生成算法:固定模式和增量模式。

循环模式用来处理连续的外设请求。在循环模式中,当每次DMA传输完成后,CNT值会被重新载入,且传输完成标志位会被置1。DMA会一直响应外设的请求,直到出现传输错误或者通道使能位被清0。
单次传输模式:
   当传输结束时,触发DMA中断,在中断程序中首先失能DMA通道,然后修改该通道的传输数据量,最后重新使能DMA通道,注意只有失能的DMA通道才能成功修改传输数据量。
循环传输模式:
   当传输结束时,硬件自动会将传输数据量寄存器进行重装,进行下一轮的数据传输。

3.编写过程

1.由于开发板上配带的DAP-Link有串口功能,且用的是PA9和PA10引脚的串口功能,因此宏定义如下

#define USART_TX_RCU  RCU_GPIOA
#define USART_RX_RCU  RCU_GPIOA
#define USART_TX_PORT GPIOA
#define USART_RX_PORT GPIOA
#define USART_TX_PIN  GPIO_PIN_9
#define USART_RX_PIN  GPIO_PIN_10

2.通过查看数据手册,发现用的是复用功能AF7,用的是USART0串口
在这里插入图片描述
因此宏定义如下

#define USART_AF 			GPIO_AF_7
#define USART 				USART0

3.在usart.c源文件中,我们先定义一个三个变量,用来在内存中存接收到的信息的相关信息

uint8_t g_recv_buff[USART_RECEIVE_LENGTH]; // 定义接收用来接收数据的数组
uint16_t g_recv_length = 0
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值