STM32
登录
直播中
1123127317
8年用户
1048经验值
擅长:制造/封装 接口/总线/驱动
私信
关注
[问答]
求助,有关STM32F0 ADC库函数中Timeout用法的问题求解
开启该帖子的消息推送
STM32F0
adc
我用
STM32
Cubemx生成keil项目,用到了ADC,于是查看stm32f0xx_hal_adc.c.中的
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t
ti
meout)函数,不明白
Timeout参数是干什么用的,,
Timeout我试过用不同的值,但是效果都一样,没什么区别
该函数如下:
/**
* @brief Wait for regular group conversion to be completed.
* @param hadc: ADC handle
* @param Timeout: Timeout value in millisecond.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
{
uint32_t tickstart;
uint32_t tmp_Flag_EOC;
/* Check the parameters */
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
/* If end of conversion selected to end of sequence */
if (hadc->Init.EOCSelection == EOC_SEQ_CONV)
{
tmp_Flag_EOC = ADC_FLAG_EOS;
}
/* If end of conversion selected to end of each conversion */
else /* EOC_SINGLE_CONV */
{
tmp_Flag_EOC = (ADC_FLAG_EOC | ADC_FLAG_EOS);
}
/* Get timeout */
tickstart = HAL_GetTick();
/* Wait until End of Conversion flag is raised */
while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_EOC))
{
/* Check if timeout is disabled (set to infinite wait) */
if(Timeout != HAL_MAX_DELAY)
{
if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
{
/* Update ADC state machine to timeout */
hadc->State = HAL_ADC_STATE_TIMEOUT;
/* Process unlocked */
__HAL_UNLOCK(hadc);
return HAL_ERROR;
}
}
}
/* Clear end of conversion flag of regular group if low power feature */
/* "LowPowerAutoWait " is disabled, to not interfere with this feature */
/* until data register is read using function HAL_ADC_GetValue(). */
if (hadc->Init.LowPowerAutoWait == DISABLE)
{
/* Clear regular group conversion flag */
__HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS));
}
/* Update state machine on conversion status if not in error state */
if(hadc->State != HAL_ADC_STATE_ERROR)
{
/* Change ADC state */
hadc->State = HAL_ADC_STATE_EOC_REG;
}
/* Return ADC state */
return HAL_OK;
}
请问Timeout有什么用?
回帖
(1)
袁沁茹
2024-5-16 16:44:19
打断while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_EOC)),退出这个loop的条件,代码更健壮。
打断while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_EOC)),退出这个loop的条件,代码更健壮。
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32F0
adc
如何去实现一种基于
STM32F0
标准
库函数
的工程呢
2021-10-25
837
请问
STM32F0
单片机AD采样不准是什么原因?
2018-10-15
6660
求
stm32f0
的固件库说明
2018-09-27
5094
STM32F0
产品列表分享
2021-02-02
1563
STM32F
103VET6之怎么编写
ADC
库函数
结构体
2021-10-13
851
stm32f0
xx_stdperiph_lib_um.chm怎么用?
2024-04-24
135
如何对
STM32F0
芯片与
STM32F
1芯片进行配置呢
2021-11-17
1989
STM32F0
休眠模式下
ADC
采样失效是为什么?
2021-10-09
1066
如何确定
STM32F0
的门数?
2018-12-05
2396
STM32F0
没有位带操作,请问有什么简单方便的处理方法吗?
2018-11-07
3124
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分