打印
[应用相关]

HAL : HAL_ADC_Start_DMA() 和 HAL_ADC_Start()

[复制链接]
120|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2025-1-15 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HAL_ADC_Start()
函数原型
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);
hadc: 指向ADC_HandleTypeDef结构体的指针(句柄),该结构体包含了ADC外设的所有配置信息和状态变量。这个结构体必须在调用此函数之前通过HAL_ADC_Init()函数初始化。

返回值:

HAL_OK: 如果启动成功。
HAL_ERROR, HAL_BUSY, HAL_TIMEOUT: 分别表示错误、忙或超时等状态。
使用场景
        当你想要开始一次性的ADC转换,并打算通过轮询或者中断方式获取转换结果时,你会使用这个函数。它不会自动处理数据传输;你需要手动检查转换是否完成,并读取结果。

HAL_ADC_Start_DMA()
函数原型
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);
hadc: 类似于HAL_ADC_Start()中的参数,指向一个已经初始化好的ADC_HandleTypeDef结构体。

pData: 指向一个存储转换结果的缓冲区(数组)的指针。DMA控制器将把ADC转换的结果直接存入这个缓冲区中。

Length: 表示要进行多少次ADC转换,也就是pData缓冲区的大小(以元素数量计)。每次ADC转换完成后,DMA会自动将结果写入到pData所指向的缓冲区中对应的位置。

返回值:

HAL_OK: 如果启动成功。
HAL_ERROR, HAL_BUSY, HAL_TIMEOUT: 分别表示错误、忙或超时等状态。
使用场景
        当你需要连续采集大量的ADC数据,并且希望减少CPU的负担时,你可以使用这个函数来启动ADC转换并设置DMA传输。这样,DMA会在后台自动将转换后的数据传输到指定的内存地址,而不需要CPU频繁参与。

配置与初始化
在调用上述任何函数前,都需要先正确配置和初始化ADC模块。这通常涉及到以下步骤:

配置ADC参数:例如分辨率、通道选择、采样时间等。
初始化ADC外设:通过HAL_ADC_Init()函数初始化ADC_HandleTypeDef结构体。
如果使用DMA:还需要配置和初始化DMA流/通道,并将其关联到ADC外设。
总结
HAL_ADC_Start() 是用于简单的单次转换,适合低速或不频繁的数据采集,可以通过轮询或中断模式获取转换结果。
HAL_ADC_Start_DMA() 则是为高速连续数据采集设计的,它利用DMA技术实现了高效的数据传输,减少了CPU的干预,非常适合大量数据的快速采集
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/2301_79145450/article/details/145050180

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2073

主题

16038

帖子

15

粉丝