MM32F003内部有一个1.2V的参考电压,可以通过ADC通道读取。但是可能这个参考电压并不准确。因为使用1.2折算出的系统电压为5.2V,使用1.15V折算的系统电压才是准确的。
下面的例程通过读取芯片内部参考电压,折算出系统供电电压。
1 配置ADC通道
int main(void)
{
u16 chan, averagenumber = 0;
Uart_ConfigInit(9600);
// SystemInit();
// InitSystick();
//Initialize DMA
DMAInit();
ADCSingleChannelInit(ADCchVref);
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //Start Conversion
while(1) {
if(ADCFilterflag) { //Determine whether the second-order filter is over
ADCFilterflag = 0; //Clear the filter end flag
Get_VDDA_Volatge(); //Convert the filtered value to voltage
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //Start Conversion
}
}
}
2 通过读取内部参考电压的ADC值折算出供电电压
void Get_VDDA_Volatge(void)
{
if((ADCFilterValue == 0) || (ADCFilterValue > 4095))
ADCFilterValue = 948;
VDDA_Volatge = (4095 / ((float)ADCFilterValue )) * 1.15;
UartSendGroup((u8*)printBuf, sprintf(printBuf, "adc value = 0x%4X \r\n",ADCFilterValue));
UartSendGroup((u8*)printBuf, sprintf(printBuf, "powef supply Voltage = %f \r\n",VDDA_Volatge));
}
3 计算内部参考电压
void Get_ADCVolatge(void)
{
ADCVolatge = ((float)ADCFilterValue / 4095) * REFVOLATGE;
UartSendGroup((u8*)printBuf, sprintf(printBuf, "adc value = 0x%4X \r\n",ADCFilterValue));
UartSendGroup((u8*)printBuf, sprintf(printBuf, "ref Voltage = %f \r\n",ADCVolatge));
}
···