文章目录
前言
一、ADC原理
二、如何使用ADC
1.DMA单通道读取ADC
(1)初始化
这里使用DMA连续读取,但是使用LCD显示时数值会快速闪烁。如果要单次读取,将红框部分改为Disabled,DMA改为Normal.
(2)逻辑代码
代码如下:
uint16_t AdcValue;
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
HAL_ADC_Start_DMA(&hadc2,(uint32_t*)&AdcValue,1);//写到while(1)之前
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
if(hadc == &hadc2)
{
如果是单次读取,需要再次打开DMA
//HAL_ADC_Start_DMA(&hadc2,(uint32_t*)&AdcValue,1);
}
}
2.中断单通道读取ADC
(1)初始化
选择6分频以下会导致LCD无法显示
(2)逻辑代码
代码如下:
HAL_ADC_Start_IT(&hadc2);
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
if(hadc == &hadc2)
{
AdcValue = HAL_ADC_GetValue(&hadc2);
HAL_ADC_Start_IT(&hadc2);
}
}
3.轮询单通道读取ADC
(1)初始化
参考上述初始化,不需要开启中断
(2)逻辑代码
HAL_ADC_Start(&hadc2);
HAL_ADC_PollForConversion(&hadc2,10);
AdcValue = HAL_ADC_GetValue(&hadc2);
sprintf((char *)display," %04d",AdcValue);
LCD_DisplayStringLine(Line1, display);