OpenEdv-开源电子网

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

外部中断函数

[复制链接]

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
发表于 2013-1-6 10:28:14 | 显示全部楼层 |阅读模式

#define KEY0  PAin(13)
#define KEY1  PAin(15)
#define KEY2  PAin(0)
以下是中断服务函数
字体蓝色部分是开发板里面的源码程序
字体红色部分的是我更改的程序,但是发现功能实现不了
麻烦各位高手指点下。。。谢谢

//外部中断0服务程序
void EXTI0_IRQHandler(void)
{                         
 delay_ms(10);//消抖
 if(KEY2==1)  //按键2
 {
  LED0=!LED0;
  LED1=!LED1; 
 }  
 EXTI->R=1<<0;  //清除LINE0上的中断标志位 
}

//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{   
 delay_ms(10);    //消抖   
 if(KEY0==0)      //按键0
 {
  LED0=!LED0;
 }
 else if(KEY1==0)//按键1
 {
  LED1=!LED1;
 }
 EXTI->R=1<<13;     //清除LINE13上的中断标志位 
 EXTI->R=1<<15;     //清除LINE15上的中断标志位 
}
//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入.
void EXTIX_Init(void)
{
 RCC->APB2ENR|=1<<2;     //使能PORTA时钟
 JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD  

 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
 GPIOA->CRL|=0X00000008;  
 GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入  
 GPIOA->CRH|=0X80800000;       
 GPIOA->ODR|=1<<13;    //PA13上拉,PA0默认下拉
 GPIOA->ODR|=1<<15;    //PA15上拉

 Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
 Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
 Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发

 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);    //抢占2,子优先级2,组2,EXTI0_IRQChcannel=6
 MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2,EXTI15_10_IRQChannel=40   
}

//=========================================================================================================

//外部中断0服务程序
void EXTI0_IRQHandler(void)
{                         
 delay_ms(10);//消抖
 if(KEY1==1)  //按键2
 {
  LED0=!LED0;
  LED1=!LED1; 
 }  
 EXTI->R=1<<13;  //清除LINE0上的中断标志位 
}

//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{   
 delay_ms(10);    //消抖   
 if(KEY0==0)      //按键0
 {
  LED0=!LED0;
 }
 else if(KEY2==1)//按键2
 {
  LED1=!LED1;
 }
 EXTI->R=1<<0;     //清除LINE13上的中断标志位 
 EXTI->R=1<<15;     //清除LINE15上的中断标志位 
}
//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入.
void EXTIX_Init(void)
{
 RCC->APB2ENR|=1<<2;     //使能PORTA时钟
 JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD  

 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
 GPIOA->CRL|=0X00000008;  
 GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入  
 GPIOA->CRH|=0X80800000;       
 GPIOA->ODR|=1<<13;    //PA13上拉,PA0默认下拉
 GPIOA->ODR|=1<<15;    //PA15上拉

 Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
 Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
 Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发

 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);    //抢占2,子优先级2,组2,EXTI0_IRQChcannel=6
 MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2,EXTI15_10_IRQChannel=40   
}

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

使用道具 举报

9

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-2-28
在线时间
2 小时
发表于 2013-1-6 11:03:17 | 显示全部楼层
中断标志清除那里有问题,跟你的中断号对应不上哦
回复 支持 反对

使用道具 举报

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
 楼主| 发表于 2013-1-6 15:21:45 | 显示全部楼层
回复【2楼】mattress:
---------------------------------
那中断清除标志位改了还是没用,是不是对High  和对low触发不能放在一个中断服务函数里面呀???
天道酬勤
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 11:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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