HAL : HAL_ADC_Start_DMA() 和 HAL_ADC_Start()

HAL_ADC_Start()

函数原型
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);
  • hadc: 指向ADC_HandleTypeDef结构体的指针(句柄),该结构体包含了ADC外设的所有配置信息和状态变量。这个结构体必须在调用此函数之前通过HAL_ADC_Init()函数初始化。

  • 返回值:

    • HAL_OK: 如果启动成功。
    • HAL_ERRORHAL_BUSYHAL_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_ERRORHAL_BUSYHAL_TIMEOUT: 分别表示错误、忙或超时等状态。
使用场景

        当你需要连续采集大量的ADC数据,并且希望减少CPU的负担时,你可以使用这个函数来启动ADC转换并设置DMA传输。这样,DMA会在后台自动将转换后的数据传输到指定的内存地址,而不需要CPU频繁参与。

配置与初始化

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

  1. 配置ADC参数:例如分辨率、通道选择、采样时间等。
  2. 初始化ADC外设:通过HAL_ADC_Init()函数初始化ADC_HandleTypeDef结构体。
  3. 如果使用DMA:还需要配置和初始化DMA流/通道,并将其关联到ADC外设。

总结

  • HAL_ADC_Start() 是用于简单的单次转换,适合低速或不频繁的数据采集,可以通过轮询或中断模式获取转换结果。
  • HAL_ADC_Start_DMA() 则是为高速连续数据采集设计的,它利用DMA技术实现了高效的数据传输,减少了CPU的干预,非常适合大量数据的快速采集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半个番茄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值