STM32(hal库)中HAL_ADC_PollForConversion 是 如何执行的?

HAL_ADC_PollForConversion 是 STM32 HAL 库中的一个函数,用于轮询(poll)ADC(模数转换器)的转换完成状态。这个函数会阻塞调用它的线程,直到ADC转换完成。以下是该函数的工作原理和执行步骤的详细解释:

函数原型

复制代码

c复制代码

|---|-------------------------------------------------------------------------------------------|
| | HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); |

参数

  • hadc: 指向 ADC 句柄的指针,该句柄包含了 ADC 配置和状态信息。
  • Timeout: 超时时间(单位:毫秒),用于指定等待转换完成的最大时间。如果设置为 HAL_MAX_DELAY,则表示无限等待。

返回值

  • 函数返回 HAL_StatusTypeDef 类型的值,可以是以下之一:
    • HAL_OK: ADC 转换成功完成。
    • HAL_TIMEOUT: 超时发生,ADC 转换未能在指定时间内完成。
    • HAL_ERROR: 发生错误。

工作原理

  1. 检查 ADC 状态
    • 函数首先检查传入的 ADC 句柄是否有效(非空)。
    • 检查 ADC 是否已经启动(即 ADC 是否已经通过 HAL_ADC_StartHAL_ADC_Start_IT 等函数启动)。
  2. 轮询转换完成标志
    • 函数进入一个循环,在该循环中不断检查 ADC 的转换完成标志(通常是 EOC,即 End of Conversion)。
    • 每次循环中,函数会读取 ADC 的状态寄存器,检查 EOC 标志是否被设置。
  3. 超时处理
    • 如果在指定的超时时间内 EOC 标志没有被设置,函数会退出循环并返回 HAL_TIMEOUT
    • 如果 EOC 标志被设置,表示转换完成,函数会退出循环并返回 HAL_OK
  4. 返回结果
    • 如果转换成功完成,函数返回 HAL_OK
    • 如果发生超时,函数返回 HAL_TIMEOUT
    • 如果在检查过程中发生错误(例如句柄无效),函数返回 HAL_ERROR

注意事项

  • HAL_ADC_PollForConversion 是一个阻塞函数,因此在需要实时响应的应用中应谨慎使用。
  • 如果需要非阻塞的 ADC 转换,可以考虑使用中断(HAL_ADC_Start_IT)或 DMA(直接内存访问)方式。

通过理解 HAL_ADC_PollForConversion 的工作原理,可以更好地在 STM32 应用程序中使用 ADC 功能。

相关推荐
Amrzs_hp8 小时前
stm32温度采集
stm32·单片机·嵌入式硬件
鄭郑12 小时前
STM32学习笔记--I2C封装与OLED(2026.2.1)
笔记·stm32·学习
想放学的刺客13 小时前
单片机嵌入式试题(第29期)嵌入式系统的电源完整性设计与去耦电容选型。抗干扰设计与EMC合规性
c语言·stm32·嵌入式硬件·物联网·51单片机
-Springer-14 小时前
STM32 学习 —— 个人学习笔记2-2(新建工程)
笔记·stm32·学习
集芯微电科技有限公司15 小时前
15V/2A同步开关型降压单节/双节锂电池充电管理IC支持输入适配器 DPM 功能
c语言·开发语言·stm32·单片机·嵌入式硬件·电脑
宵时待雨16 小时前
STM32笔记归纳7:EXTI
笔记·stm32·单片机·嵌入式硬件
ℳ๓. Sweet19 小时前
【STM32】一种最简单的合并bootloader和app的固件bin文件方法
stm32·单片机·嵌入式硬件
小柯博客20 小时前
从零开始打造 OpenSTLinux 6.6 Yocto 系统 - STM32MP2(基于STM32CubeMX)(六)
c语言·git·stm32·单片机·嵌入式硬件·开源·yocto
意法半导体STM3220 小时前
【官方原创】防止STM32CubeMX删除用户文件的方法 LAT1442
stm32·单片机·嵌入式硬件·stm32cubemx·stm32开发·stm32生态
lingzhilab21 小时前
零知IDE——STM32旋转编码器计数系统:原理可视化 + 精准计数实现
stm32·单片机·嵌入式硬件