硬汉嵌入式论坛

 找回密码
 立即注册
查看: 920|回复: 3
收起左侧

[客户分享] GD32F30x的串口不定长DMA接收和DMA发送史诗级例子

[复制链接]

2

主题

17

回帖

23

积分

新手上路

积分
23
发表于 2023-6-12 00:02:19 | 显示全部楼层 |阅读模式
本帖最后由 519382868 于 2023-6-12 00:05 编辑

此文转载公众号《小龙智控》 文章,上连接不方便大家看,所以我就直接给大家上完整得文章
GD32F30x的串口不定长DMA接收和发送史诗级例子。
虽然串口是单片机最常用的一种外设,今天就由我来给大家展示一个最好用的串口接收发送例子解说吧。DMA不定长接收和DMA发送。
GD32单片机自带串口发送接收有三种方式,下面就简单介绍一下三种处理数据的方式:
1、轮询方式(Polling):使用轮询方式发送和接收数据。在发送数据时,检查串口的状态寄存器,确认发送缓冲区为空后将数据写入发送寄存器。在接收数据时,检查状态寄存器的接收缓冲区非空标志位,然后读取接收寄存器中的数据。这种方式简单易懂,但需要不断检查状态寄存器,可能会浪费处理器的时间。
2、中断方式(Interrupt):配置串口为中断模式,在数据发送或接收完成时触发中断。当数据准备就绪时,触发发送或接收中断,在中断处理程序中处理数据的发送和接收。这种方式相对于轮询方式来说,减少了处理器的负载,但需要正确配置中断和编写中断处理程序。
3、DMA 方式(Direct Memory Access):使用 DMA 控制器来完成数据的传输。DMA 可以在不依赖处理器的情况下直接从内存复制数据到串口发送寄存器,或从串口接收寄存器复制数据到内存。这种方式能够大大减轻处理器的负担,并且适用于大量数据的传输。
前面的两种方式就不做详细的例程了,直接第三种方式开干,废话不多说下面直接上干货。
[color=rgba(0, 0, 0, 0.9)]
11串口初始化.png
[color=rgba(0, 0, 0, 0.9)]
12串口中断函数配置.png
[color=rgba(0, 0, 0, 0.9)]
13串口接收DMA配置.png
[color=rgba(0, 0, 0, 0.9)]
14DMA发送缓存.png
[color=rgba(0, 0, 0, 0.9)]
15DMA发送.png
[color=rgba(0, 0, 0, 0.9)]
16串口数据处理.png
[color=rgba(0, 0, 0, 0.9)]
17空闲中断处理.png

    此例程就算两串口接起来无限对发也不影响主程序正常跑。上面所有的配置都是GD32F303官方库配置。
喜欢得可以关注下作者微信公众号
[color=rgba(0, 0, 0, 0.9)] 公众号二维码.jpg

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2023-6-12 09:22:41 | 显示全部楼层
谢谢楼主分析。
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2023-6-30 17:08:16 | 显示全部楼层
snd 是啥意思,,,send缩写?不太理解为什么要这么写
回复

使用道具 举报

2

主题

17

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2023-7-24 00:45:23 | 显示全部楼层
CofMilk 发表于 2023-6-30 17:08
snd 是啥意思,,,send缩写?不太理解为什么要这么写

snd是发送意思,命名太长了就缩短了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 17:49 , Processed in 0.180368 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表