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
|