ADC的校准

来源:互联网 发布:上海姑娘 知乎 编辑:程序博客网 时间:2024/04/29 22:12

    在ADC使用的时候需要对AD进行校准,校准的代码是在数据手册的demo里面。

 

A.7.1 ADC Calibration code example

    /* (1) Ensure that ADEN = 0 */
   /* (2) Clear ADEN */
   /* (3) Launch the calibration by setting ADCAL */
   /* (4) Wait until ADCAL=0 */
   if ((ADC1->CR & ADC_CR_ADEN) != 0) /* (1) */
   {
       ADC1->CR &= (uint32_t)(~ADC_CR_ADEN); /* (2) */
   }
    ADC1->CR |= ADC_CR_ADCAL; /* (3) */
    while ((ADC1->CR & ADC_CR_ADCAL) != 0) /* (4) */
    {
     /* For robust implementation,

add here time-out management */

 

    }

上面的例子相当于库里自带的函数如下:

HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc)
{
  HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  uint32_t tickstart=0;
 
  /* Check the parameters */
  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));

  /* Process locked */
  __HAL_LOCK(hadc);
 
  /* Calibration prerequisite: ADC must be disabled. */
  if (ADC_IS_ENABLE(hadc) == RESET)
  {
    /* Set ADC state */
    ADC_STATE_CLR_SET(hadc->State,
                      HAL_ADC_STATE_REG_BUSY,
                      HAL_ADC_STATE_BUSY_INTERNAL);
   
    /* Start ADC calibration */
    hadc->Instance->CR |= ADC_CR_ADCAL;

    tickstart = HAL_GetTick(); 

    /* Wait for calibration completion */
    while(HAL_IS_BIT_SET(hadc->Instance->CR, ADC_CR_ADCAL))
    {
      if((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT)
      {
        /* Update ADC state machine to error */
        ADC_STATE_CLR_SET(hadc->State,
                          HAL_ADC_STATE_BUSY_INTERNAL,
                          HAL_ADC_STATE_ERROR_INTERNAL);
       
        /* Process unlocked */
        __HAL_UNLOCK(hadc);
       
        return HAL_ERROR;
      }
    }
   
    /* Set ADC state */
    ADC_STATE_CLR_SET(hadc->State,
                      HAL_ADC_STATE_BUSY_INTERNAL,
                      HAL_ADC_STATE_READY);
  }
  else
  {
    /* Update ADC state machine to error */
    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
   
    tmp_hal_status = HAL_ERROR;
  }
 
  /* Process unlocked */
  __HAL_UNLOCK(hadc);
 
  /* Return function status */
  return tmp_hal_status;
}

 

 

 

 

测试结果显示有效果,但是效果不明显。

0 0
原创粉丝点击