adc时钟
由时钟控制器提供的ADCCLK和pclk(apb2),RCC控制器为ADC提供一个专用的可编程预分频器。最大可到14MHZ,实际上分频后最大只能拿到12MHZ,转换时间大概是1.17us左右。
adc读取数据的三种方式

阻塞轮询
相关函数:

等待ADC转换完成后接收的返回值

adc轮询读取电压

测试结果

dma+adc


adc只有一个寄存器存值,寄存器地址不能选择递增。因为adc精度最高14位,所以选择Half Word
代码实现
HAL_ADCEx_Calibration_Start(&hadc1);
while (1)
{
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc_val,2);
HAL_Delay(500);
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance == ADC1)
{
voltage[0] = (float)adc_val[0] / 4096 * 3.3f;
voltage[1] = (float)adc_val[1] / 4096 * 3.3f;
printf("\r\n V1 : %.3f V2 : %.3f \r\n",voltage[0],voltage[1]);
}
}
中断+注入




