[STM32U5] STM32U575 ADC采样

[复制链接]
426|1
 楼主| zyj213 发表于 2022-8-30 16:33 | 显示全部楼层 |阅读模式
目前在调试STM32U575的ADC驱动,系统时钟及ADC初始化接口相同,但是从单驱动调试OK情况下移植至业务代码中出现ADC校准超时,有知道什么原因吗? ADC Init Failed. Error happened in the adc calibration process. How to solve it
 楼主| zyj213 发表于 2022-8-30 16:34 | 显示全部楼层
  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.     }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

143

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部