OpenEdv-开源电子网

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

同时中断问题,pc8中断引起pc8-pc11同时中断。。

[复制链接]

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
发表于 2014-4-28 16:16:31 | 显示全部楼层 |阅读模式
硬件:pc8,pc9,pc10,pc11为外部中断线,pc9为下降沿中断,其他配置为上升沿中断
调试:给pc8上升沿,pc8,pc9,pc10,pc11全部产生中断。如图所示


软件:void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;
 /* Configure one bit for preemption priority */
 /* 优先级组 说明了抢占优先级所用的位数,和子优先级所用的位数   在这里是1, 7 */    
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);     //使能复用功能时钟
  
  NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn; //外部中断9-5
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     //抢占优先级 1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级1  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn ; //外部中断15-10
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     //抢占优先级 1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级2  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
  NVIC_Init(&NVIC_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource7); //障碍物中断
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13); 
//  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource14);

  EXTI_InitStructure.EXTI_Line = EXTI_Line7; //PC7 跌落
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    //中断模式
  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising;     //降沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  EXTI_InitStructure.EXTI_Line = EXTI_Line8; //PC9跌落
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    //中断模式
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;    //降沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  EXTI_InitStructure.EXTI_Line = EXTI_Line9; //PC9 左碰触
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    //中断模式
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;    //下降沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure); 

  EXTI_InitStructure.EXTI_Line = EXTI_Line10; //pc10 跌落
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    //中断模式
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;            //上升沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure); 

  EXTI_InitStructure.EXTI_Line = EXTI_Line11; //U101 FRONT检测状态
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    //中断模式
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;        //上升沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  EXTI_InitStructure.EXTI_Line = EXTI_Line12; // PC12 跌落
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;    //中断模式
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;        //上升沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  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); //配置结束后引起了中断
中断服务函数:
void EXTI9_5_IRQHandler(void)

  if(EXTI_GetITStatus(EXTI_Line7) != RESET)  //判别
  {
      EXTI_ClearITPendingBit(EXTI_Line7); //清除中断
f2diel=1;
action();
  }
if(EXTI_GetITStatus(EXTI_Line8) != RESET)  //判别
  {
      EXTI_ClearITPendingBit(EXTI_Line8); //清除中断
f2diel=1;
action();                            //
  } 
 
if(EXTI_GetITStatus(EXTI_Line9) != RESET)  //判别
  {
      EXTI_ClearITPendingBit(EXTI_Line9); //清除中断
f1qianf=3;
action();                    //左障碍物
  }
 
}

void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line10) != RESET)  //判别
  {
      EXTI_ClearITPendingBit(EXTI_Line10); //清中断
f2diel=1;
action();                         // 避障
  }
if(EXTI_GetITStatus(EXTI_Line11) != RESET)  //判别
  {
      EXTI_ClearITPendingBit(EXTI_Line11); //清中断
f1qianf=1;
action();
GPIO_ResetBits(GPIOB,GPIO_Pin_5); ///
  }
if(EXTI_GetITStatus(EXTI_Line12) != RESET)  //判别
  {
      EXTI_ClearITPendingBit(EXTI_Line12); //清中断
f2diel=1;
action();
GPIO_ResetBits(GPIOB,GPIO_Pin_5);          ///
  }
if(EXTI_GetITStatus(EXTI_Line13) != RESET)  //判别
  {
      EXTI_ClearITPendingBit(EXTI_Line13); //清中断
f1qianf=2;
action();                          //r
  GPIO_ResetBits(GPIOB,GPIO_Pin_5);/// 
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
 楼主| 发表于 2014-4-28 20:26:26 | 显示全部楼层
传感器端口与其他端口分开配置的
void SENSOR_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//U101, L-H
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 ;  //前方障碍物
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;
//CLH
// GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 ;  //左方碰触开关
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
//    GPIO_Init(GPIOC, &GPIO_InitStructure) ;
 //CRH
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 ;  //右方碰触开关
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
    GPIO_Init(GPIOD, &GPIO_InitStructure);
   GPIO_SetBits(GPIOD,GPIO_Pin_13);

//U81,U87,U78,U714 L-H
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8|GPIO_Pin_10| GPIO_Pin_12  ;  //防跌落
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉引脚,检测障碍物
    GPIO_Init(GPIOC, &GPIO_InitStructure) ;

GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12 ;   //悬空碰触开关
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉引脚,检测障碍物//
    GPIO_Init(GPIOD, &GPIO_InitStructure);
//J162(H_PW)
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 ;  //红外接收
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
    GPIO_Init(GPIOD, &GPIO_InitStructure);
//J34(H_PW)
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 ;  //左侧光电编码
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
    GPIO_Init(GPIOE, &GPIO_InitStructure);
//J64(H_PW)
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 ;  //右侧光电编码
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//由高到脉冲
    GPIO_Init(GPIOA, &GPIO_InitStructure);   
}

