久芯网

STM32U575 ADC采样

avatar 梦想成真_518 提问时间: 2023-07-22 07:50:05 / 未解决
目前在调试STM32U575的ADC驱动,系统时钟及ADC初始化接口相同,但是从单驱动调试OK情况下移植至业务代码中出现ADC校准超时,有知道什么原因吗? ADC Init Failed. Error happened in the adc calibration process. How to solve it
  1. HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc, uint32_t CalibrationMode, uint32_t SingleDiff)
  2. {
  3.   HAL_StatusTypeDef tmp_hal_status;
  4.   __IO uint32_t wait_loop_index = 0UL;

  5.   UNUSED(SingleDiff); /* STM32U5 calibration is not making difference between Single and Diff ended */
  6.   /* We keep this to be inligne with old products API and for any further use */

  7.   /* Check the parameters */
  8.   assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  9.   assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));

  10.   __HAL_LOCK(hadc);

  11.   /* Calibration prerequisite: ADC must be disabled. */

  12.   /* Disable the ADC (if not already disabled) */
  13.   tmp_hal_status = ADC_Disable(hadc);

  14.   /* Check if ADC is effectively disabled */
  15.   if (tmp_hal_status == HAL_OK)
  16.   {
  17.     /* Set ADC state */
  18.     ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL);

  19.     /* Start ADC calibration in mode single-ended or differential */
  20.     LL_ADC_StartCalibration(hadc->Instance, CalibrationMode);

  21.     /* Wait for calibration completion */
  22.     while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  23.     {
  24.       wait_loop_index++;
  25.       if (wait_loop_index >= ADC_CALIBRATION_TIMEOUT)
  26.       {
  27.         /* Update ADC state machine to error */
  28.         ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);

  29.         __HAL_UNLOCK(hadc);

  30.         return HAL_ERROR;
  31.       }
  32.     }

  33.     /* Set ADC state */
  34.     ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);
  35.   }
  36.   else
  37.   {
  38.     SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);

  39.     /* Note: No need to update variable "tmp_hal_status" here: already set    */
  40.     /*       to state "HAL_ERROR" by function disabling the ADC.              */
  41.   }

  42.   __HAL_UNLOCK(hadc);

  43.   return tmp_hal_status;
  44. }
复制代码



如需获得 STM32U575 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

3个回答
  • avatar 梦想成真_518
    回答时间: 2023-07-22 08:19:34

    问题查到了,原来是ADC的电源Vdd没有打开

  • avatar xmshao
    回答时间: 2023-07-22 08:37:20

    对于模拟部分,VDDA没有接好的确很致命。不过,时不时也会有人在这个地方栽跟头。谢谢您的反馈!

  • avatar 草泥马的
    回答时间: 2023-07-22 08:54:32
    梦想成真_518 发表于 2022-8-3 10:03
    问题查到了,原来是ADC的电源Vdd没有打开

    您好,我和您遇到了同样的问题,只是我是开发板遇到的。没太明白您说的VDD没有打开是什么意思,是VDDA没有连接到3.3V吗?麻烦您解答一下可以吗

会员中心 微信客服
客服
回到顶部