STM32F4xx系列使用HAL库配置DMA数据传输

 

 

 FIFO用于在源数据传输到目标之前临时存储这些数据。通过不同FIFO配置,可以管理数据发送形式。

 

DMA使用框架

1、建立(选取)传输通道

存储器->存储器

外设->存储器

存储器->外设

2、确定传输对象

具体的功能:

UART(源)-内存(目标)

内存数据(源)-UART(目标)

3、敲定传输细节

确定由谁来产生DMA请求,外设的DMA请求对应通道

通道优先级

确定传输数据双方的数据格式

确定数据是否需要一直采集(循环模式是否使能)

是否需要传输标志\中断

DMA请求映射表

 双缓冲区模式

DMA可以分时的去填充两块存储区,CPU可以避开正在填充的那一块,处理已经填充好的那一块存储区域,这样可以加快数据的处理,提高程序执行的效率。

FIFO的功能作用

FIFO是一个缓冲区,用于在源数据传输到目标之前临时存储这些数据。同时它也有数据处理的作用

 单次传输和突发传输

单次传输->1个请求->1次传输

突发传输->1个请求->多次传输 配合FIFO使用

 

HAL库外设驱动的实现

1、句柄结构体(xx_HandleTypeDef):

instance:它指向了外设内,一个具体的外设成员。如:ADC里的ADC1、ADC2、UART里的UART1、UART2、DMA的Channel1、Channel2,实际上它用指针指向一个外设基地址。

Init:指向了一个具体外设的初始化结构体,用来配置外设的工作参数。

2、初始化结构体(xx_InitTypeDef):

根据外设的各种配置寄存器,组织起来的外设参数配置结构体,内附在xx_HandleTypeDef结构体中

它们之间的关系如下:

 回调函数如何执行的?

中断->中断处理函数->传入句柄结构体->回调函数(自己定义,有点类似触发器)

使用HAL库配置串口DMA请求

DMA-存储器到存储器模式

 

 

 用CubeMX配置好后,只修改主函数配置,完成DMA存储器-存储器模式

 

 数组比较函数

 这里解释一下传输流标志DMA_FLAG_

DMA_FLAG_TCIF0_4就是指DMA的Stream0或Stream4, DMA_FLAG_TCIF1_5就是指DMA的Stream1或Stream5

DMA_FLAG_TCIF2_6就是指DMA的Stream2或Stream6, DMA_FLAG_TCIF3_7就是指DMA的Stream3h或Stream7。

对应DMA请求映射表找到相应的流

 

 DMA-存储器到外设模式

 CubeMX生成的串口初始化函数

 这些配置CubeMX都已经帮我们配置好了,我们只在主函数做修改,达到相应的功能

 

 实验结果

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值