最近第一用灵动微芯片,对芯片内存温度采集
ADC_InitTypeDef ADC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE);
ADC_StructInit(&ADC_InitStruct);
ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
// ADC_InitStruct.ADC_Prescaler = ADC_Prescaler_16;
ADC_InitStruct.ADC_PRESCARE = ADC_PCLK2_PRESCARE_16;
ADC_InitStruct.ADC_Mode = ADC_CR_CONTINUE ;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_Init(ADC1, &ADC_InitStruct);
ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 0, ADC_Samctl_239_5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_VoltReference, 0, ADC_Samctl_239_5);
ADC_TempSensorCmd(ENABLE);
ADC_VrefintCmd(ENABLE);
ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(1){
while (RESET == ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC))
{
}
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
V_Cal = *(uint16_t*)(0x1FFFF7E0);
Vref = (V_Cal*(float)3.3 )/ (float)4096.0;
V_now = ((u16)ADC1->ADDR15) * (float)3.3 / (float)4096.0;
Avg_Slope = 4.955;
T_Cal = *(uint16_t*)(0x1FFFF7F6);
T_now = (((u16)ADC1->ADDR14) - T_Cal) / 4.955 + 25;
}