中级会员 
   
	- 积分
 - 233
 
        - 金钱
 - 233 
 
       - 注册时间
 - 2014-4-29
 
      - 在线时间
 - 6 小时
 
 
 
 | 
 
5金钱 
正在学习ADC中断,但是为什么就是进不去中断呢?刚开始写的是模拟看门狗的中断,发现不好使,就改成EOC了,还是不好使。。。 
 
主程序中将所有的都初始化了,也把中断分组那个函数调用了。为什么进不去中断呢?EOC说是转换完成标志位,转换完成是指一次转换的意思吧?下面是我写的ADC1通道1的初始化,求指出哪里错了~为什么中断没现象 
 
 
#include "stm32f10x.h" 
#include "adc4.h" 
#include "led.h" 
#include "delay.h" 
 
void adc1_4init(void) 
{ 
    ADC_InitTypeDef ADC_InitStructure; 
    GPIO_InitTypeDef GPIO_InitStructure;			 //变量定义需要在最前面 
NVIC_InitTypeDef NVIC_InitStructure; 
 
led_init(); 
delay_init(); 
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );		  //ADC1,PA时钟 
RCC_ADCCLKConfig(RCC_PCLK2_Div6); 
 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;	   //ADC对应的i/o口的配置 chanel_1 
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 
GPIO_Init(GPIOA, &GPIO_InitStructure); 
 
ADC_DeInit(ADC1); 
 
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;		 		 //ADC1工作模式 
ADC_InitStructure.ADC_ScanConvMode = DISABLE; 
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;		//需要是单次,就是整个主程序执行完一次,再转换ADC  
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_1, 1, ADC_SampleTime_239Cycles5);	  //通道设置不能丢 
   
ADC_AnalogWatchdogThresholdsConfig(ADC1, 4096, 4000);			 //两条模拟看门狗的函数,分别给出下线和上线 
ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_1); 
ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_SingleRegEnable);	   //使能,ADC1看门狗使能,中断使能,ADC1使能 
 
 
 
 
ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE); 
ADC_Cmd(ADC1, ENABLE);	  
 
 
 
 
ADC_ResetCalibration(ADC1); 
while(ADC_GetResetCalibrationStatus(ADC1));	  //四条语句 更新 
ADC_StartCalibration(ADC1); 
while(ADC_GetCalibrationStatus(ADC1)); 
  
ADC_SoftwareStartConvCmd(ADC1, ENABLE);		  //软件启动,因为前面外部触发时NONE,故必须写的 
 
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	   //ADC1中断优先级配置 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure);   
 
} 
 
 
void ADC1_2_IRQHandler(void)	    
{ 
//	while(ADC_GetITStatus(ADC1, ADC_IT_AWD) != RESET);		  //判断发生模拟看门狗中断 
//	{  
led_init(); 
PAout(8) = 0; 
delay_ms(200); 
PAout(8) = 1; 
delay_ms(200); 
//	ADC_ClearITPendingBit(ADC1, ADC_IT_AWD);   //为什么自己就退出中断了呢? 
//	} 
} 
 
 
 
 
 
 
 
 
  |   
 
 
 
 
 
 |