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

相关推荐
2401_857439692 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
yutian06062 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
SoraLuna3 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_3 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
Dream_Snowar4 小时前
速通Python 第三节
开发语言·python
唐诺4 小时前
几种广泛使用的 C++ 编译器
c++·编译器
高山我梦口香糖5 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
冷眼看人间恩怨5 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
信号处理学渣5 小时前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客5 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++