[一文讲透] 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的负担,特别适用于高速采样和连续采样的应用场景。

相关推荐
为何创造硅基生物5 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好5 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李5 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅5 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆6 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
于小猿Sup7 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
cen__y7 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手7 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人7 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生8 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588