ADC可不是射手,他是模拟量转换为数字量的通道。 ADC(analog to digital converter)即模数转换器,它可以将模拟信号转换为数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。STM32L071KBU3属于逐次逼近型。细细研究下来,这一部分也有很多让人眼前一亮的知识,而在这,我就只总结下adc的简单配置及取值显示出来。
配置
配置说明
1.选择IN8,IN9两个adc通道,这两个通道对应的引脚是PB0,PB1;
2.配置ADC的数据分辨率为12 bit(可配置 12 位、10 位、8 位或 6 位分辨率);
3.使能Low Power Auto Wait 低功耗自动等待
这样ADC在cube中就配置好了
代码应用
初始化
1.初始化代码中打开adc自动校准
HAL_ADCEx_Calibration_Start(&hadc,ADC_SINGLE_ENDED);
2.增加底层转换函数
void ADC_Read(uint16_t *ADC_Data)
{
HAL_ADC_Start(&hadc);
if(HAL_ADC_PollForConversion(&hadc,10) == HAL_OK)
ADC_Data[0] = HAL_ADC_GetValue(&hadc);
if(HAL_ADC_PollForConversion(&hadc,10) == HAL_OK)
ADC_Data[1] = HAL_ADC_GetValue(&hadc);
}
3.在主函数中调用显示
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC_Init();
MX_I2C3_Init();
OLED_Init();
while (1)
{
HAL_Delay(100);
ADC_Read(usAdc);
sprintf((char *)ucBuf,"%04u %4.2fV %02u",usAdc[1],usAdc[1]*3.3/4095,COUNT);
OLED_ShowString(0,0,ucBuf,16);
sprintf((char *)ucBuf,"%04u %4.2fV",usAdc[0],usAdc[0]*3.3/4095);
OLED_ShowString(0,2,ucBuf,16);
}
}