各位前辈好,不知道为什么ADC中断进不去,主要的代码如下,还请原子个等众大神指点啊,在非中断模式下的程序正常,我纠结了一天了,恳请知道
首先是 adc.c程序
u16 value=0;
void NVIC_ADC_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=ADC1_2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
NVIC_Init(&NVIC_InitStructure);
}
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
NVIC_ADC_Init();
ADC_ITConfig(ADC1,ADC_IT_EOC,DISABLE);//开中断
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
u16 Get_Adc_Value(void)
{
return value;
}
)
void ADC1_2_IRQHandler (void)
{
value=ADC_GetConversionValue(ADC1);
printf("ADC:%d\r\n",value);
ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
}
/*中断部分*/ 已经确定.s启动文件里的形式为 void ADC1_2_IRQHandler (void)
/*main 函数部分*/
int main(void)
{
u16 adcx;
float temp;
SystemInit();
delay_init(72);
NVIC_Configuration();
uart_init(9600);
LED_Init();
KEY_Init();
LCD_Init();
Adc_Init();
  OINT_COLOR=RED;
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"ADC TEST");
LCD_ShowString(60,90,"ATOM@ALIENTEK");
LCD_ShowString(60,110,"2010/12/30");
  OINT_COLOR=BLUE;
LCD_ShowString(60,130,"ADC_CH0_VAL:");
LCD_ShowString(60,150,"ADC_CH0_VOL:0.000V");
LED0=!LED0;
while(1)
{
adcx=Get_Adc_Value();
LCD_ShowNum(156,130,adcx,4,16);
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowNum(156,150,adcx,1,16);
temp-=adcx;
temp*=1000;
LCD_ShowNum(172,150,temp,3,16);
LED0=!LED0;
delay_ms(250);
}
}
|