void GPIO_Configuration(void)

GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  /* A0,PA12-> 左右脉冲输入 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
GPIO_Init(GPIOA, &GPIO_InitStructure); 
 //PE5输入到PA0
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  //PE.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO口速度为50MHz
 GPIO_Init(GPIOE, &GPIO_InitStructure);

  //LCD1602(DO~D7)对应STM32的GPIO口(PB8~PB15)
  GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  GPIO_Init(GPIOB, &GPIO_InitStructure);     
  //LCD1602的(RS、RS、E)对应STM32的GPIO口(PD11、PD10、PD9)
  GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_8|GPIO_Pin_9 | GPIO_Pin_10);
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  // U113,CRH, J162(H_PW),KEY1 ,6,9,10
  GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 );
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
  GPIO_Init(GPIOD, &GPIO_InitStructure);
   // U88L,KEY5 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //
  GPIO_Init(GPIOD, &GPIO_InitStructure);
   // U814(L)
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9 ;  //左方碰触开关
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉引脚,检测障碍物
  GPIO_Init(GPIOC, &GPIO_InitStructure) ;
  GPIO_SetBits(GPIOC,GPIO_Pin_9);///

   //SPEAKER(H-PW),MORTOR(H-L),KRL ,U1110 ,j142(PE13.PWM) ,j53h
  GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_14);
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  GPIO_SetBits(GPIOE,GPIO_Pin_9);
  GPIO_SetBits(GPIOE,GPIO_Pin_10);
  GPIO_ResetBits(GPIOE,GPIO_Pin_11);
  GPIO_SetBits(GPIOE,GPIO_Pin_12);
//  GPIO_ResetBits(GPIOE,GPIO_Pin_13);  //
  GPIO_ResetBits(GPIOE,GPIO_Pin_14);
  //J81(H-L)
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_SetBits(GPIOD,GPIO_Pin_11);
// //ENA/BH
//  GPIO_InitStructure.GPIO_Pin =(GPIO_Pin_6 | GPIO_Pin_7);
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_Init(GPIOA, &GPIO_InitStructure);
//  GPIO_SetBits(GPIOA,GPIO_Pin_6);
//  GPIO_SetBits(GPIOA,GPIO_Pin_7);
////PWMA.PWMB
//  GPIO_InitStructure.GPIO_Pin =(GPIO_Pin_0 | GPIO_Pin_1);
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_Init(GPIOB, &GPIO_InitStructure);
//  GPIO_SetBits(GPIOB,GPIO_Pin_0);
//  GPIO_SetBits(GPIOB,GPIO_Pin_1);
    //U19,U119
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_ResetBits(GPIOC,GPIO_Pin_4);
//  GPIO_ResetBits(GPIOC,GPIO_Pin_5);  
 GPIO_SetBits(GPIOC,GPIO_Pin_5);

//J142
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;  //OC3N OC3
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  GPIO_ResetBits(GPIOE,GPIO_Pin_13);  //
}
回复 支持 反对

使用道具 举报

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
 楼主| 发表于 2014-4-28 20:28:58 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
硬件调试时如果地上噪声会影响中断么?测得300mv,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-28 22:31:44 | 显示全部楼层
回复【4楼】fangxiaoyanzhou:
---------------------------------
这个应该不会。
看你的代码,貌似没问题,主要是不能设置浮空输入。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
 楼主| 发表于 2014-4-29 09:05:54 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
那我再看硬件。。
回复 支持 反对

使用道具 举报

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
 楼主| 发表于 2014-4-29 12:51:31 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
老师,软件仿真正常能够说明配置没有问题么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-29 15:14:11 | 显示全部楼层
回复【7楼】fangxiaoyanzhou:
---------------------------------
基本上可以,不是100%的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
 楼主| 发表于 2014-4-29 17:07:56 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
明白了,jilnk调试pc8上升沿中断,实际上升沿、下降沿都中断。。慢慢找问题
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-10 10:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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