采用stm32f103c8t6
12 位的逐次逼近型的 ADC,有多达 18 路通道,可测量 16 路外部信号和 2 路内部信号源。ADC模块读到的数据是12位的数据。
STM32读到的ADC值,是从0到4095(111111111111)。当把ADC引脚接了GND,读到的就是0;当把ADC引脚接了VDD,读到的就是4095。
根据时钟树系统框图可以知道,ADC 的外设时钟最大
为 14MHz
ADC 操作函数(DMA方式)
小熊派KW1开发板 光照传感器+声音传感器
#define ADC_CONVERTED_DATA_BUFFER_SIZE ((uint32_t) 2) /* Size of array aADCxConvertedData[] */
static uint16_t aADCxConvertedData[ADC_CONVERTED_DATA_BUFFER_SIZE];
// 校准
if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED) != HAL_OK){
Error_Handler();
}
// 采样开始
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t *)aADCxConvertedData, ADC_CONVERTED_DATA_BUFFER_SIZE) != HAL_OK){
Error_Handler();
}
// 停止
HAL_ADC_Stop_DMA(&hadc1);
printf("ADC---CH1:%04X , CH2:%04X\n", aADCxConvertedData[0], aADCxConvertedData[1]);
stm32f103
HAL_ADC_Start(&hadc1); //启动ADC单次转换
HAL_ADC_PollForConversion(&hadc1, 50); //等待ADC转换完成
adc_value = HAL_ADC_GetValue(&hadc1); //读取ADC转换数据
vol = ((double)adc_value/4096)*3.3;
printf("adc_value = %d, vol = %.2fV.\n", adc_value, vol);
电压值=ADC_GetConversionValue(ADC1)*3.3/4096