STM32+ESP8266水墨屏天气时钟:利用STM32的ADC功能计算锂电池电量

//电池电压ADC采集初始化,ADC12_IN9,PB1 void BAT_ADC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_ADC1,ENABLE); GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); ADC_DeInit(ADC1); ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//连续转化模式设置 ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//数据左对齐 ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//软件触发 ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//独立模式 ADC_InitStructure.ADC_NbrOfChannel=1;//通道数 ADC_InitStructure.ADC_ScanConvMode=DISABLE;//扫描模式设置 ADC_Init(ADC1,&ADC_InitStructure); ADC_Cmd(ADC1,ENABLE);//使能指定ADC外设 ADC_ResetCalibration(ADC1);//使能复位校准 while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束 ADC_StartCalibration(ADC1);//开启AD校准 ADC_GetCalibrationStatus(ADC1);//等待AD校准结束 } //获得ADC值 //通道9采样值 uint16_t Get_Adc(void) { ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期 ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待转换结束 return ADC_GetConversionValue(ADC1);//返回最近一次ADC1规则组的转换结果 } //计算电池的电压 float Get_BAT_Voltage() { u16 BAT_ADC=0; float BAT_Voltage=0;//电池的电压 int i=0; for(i=0;i<5;i++) { BAT_ADC=BAT_ADC+Get_Adc(); delay_ms(10); } BAT_ADC=BAT_ADC/5; BAT_Voltage=(float)BAT_ADC*(3.3/4096); //这里乘以2是因为两个电阻分压了 BAT_Voltage=BAT_Voltage*2; return BAT_Voltage; }
上一篇:自然语言处理NLP关键知识点


下一篇:透视晶圆制造黑匣子:RFID赋能智能生产,构建晶圆盒全程精准追溯体系