我的STM32的ADC中断好像有问题,大家帮我看看

2019-08-23 14:35发布

我的使能了ADC的规则组转换完成中断,而且一个规则组转换完成后函数也确实进入了ADC中断,但是我在ADC中断中查询ADC的规则转换完成中断标志时值为RESET,而不是SET,这是为什么呢?ADC_IT_EOC这个中断标志在规则组转换完成后应该是SET的呀,但不知道为什么为RESET。
以下是ADC的初始化:
void ADC_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 ADC_InitTypeDef ADC_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA , ENABLE);
 RCC_ADCCLKConfig(RCC_PCLK2_Div2);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
 GPIO_Init(GPIOA , &GPIO_InitStructure);

 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
 ADC_InitStructure.ADC_ScanConvMode = ENABLE;
 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
 ADC_InitStructure.ADC_NbrOfChannel = 5;
 ADC_Init(ADC1, &ADC_InitStructure);
 ADC_TempSensorVrefintCmd(ENABLE);

 ADC_RegularChannelConfig(ADC1 , ADC_Channel_1 , 1 , ADC_SampleTime_239Cycles5);
 ADC_RegularChannelConfig(ADC1 , ADC_Channel_2 , 2 , ADC_SampleTime_239Cycles5);
 ADC_RegularChannelConfig(ADC1 , ADC_Channel_3 , 3 , ADC_SampleTime_239Cycles5);
 ADC_RegularChannelConfig(ADC1 , ADC_Channel_4 , 4 , ADC_SampleTime_239Cycles5);
 ADC_RegularChannelConfig(ADC1 , ADC_Channel_16 , 5 , ADC_SampleTime_239Cycles5);
 ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE); 
 ADC_DMACmd(ADC1,ENABLE);
 ADC_Cmd(ADC1 , ENABLE);
}
以下是ADC的中断函数:
void ADC_IRQHandler(void)
{
 if(ADC_GetITStatus(ADC1,ADC_IT_EOC) == RESET)
 {
  ADCData_Move();
  ADC_SoftwareStartConvCmd(ADC1,ENABLE);
  ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
 }
}
在主函数中所有用到的外设初始化完成后进行ADC校准,校准完了之后软件启动一次转换,一次转换完成后进行规则组转换完成中断,在中断服务程序中再软件启动一次,就这样,转换完一次,在中断中启动下一次转换。

而且还有一个关于串口接收的问题:
我整个程序中就用到了串口接收中断和ADC规则组转换完成中断两个,而且串口接收中断的优先级比ADC规则组转换完成中断要高,ADC规则组的转换结果由DMA读走,但是没有使能DMA中断,但是不知道为什么,我的串口数据接收的时候老是丢数据,我在调试的时候通过MDK中看到串口接收到的内容总是缺少几个字节的数据,但是只要我把ADC中断失能,只留串口接收中断一个的时候,串口接收的数据就没有丢过,接收一直很正常。
但是现在我就不明白了,串口中断的优先级最高,为什么接收数据的时候会出现问题。大家帮我看看哈,这个问题繁了我两天了。。。。呃。。。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。