你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

有关STM32F0ADC库函数中Timeout用法的问题

[复制链接]
hjl240 提问时间:2015-1-21 15:32 /
      我用STM32Cubemx生成keil项目,用到了ADC,于是查看stm32f0xx_hal_adc.c.中的HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)函数,不明白Timeout参数是干什么用的,,Timeout我试过用不同的值,但是效果都一样,没什么区别

该函数如下:



  1. /**
  2.   * @brief  Wait for regular group conversion to be completed.
  3.   * @param  hadc: ADC handle
  4.   * @param  Timeout: Timeout value in millisecond.
  5.   * @retval HAL status
  6.   */
  7. HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
  8. {
  9.   uint32_t tickstart;
  10.   uint32_t tmp_Flag_EOC;

  11.   /* Check the parameters */
  12.   assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));

  13.   /* If end of conversion selected to end of sequence */
  14.   if (hadc->Init.EOCSelection == EOC_SEQ_CONV)
  15.   {
  16.     tmp_Flag_EOC = ADC_FLAG_EOS;
  17.   }
  18.   /* If end of conversion selected to end of each conversion */
  19.   else /* EOC_SINGLE_CONV */
  20.   {
  21.     tmp_Flag_EOC = (ADC_FLAG_EOC | ADC_FLAG_EOS);
  22.   }
  23.    
  24.   /* Get timeout */
  25.   tickstart = HAL_GetTick();  
  26.      
  27.   /* Wait until End of Conversion flag is raised */
  28.   while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_EOC))
  29.   {
  30.     /* Check if timeout is disabled (set to infinite wait) */
  31.     if(Timeout != HAL_MAX_DELAY)
  32.     {
  33.       if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
  34.       {
  35.         /* Update ADC state machine to timeout */
  36.         hadc->State = HAL_ADC_STATE_TIMEOUT;
  37.         
  38.         /* Process unlocked */
  39.         __HAL_UNLOCK(hadc);
  40.         
  41.         return HAL_ERROR;
  42.       }
  43.     }
  44.   }
  45.   
  46.   /* Clear end of conversion flag of regular group if low power feature       */
  47.   /* "LowPowerAutoWait " is disabled, to not interfere with this feature      */
  48.   /* until data register is read using function HAL_ADC_GetValue().           */
  49.   if (hadc->Init.LowPowerAutoWait == DISABLE)
  50.   {
  51.     /* Clear regular group conversion flag */
  52.     __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS));
  53.   }
  54.   
  55.   /* Update state machine on conversion status if not in error state */
  56.   if(hadc->State != HAL_ADC_STATE_ERROR)
  57.   {
  58.     /* Change ADC state */
  59.     hadc->State = HAL_ADC_STATE_EOC_REG;
  60.   }
  61.   
  62.   /* Return ADC state */
  63.   return HAL_OK;
  64. }
复制代码

请问Timeout有什么用?
收藏 评论2 发布时间:2015-1-21 15:32

举报

2个回答
markertang 回答时间:2015-1-21 16:25:32
打断while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_EOC)),退出这个loop的条件,代码更健壮。
埃斯提爱慕 回答时间:2015-1-22 08:40:44
提示: 作者被禁止或删除 内容自动屏蔽

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版