STM32 串口DMA收发(一)

STM32 串口DMA收发数据

一、STM32 DMA简介与功能说明

1、STM32F4 DMA简介

DMA(Direct memory access),即直接存储器访问。用于在外设与存储器之间以及存储器与存储器之间提供一种高速数据传输的方式。它无需CPU参与,通过硬件方式为RAM与I/O设备提供一条直接传送数据的通道。 STM32F4有2个DMA控制器,每个DMA控制器有8个数据流,每个数据流有8个通道(或请求)。其中2个DMA的请求映射如下:
DMA1 请求映射
DMA2 请求映射

2、DMA主要特性

  1. 每个DMA控制器有8个数据流(Stream),每个数据流有8个通道
  2. 每个数据有单独的四级32bit先进先出存储器缓冲区(FIFO),可用FIFO模式或直接模式:
    FIFO模式:可通过软件将阈值级别选取为FIFO大小的1/4、1/2或3/4
    直接模式:每个DMA请求会立即启动对存储器的传输。当在直接模式下降DMA请求配置为以存储器到外设模式传输数据时,DMA仅会将一个数据从存储器预加载到内部FIFO,从而保证一旦外设触发DMA请求时则立即传输数据
  3. DMA数据流请求之间的优先级可通过软件编程的方式决定(4个级别:非常高、高、中、低),在软件优先级相同的情况下可以通过硬件决定优先级(例如:请求0的优先级高于请求1)
  4. 要传输的数据的数目可以由DMA控制器或外设管理:
    DMA流控制器:要传输的数据数量范围1~65535,可用软件编程
    外设流控制器:要传输的数据数量未知,由源或目标外设控制
  5. 每个数据流都支持循环缓冲区管理
  6. 有5个事件标志(DMA半传输、DMA传输完成、DMA传输错误、DMA FIFO错误、直接模式错误),进行逻辑或运算,从而产生每个数据流的单个中断请求。

3、DMA传输方向

  1. 外设到存储器的传输
  2. 存储器到外设的传输
  3. 存储器到存储器的传输(仅DMA2可用)

4、DMA事务

DMA事务有给定数目的数据传输序列组成。其数据传输宽度(8bit、16bit、32bit)可用软件编程。
每个DMA传输包含三项操作:

  • 通过DMA_SxPAR(外设)或DMA_SxM0AR(存储器)寄存器寻址,从外设数据寄存器或存储器单元中加载数据。
  • 通过DMA_SxPAR或DMA_SxM0AR寄存器寻址,将加载的数据存储到外设数据寄存器或存储器单元中。
  • DMA_SxNDTR计数器在数据存储结束后递减,该计数器中包含仍需执行的事务数。

5、DMA数据流

8个数据流都可以提供源和目标之间的单向传输链路。
每个数据流配置后都可以执行:

  • 常规类型事务:存储器到外设、外设到存储器或存储器到存储器的传输。
  • 双缓冲区类型事务:使用存储器的两个存储器指针的双缓冲区传输(当DMA正在进行自/至缓冲区的读/写操作时,应用程序可以进行至/自其它缓冲区的写/读操作)

6、源、目标和传输模式

传输方向使用DAM_SxCR寄存器中的DIR[1:0]bit进行配置,有三种传输方向:存储器到外设、外设到存储器或存储器到存储器。相应的源和目标地址如下图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值