OpenEdv-开源电子网

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

stm32外部中断问题 求助

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-8-22
在线时间
0 小时
发表于 2014-6-5 15:53:49 | 显示全部楼层 |阅读模式
5金钱
stm32IO口的10~15引脚都共用一个中断服务函数EXTI15_10_IRQHandler(),但是我现在需要用到PD11  和 PD12分别产生中断,发现不行,刚开始以为可以利用EXTI_GetITStatus判断中断线路来区分,结果还是不可以   求助啊!!!!   

最佳答案

查看完整内容[请看2#楼]

void EXTI15_10_IRQHandler(void) {      if(EXTI_GetITStatus(EXTI_Line10) != RESET)      { if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_10)==0){  //添加中断处理程序 // GPIO_SetBits(GPIOB,GPIO_Pin_8);  //detectflag=1;  printf("qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"); }       ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2014-6-5 15:53:50 | 显示全部楼层
void EXTI15_10_IRQHandler(void)
{
  
  if(EXTI_GetITStatus(EXTI_Line10) != RESET) 
    {
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_10)==0){
 //添加中断处理程序
// GPIO_SetBits(GPIOB,GPIO_Pin_8);
 //detectflag=1;
 printf("qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq");

}
     }
 if(EXTI_GetITStatus(EXTI_Line11) != RESET) 
    {
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_11)==0){
 //添加中断处理程序
// detectflag=1;
 printf("去去去去去去去去去去去去去去去去去去去去去去去去!!!!!!\r\n");
 
}
     }
 EXTI_ClearFlag(EXTI_Line11);        //清除中断标志(必须)
 EXTI_ClearITPendingBit(EXTI_Line11);
 EXTI_ClearFlag(EXTI_Line10);        //清除中断标志(必须)
 EXTI_ClearITPendingBit(EXTI_Line10);
}
我把中断标志清除移到后面  结果就可以了!!!不知道这样做好不好   不过先这样了   谢谢各位的帮助!!
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2014-6-5 16:29:15 | 显示全部楼层
你需要进入判断IO电平状态来区别。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2014-6-5 18:13:26 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
非常感谢你的回答   但是结果还是不行
这是我的代码    按键 是上拉电阻拉高  
void EXIT10_GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        //定义GPIO初始化结构体
                                                                       //配置片PD10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;
GPIO_Init(GPIOD, &GPIO_InitStructure); /*PD10 */
}


/**************************************************
外部中断配置
***************************************************/
 void EXTI_Configuration(void)
{
  EXTI_InitTypeDef EXTI_InitStructure;

  EXTI_ClearITPendingBit(EXTI_Line10);

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource10);

EXTI_ClearITPendingBit(EXTI_Line11);

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_Line = EXTI_Line11;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource11);
}

void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure; 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);           //抢占式优先级别设置为无抢占优先级


  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;          //指定中断源
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        //指定响应优先级别1
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //使能外部中断通道
  NVIC_Init(&NVIC_InitStructure);
   
}


void EXTI15_10_IRQHandler(void)
{
  
  if(EXTI_GetITStatus(EXTI_Line10) != RESET) 
    {if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_10)==0){
 //添加中断处理程序
// GPIO_SetBits(GPIOB,GPIO_Pin_8);
 detectflag=1;
 printf("%d  success!!!!!!\r\n",detectflag);
 EXTI_ClearFlag(EXTI_Line10);        //清除中断标志(必须)
 EXTI_ClearITPendingBit(EXTI_Line10);
}
     }
 if(EXTI_GetITStatus(EXTI_Line11) != RESET) 
    {
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_11)==0){
 //添加中断处理程序
 detectflag=1;
 printf("去去去去去去去去去去去去去去去去去去去去去去去去!!!!!!\r\n");
 EXTI_ClearFlag(EXTI_Line11);        //清除中断标志(必须)
 EXTI_ClearITPendingBit(EXTI_Line11);
}
     }

}
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-6-5 18:14:39 | 显示全部楼层
中断线可以判断啊。你debug了不行?
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-8-22
在线时间
0 小时
 楼主| 发表于 2014-6-5 18:30:45 | 显示全部楼层
回复【4楼】Admin:
---------------------------------
不行啊  不管按哪个按钮  两个中断服务都执行
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 15:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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