OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5174|回复: 7

(Mini STM32 开发板)ADC中断求助,进不去中断

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-4-3
在线时间
0 小时
发表于 2014-4-12 12:51:29 | 显示全部楼层 |阅读模式

各位前辈好,不知道为什么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);
 }

 }

 

我是一个任性的孩子
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-4-3
在线时间
0 小时
 楼主| 发表于 2014-4-12 12:52:39 | 显示全部楼层
基本是用的原子前辈的程序,就是不知道为什么不行
我是一个任性的孩子
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-4-3
在线时间
0 小时
 楼主| 发表于 2014-4-12 13:03:06 | 显示全部楼层
不好意思,这里弄错了,改成ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);//开中断  后还是不行。我又试了下
我是一个任性的孩子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-12 20:17:23 | 显示全部楼层
每次启动转换,都需要:
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期        
  
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
这两个指令的哦。
你在while里面,加入这两句话试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-4-3
在线时间
0 小时
 楼主| 发表于 2014-4-12 22:35:15 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
请问原子前辈,这两句是放到main函数还是中断中啊?
我是一个任性的孩子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-12 23:23:35 | 显示全部楼层
回复【5楼】wolfcherished:
---------------------------------
main
函数
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-4-3
在线时间
0 小时
 楼主| 发表于 2014-4-13 08:11:36 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
谢谢原子前辈,能够进入中断,并且串口打印出来,可是请问为什么显示屏没有反应?是因为内存被中断占用吗?
我是一个任性的孩子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-13 09:26:26 | 显示全部楼层
回复【7楼】wolfcherished:
---------------------------------
你仿真看下吧,看看main函数里面,adcx和temp的值,分别是多少?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 14:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表