调用了复位校准函数ADC_ResetCalibration()以及开始校准函数ADC_StartCalibration(),必须检查标志位等待校准完成,确保完成后才开始ADC转换.(建议是每次上电后都校准一次咯)
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
配置ADC1的模式为软件触发方式.
调用这个函数之后,ADC就开始进行转换了,每次转换完成后,由DMA控制器把转换从ADC数据寄存器(ADC_DR)中转移到变量ADC_ConvertedValue中,当DMA传输完成后,在main函数中使用 ADC_ConvertedValue的内容就是ADC的转换值了.
计算电压值:
在main函数中,ADC_ConvertedValueLoca是一个float类型变量,它保存了有转换值计算出来的电压值,计算的公式是ADC通用的
实际电压 = ADC转换值*LSB
LSB为Vref+接的参考电压/ADC的精度( LSB =3.3/2的12次方)
PS:
这里面ADC_ConvertedValue是用volatile修饰的,用 volatile 声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。因为 ADC_ConvertedValue 这个变量值随时都是会被 DMA 控制器改变的,所以用 volatile 来修饰它,确保每次读取到的都是实时的 ADC 转
1