OpenEdv-开源电子网

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

关于中断的问题

[复制链接]

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-8-30
在线时间
13 小时
发表于 2013-9-7 20:13:17 | 显示全部楼层 |阅读模式

             以下是我的中断程序,可是为什在我没有触发中断(PA2)程序一下载时候二极管就亮了,在以后我把其他的全部注释了,只有GPIO的初始化的部分也没有给端口送数据,程序以一进去等还是亮的(都没有了中断服务程序了)。新手,请大家指教。

#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"

int main()
{
  GPIO_InitTypeDef GPIO_InitStruct;
 EXTI_InitTypeDef EXTI_InitStruct;
 NVIC_InitTypeDef NVIC_InitStruct;
 delay_init(72);
   
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
 
   //GPIO_InitTypeDef GPIO_InitStruct;  
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
   GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;
   GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
   GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
   GPIO_Init(GPIOA,&GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;
   GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
   GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
   GPIO_Init(GPIOA,&GPIO_InitStruct);
 

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2);
 EXTI_InitStruct.EXTI_Line=EXTI_Line2;
 EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
 EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;
 EXTI_InitStruct.EXTI_LineCmd=ENABLE;
 EXTI_Init(&EXTI_InitStruct);


 
 
  NVIC_InitStruct.NVIC_IRQChannel=EXTI2_IRQn;
  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0X02;
  NVIC_InitStruct.NVIC_IRQChannelSubPriority=0X02;
  NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStruct);

}
 

void EXTI2_IRQHandler(void)
{
      if(!PAin(2))
      {
   delay_ms(5);
   if(!PAin(2))
   Aout(8)=0;
   else
   Aout(8)=1; 
   }
   EXTI_ClearITPendingBit(EXTI_Line2);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-7 22:59:10 | 显示全部楼层
你的LED是高电平亮还是低电平亮啊?
仿真一下就知道什么情况了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-8-30
在线时间
13 小时
 楼主| 发表于 2013-9-8 14:17:30 | 显示全部楼层
回复【2楼】LED是低电平点亮的,GPIO_Pin_8是控制LED的,通过仿真GPIO_Pin_8的管脚一直是低电平,难道是配置GPIO后的端口是默认的低电平吗。还是我的中断设置的有问题,今天检查了一下还是没有结果啊,请原子哥指点
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-8 14:52:56 | 显示全部楼层
回复【3楼】cjystar:
---------------------------------
默认是输出0的,因为ODR是0,你要设置为1,就得程序设置一下了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-8-30
在线时间
13 小时
 楼主| 发表于 2013-9-10 12:11:42 | 显示全部楼层
谢谢原子哥,我后来又仔细的调试了一下。但是好像是始终是没有进去中断,下面是我后来的中断实验程序,我是Mini的学习板,也参照过你们的源程序,感觉是没有什么问题,但是下载到板子上就是没有现象,请原子哥看看,我调试了好久

#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"

int main()
{
    GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

SystemInit();
delay_init(72);
 
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);

  //初始化 KEY0-->GPIOA.13,  上拉输入
   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);


   GPIO_InitStructure.GPIO_Pin= GPIO_Pin_8;
   GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;   
   GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;    
   GPIO_Init(GPIOA,&GPIO_InitStructure);
   GPIO_SetBits(GPIOA,GPIO_Pin_8);
  
 //GPIOA.13 中断线以及中断初始化配置
    
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource13);
   EXTI_InitStructure.EXTI_Line=EXTI_Line13;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);
EXTI_DeInit();

  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按键所在的外部中断通道
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, 
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级2
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
   NVIC_Init(&NVIC_InitStructure); 
}
 void EXTI15_10_IRQHandler(void)
{
   delay_ms(10);    //消抖  
    if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
  PAout(8)=0; //LED低电平点亮
}
EXTI_ClearITPendingBit(EXTI_Line13);  //清除EXTI13线路挂起位
}
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-8-30
在线时间
13 小时
 楼主| 发表于 2013-9-10 21:11:05 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我仔细的调试了,。但是好像是始终是没有进去中断,下面是我后来的中断实验程序,下载源程序的工程依然可以,我是Mini的学习板,也参照过你们的源程序,感觉是没有什么问题,但是下载到板子上就是没有现象,请原子哥看看,我调试了好久
 
#include "stm32f10x.h" 
#include "delay.h" 
#include "sys.h" 

int main() 

    GPIO_InitTypeDef GPIO_InitStructure; 
EXTI_InitTypeDef EXTI_InitStructure; 
NVIC_InitTypeDef NVIC_InitStructure; 

SystemInit(); 
delay_init(72); 
  
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); 

  //初始化 KEY0-->GPIOA.13,  上拉输入 
   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13; 
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 
   GPIO_Init(GPIOA, &GPIO_InitStructure); 


   GPIO_InitStructure.GPIO_Pin= GPIO_Pin_8; 
   GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;    
   GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;     
   GPIO_Init(GPIOA,&GPIO_InitStructure); 
   GPIO_SetBits(GPIOA,GPIO_Pin_8); 
   
 //GPIOA.13 中断线以及中断初始化配置 
     
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource13); 
   EXTI_InitStructure.EXTI_Line=EXTI_Line13; 
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; 
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 
   EXTI_InitStructure.EXTI_LineCmd = ENABLE; 
   EXTI_Init(&EXTI_InitStructure); 
EXTI_DeInit(); 

  //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按键所在的外部中断通道 
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,  
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级2 
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 
   NVIC_Init(&NVIC_InitStructure);  

 void EXTI15_10_IRQHandler(void) 

   delay_ms(10);    //消抖   
    if(EXTI_GetITStatus(EXTI_Line13) != RESET) 

  Aout(8)=0; //LED低电平点亮 

EXTI_ClearITPendingBit(EXTI_Line13);  //清除EXTI13线路挂起位
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-10 21:59:40 | 显示全部楼层
回复【6楼】cjystar:
---------------------------------
我倒是不怎么用库函数。
你的main函数没看到while死循环哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-8-30
在线时间
13 小时
 楼主| 发表于 2013-9-11 09:22:07 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
非常感谢原子哥,加一个while(1),死循环就一切正常,终于解决了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 07:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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