手里有一个产品,使用到STM32的AD的两个通道,一个为Regular方式,阵发性打开,采样率为250HZ,另一个为Inject通道,每一秒钟检测一次,用以检测设备的电池电量。现在的现象是在没有开启regular方式的时候检测电池电量正常,一旦开启的regular方式,inject通道似乎测试的值也收到了影响,inject通道值偏大,而用万用表测试这两种情况下电源电压恒定。按照现在的设计只要我打开了regular测量,界面上电池不管电量多低基本都显示电池电量满,请问大家有遇到这个问题么 初始化的程序如下 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_55Cycles5); ADC_DiscModeChannelCountConfig(ADC1, 1); ADC_DiscModeCmd(ADC1, ENABLE); //ADC_10为电源电压测试 ADC_InjectedSequencerLengthConfig(ADC1, 1); ADC_InjectedChannelConfig(ADC1, ADC_Channel_10,1,ADC_SampleTime_28Cycles5); ADC_InjectedDiscModeCmd(ADC1, ENABLE); ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigInjecConv_None); ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); /* Check the end of ADC1 reset calibration register */ while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1));
regular调用的代码是在定时器中断中加入 if ((TIM3->SR & 0x0001) != 0) { // check interrupt source ADC_SoftwareStartConvCmd(ADC1, ENABLE); ADCFinish=0; while(!ADCFinish) { ADCFinish=ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC); } analog[ADCCount]=ADC_GetConversionValue(ADC1);
Inject是在另一个进程中一秒钟一次调用如下代码 ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE); while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC)); ADC_Inject_PowerV=ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1); ADC_SoftwareStartInjectedConvCmd(ADC1, DISABLE);
问题是一旦打开定时器中断后ADC_Inject_PowerV明显增大 |