上班摸鱼肝系列:梁山派开发板系列---12串口DMA接收实验(2)

说明:

        上一期我们学习了DMA的基础知识,这一期我们来完成串口DMA接收的实验。首先,我们需要先配置DMA初始化,编写DMA中断服务函数,然后在主函数进行数据处理,查看现象,最终完成串口DMA接收的实验。配置串口DMA接收有几个步骤:开启时钟、配置参数结构体,使能通道外设、使能DMA中断、使能外设DMA(串口)和编写DMA中断服务函数。


文章目录

  • 系列文章目录
  • 一、串口DMA接收配置
    • 1、开启时钟
    • 2、配置参数结构体
    • 3、使能通道外设
    •  4、使能DMA中断
    •  5、使能外设DMA(串口)
  • 二、DMA中断服务函数
  • 三、串口DMA接收数据处理
  • 四、现象
  • 总结

提示:以下部分参考于梁山派开发板学习指南,代码如有更有解可在评论区一起沟通交流哈。

一、串口DMA接收配置

1、开启时钟

        首先,我们需要配置的是串口0的接收功能,对此我们应该去用户手册查找对应的DMA通道,这里我们将使用通道2来进行配置:

注:RCU_DMA1 到gd32f4xx_rcu.h库函数里找到:

2、配置参数结构体

        DMA 传输有单一传输和增量突发传输两种,单一传输一次可以传输 8 位、 16
32 位,增量突发传输可配置为 4 个节拍、 8 个节拍和 16 个节拍进行传输,每次传输量是单一传输的 4 倍, 8 倍和 16 倍。这里以单一传输进行配置:

 注:

direction DMA 通道数据传输方向
memory0_addr :存储器基地址
memory_inc :存储器地址生成算法模式
number DMA 通道数据传输数量
periph_addr :外设基地址
periph_inc :外设地址生成算法模式
periph_memory_width :外设和存储器数据传输宽度
priority DMA 通道传输软件优先级
circular_mode DMA 循环模式

3、使能通道外设

void dma_channel_subperipheral_select(uint32_t dma_periph, dma_channel_enum channelx, dma_subperipheral_enum sub_periph);
        这个函数是 DMA 通道外设选择。有三个参数,第一个参数就是要使用的 DMA ,第二个参数就是要使用的通道,第三个参数就是要开启的通道外设:

        首先,我们要看USART0_RX所在的DMA通道,得知我们需要打开4:

 使能通道外设:

 使能DMA通道:

 4、使能DMA中断

void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source);
这个函数是使能 DMA 中断。有三个参数,第一个参数是要使用的 DMA 外设,第二个参数是要
使用的 DMA 通道,第三个参数是要使能的中断资源;

 关于第三个参数:

  DMA_CHXCTL_SDEIE :通道单数据传输模式异常中断
  DMA_CHXCTL_TAEIE :通道发生传输错误中断
 DMA_CHXCTL_HTFIE :通道半传输完成中断
  DMA_CHXCTL_FTFIE :通道传输完成中断
这里的第三个参数我们选择DMA_CHXCTL_FTFIE:

 5、使能外设DMA(串口)

void usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd);
        这个函数是串口 DMA 接收配置。有两个参数,第一个参数是要配置的串口外设,第二个参数是要使能还是失能。

二、DMA中断服务函数

 注:

FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t interrupt);
        这个函数是 DMA 中断标志位获取。有三个参数,第一个参数就是 DMA 外设,第二个参数就是DMA通道,第三个要获取的中断标志位。

三、串口DMA接收数据处理


四、现象


总结

        通过本期实验,我们学习了DMA,从学习DMA的基础知识开始,再到配置DMA初始化,接着是数据接收配置,熟悉了DMA的运作原理及配置流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

雨会停人终散

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

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

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

打赏作者

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

抵扣说明:

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

余额充值