stm32 adc卡在初始化怎么解决

在proteus上仿真 keil没报错
ADC_ResetCalibration(ADC1));
while(ADC_GetResetCalibrationStatus(ADC1));
把这个while循环删了stm32就能运行,但是读取不了外部电压,proteus显示DR=000000
求问怎么解决啊?

img

img

在 Proteus 中进行仿真时,由于 Proteus 仿真的精度和实际硬件存在一定的差别,可能会导致在实际硬件上能够正常运行的代码在仿真中无法正常运行。
对于你的问题,你可以尝试以下方法进行解决:
确保 ADC1 的时钟已经被使能。在初始化 ADC1 前,需要通过 RCC_APB2PeriphClockCmd() 函数来使能 ADC1 的时钟。
将 ADC_GetResetCalibrationStatus() 函数的返回值作为判断条件,以确保 ADC1 的校准已经完成。在进行 ADC1 校准后,需要等待 ADC1 校准完成,即 ADC_GetResetCalibrationStatus() 函数返回 RESET 状态。可以使用以下代码:
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1) != RESET);
在读取 ADC1 转换值之前,需要确保 ADC1 转换已经完成。可以使用以下代码:
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
以上代码将启动 ADC1 转换并等待转换完成,以确保可以正确读取 ADC1 转换值。
如果以上方法无法解决问题,建议检查代码是否有其他问题或错误。可以将代码贴出来,让其他人帮助排查问题。同时,需要注意在 Proteus 中进行仿真时,可能需要特殊的配置才能确保仿真结果的准确性。