[一文讲透] STM32实现ADC转换并使用DMA传输

HAL_DMA_Start()的用法

HAL_DMA_Start()函数用于启动DMA传输,其通常的使用方法如下:

1.配置DMA传输模式、方向、数据长度等参数。

2.配置源地址和目的地址。

3.在需要启动DMA传输的地方调用HAL_DMA_Start()函数。

例如,以下是使用HAL_DMA_Start()函数启动DMA传输的示例代码:

cpp 复制代码
*配置DMA传输模式、方向、数据长度等参数*/DMA_HandleTypeDef dma_handle;
dma_handle.Instance = DMA1_Streame;
dma_handle.Init.Channel = DMA_CHANNEL_O;
dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY;dma_handle.Init.PeriphInc = DMA_PINC_ENABLE;
dma_handle.Init.MemInc = DMA_MINC_ENABLE;
dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;dma_handle.Init.Mode = DMA_NORMAL;
dma_handle.Init.Priority = DMA_PRIORITY_LOlw;dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;dma_handle.Init.MemBurst = DMA_MBURST_SINGLE;
dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE;
HAL_DMA_Init(& dma_handLe);
/*设置源地址和目的地址*/
uint32_t src_address = ex208e100e;uint32_t dst_address = ex208820e0;
HAL_DMA_Start(& dma_handle, src_address,dst_address,1024);

在上面的示例中,首先配置了DMA传输的参数,然后调用HAL_DMA_Start()函数启动DMA传输,传输长度为1024字节,源地址为0x20001000,目的地址为0x20002000。这个代码示例使用的是内存到内存的DMA传输模式,它可以根据具体的应用场景选择合适的DMA传输方向和模式。

HAL_DMA_Start_IT()的用法

HAL_DMA_Start_IT函数是HAL库中DMA传输中断模式启动函数之一,其主要作用是启动DMA传输并使能DMA传输完成中断。

该函数的原型为:

cpp 复制代码
HAL_StatusTypeDef HAL_DMA_Start_IT(DMAHandleTypeDef *hdma,uint32_t ScAddress,uint32_t DstAdress,uint32_t DataLength);

函数参数说明:

hdma: DMA处理器句柄,包含了DMA传输的各项配置参数;. SrcAddress:源数据存储地址;

DstAddress:目标数据存储地址;. DataLength:要传输的数据长度。

函数返回值为HAL_StatusTypeDef类型,表示函数执行的状态,可以为以下值;

HAL_OK:成功启动DMA传输;

HAL_ERROR : DMA传输配置错误。

使用该函数时,需要先配置好DMA传输相关的参数(如数据传输方向、数据长度、数据宽度等),然后调用该函数即可启动DMA传输并使能DMA传输完成中断。

在DMA传输完成后,会触发DMA传输完成中断,并调用用户在HAL_DMA_IRQHandler函数中定义的回调函数,用户可以在回调函数中处理传输完成后的操作。

HAL_ADC_Start_DMA()的用法

HAL_ADC_Start_DMA函数是STM32HAL库中的一个函数,用于启动ADC(模数转换器)的DMA(直接存储器访问)模式转换。

在STM32微控制器中,ADC用于将模拟信号转换为数字信号。通常情况下,ADC转换是通过CPU的轮询方式完成的,也就是说CPU不断地查询ADC是否完成转换,并取得转换结果。这种方式会占用CPU的大量时间和资源。

而使用DMA模式转换,则可以减轻CPU的负担。DMA是一种直接将数据从外设(如ADC)传输到内存的技术,它不需要CPU的干预。通过使用DMA,ADC可以在转换完成后直接将结果存储到内存中,而不需要CPU的干预。

HAL_ADC_Start_DMA函数的作用就是启动ADC的DMA模式转换。它会配置ADC和DMA的相关寄存器,并启动转换过程。在启动之后,ADC会根据事先配置好的参数进行转换,并将转换结果存储到指定的内存地址中。同时,DMA会自动将转换结果从ADC传输到内存中。

使用HAL_ADC_Start_DMA函数可以提高ADC转换的效率,减少CPU的负担,特别适用于高速采样和连续采样的应用场景。

相关推荐
S,D2 小时前
MBIST - Memory BIST会对memory进行清零吗?
驱动开发·mcu·memory·功能安全·iso26262·mbist·bist
古月-一个C++方向的小白5 小时前
C++11之lambda表达式与包装器
开发语言·c++
沐知全栈开发5 小时前
Eclipse 生成 jar 包
开发语言
杭州杭州杭州6 小时前
Python笔记
开发语言·笔记·python
tanyongxi667 小时前
C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
开发语言·c++
阿葱(聪)8 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes
浮生带你学Java9 小时前
2025Java面试题及答案整理( 2025年 7 月最新版,持续更新)
java·开发语言·数据库·面试·职场和发展
斯是 陋室9 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net
李长渊哦9 小时前
深入理解Java中的Map.Entry接口
java·开发语言
weixin_1122339 小时前
基于STM32闭环步进电机控制系统设计说明
stm32·单片机·嵌入式硬件