项目场景:
用STM32CubeMX生成的ADC采样测量电压。
单片机:STM32G070
MDK:V5.25
问题描述:
采样回来的数值Debug看总是大了些许,几个通道都是这样,具体测试情况如下:
实际电压值 | 采样得到的电压值 | 误差 |
---|---|---|
1.505 | 1.564 | 0.059 |
2.248 | 2.294 | 0.046 |
1.749 | 1.795 | 0.046 |
3.276 | 3.301 | 0.034 |
0.098 | 0.171 | 0.073 |
原因分析:
翻阅对比官方历程检查发现没有ADC校准,STM32CubeMX不会自动帮你配置校准。
/* Run the ADC calibration */
if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
{
/* Calibration Error */
Error_Handler();
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
/*## Start ADC conversions ###############################################*/
/* Start ADC group regular conversion with DMA */
if (HAL_ADC_Start_DMA(&hadc1,
(uint32_t *)aADCxConvertedData,
ADC_CONVERTED_DATA_BUFFER_SIZE
) != HAL_OK)
{
/* ADC conversion start error */
Error_Handler();
}
解决方案:
加上校准即可。
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&m_ADCValue[0], ADC_BUF_LEN);