hal库串口dma卡死_「正点原子NANO STM32F103开发板资料连载」第二十二章 DMA 实验...

本文介绍了如何使用STM32F1的DMA控制器进行串口数据传输,通过HAL库配置DMA1通道4实现串口1的DMA发送。详细讲解了DMA的配置步骤,包括使能DMA时钟、初始化通道、设置传输参数、启动传输以及中断处理。实验中利用按键触发DMA传输,实时监控传输状态。通过这个实验,读者可以理解DMA的工作原理并掌握STM32F1的DMA应用。
摘要由CSDN通过智能技术生成

1)实验平台:【正点原子】 NANO STM32F103 开发板

2)摘自《正点原子STM32 F1 开发指南(NANO 板-HAL 库版)》关注官方微信号公众号,获取更多资料:正点原子

f362a1c16a71713964f9e54ba5cb2e52.png

第二十二章 DMA 实验

本章我们将向大家介绍 STM32F1 的 DMA。在本章中,我们将利用 STM32F1 的 DMA

来实现串口数据传送,并在串口助手打印显示。本章分为如下几个部分:

22.1 STM32F1 DMA 简介

22.2 硬件设计

22.3 软件设计

22.4 下载验证

22.1 STM32 DMA 简介

DMA,全称为:Direct Memory Access,即直接存储器访问,DMA 传输将数据从一个

地址空间复制到另外一个地址空间。当 CPU 初始化这个传输动作,传输动作本身是由

DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的

内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工

作。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。DMA 传输方式无需 CPU 直接

控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备

开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。

STM32 最多有 2 个 DMA 控制器(DMA2 仅存在大容量产品中,中容量只有 DMA1),DMA1 有 7

个通道。DMA2 有 5 个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。

还有一个仲裁起来协调各个 DMA 请求的优先权。

STM32 的 DMA 有以下一些特性:

●每个通道都直接连接专用的硬件 DMA 请求,每个通道都同样支持软件触发。这些功能

通过软件来配置。

●在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如

在相等优先权时由硬件决定(请求 0 优先于请求 1,依此类推) 。

●独立的源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和

目标地址必须按数据传输宽度对齐。

●支持循环的缓冲器管理

●每个通道都有 3 个事件标志(DMA 半传输,DMA 传输完成和 DMA 传输出错),这 3 个

事件标志逻辑或成为一个单独的中断请求。

●存储器和存储器间的传输

●外设和存储器,存储器和外设的传输

●闪存、SRAM、外设的 SRAM、APB1 APB2 和 AHB 外设均可作为访问的源和目标。

●可编程的数据传输数目:最大为 65536

STM32F103RBT6 有一个 DMA 控制器,DMA1,本章,我们仅针对 DMA1 进行介绍。

从外设(TIMx、ADC、SPIx、I2Cx 和 USARTx)产生的 DMA 请求,通过逻辑或输入到

DMA 控制器,这就意味着同时只能有一个请求有效。外设的 DMA 请求,可以通过设置相应的

外设寄存器中的控制位,被独立地开启或关闭。

表 22.1.1 是 DMA1 各通道一览表:

9faa09b58a892fa204e94bf9a7482d71.png

这里解释一下上面说的逻辑或,例如通道 1 的几个 DMA1 请求(ADC1、TIM2_CH3、TIM4_CH1),

这几个是通过逻辑或到通道 1 的,这样我们在同一时间,就只能使用其中的一个。其他通道也

是类似的。

这里我们要使用的是串口 1 的 DMA 传送,也就是要用到通道 4。接下来,我们介绍一下 DMA

设置相关的几个寄存器。

第一个是 DMA 中断状态寄存器(DMA_ISR)。该寄存器的各位描述如图 22.1.1 所示:

60e1fe8cfc66a424d537035ab63005e1.png

图 22.1.1 DMA_ISR 寄存器各位描述

我们如果开启了 DMA_ISR 中这些中断,在达到条件后就会跳到中断服务函数里面去,即使

没开启,我们也可以通过查询这些位来获得当前 DMA 传输的状态。这里我们常用的是 TCIFx,

即通道 DMA 传输完成与否的标志。注意此寄存器为只读寄存器,所以在这些位被置位之后,只

能通过其他的操作来清除。

第二个是 DMA 中断标志清除寄存器(DMA_IFCR)。该寄存器的各位描述如图 27.1.2 所示:

bb99b82cbeb6c2e57d0c3662ad3c17eb.png

图 22.1.2 DMA_IFCR 寄存器各位描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值