打印

STM32F4外部中断问题,求高手解答(寄存器操作的)

[复制链接]
4298|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rainsinging|  楼主 | 2013-7-8 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
外部中断初始化和中断如下,遇到的问题:
1、触发单个PB3或者PB4时,EXTI->PR有时显示外部中断3,4都发生,也的确进入外部中断3,4的子程序。由于优先级的关系,先进4,而我有清除EXTI->PR,所以进3后没执行if后的语句直接跳出来了。
2、我注释掉外部中断3或4的使能位,有时还会进入被注释掉的那个中断程序里
3、我注释掉外部中断线3或是4的屏蔽位,中断正常工作
求高手指点个方向,谢谢!

void EXTI_Init(void)
{
  SCB->AIRCR = 0x05AF0000 | 0x400;
/*****************PB ********************/
  RCC->AHB1ENR |= (1<<1);
  RCC->APB2ENR |= (1<<14);
  GPIOB->MODER &= ~(3<<8);
  GPIOB->MODER &= ~(3<<6);
  GPIOB->OTYPER &= 0xFFFFFFFF;
  GPIOB->OSPEEDR |= (3<<8);
  GPIOB->OSPEEDR |= (3<<6);
  SYSCFG->CMPCR |= (1<<0);
                              
  GPIOB->PUPDR |= 0x5<<6;
  GPIOB->BSRRH = 0xffff;
/***********************************************/
  EXTI->IMR=0;
  EXTI->IMR |= ( 1 << 4 );
  EXTI->FTSR |= ( 1 << 4 );
  SYSCFG->EXTICR[1] = 0x0000fff1;
  NVIC->IP[EXTI4_IRQn] = 0xc0;
  NVIC->ISER[0] |= (1<<10);   

  EXTI->IMR |= ( 1 << 3 );
  EXTI->FTSR |= ( 1 << 3 );
  SYSCFG->EXTICR[0] = 0x00001fff;
  NVIC->IP[EXTI3_IRQn] = 0xe0;
  NVIC->ISER[0] |= (1<<9);
}

u32 pr;
void EXTI3_IRQHandler(void)
{
  pr=EXTI->PR;
  if ((EXTI->PR & 0x00008) != 0)
  {
    EXTI->PR|=0x00008;
    pr=EXTI->PR;
  }
}
void EXTI4_IRQHandler(void)
{
  pr=EXTI->PR;
  if ((EXTI->PR & 0x00010) != 0)
  {
    EXTI->PR|=0x00010;
    pr=EXTI->PR;
  }
}
沙发
acm111mca| | 2013-7-8 23:12 | 只看该作者

本帖最后由 acm111mca 于 2013-7-8 23:48 编辑

你的中断处理代码貌似有问题啊,PR是对该位写1清标志或者读清空的哦,看《ST RM0090》(M4系列的编程手册) 9.3.6

void EXTI3_IRQHandler(void)
{
u32 EMR;
EMR =   EXTI->EMR;
   if ((EMR & 0x00008) != 0)
   {
     EXTI->PR=0x00008;
    EXTI->EMR &= ~0x00008;
}
}

中断4也这样写

使用特权

评论回复
板凳
airwill| | 2013-7-9 13:38 | 只看该作者
如果还不是高手, 建议还是用外设库吧
或者参考外设库里的操作来做寄存器操作.

使用特权

评论回复
地板
trumpxp| | 2013-7-9 18:30 | 只看该作者
直接调用库函数   应该会简单很多   个人的理解   顶一个

使用特权

评论回复
5
rainsinging|  楼主 | 2013-7-23 18:23 | 只看该作者
acm111mca 发表于 2013-7-8 23:12
你的中断处理代码貌似有问题啊,PR是对该位写1清标志或者读清空的哦,看《ST RM0090》(M4系列的编程手册) ...

你好,你的代码我试过了,还是不太对,我在中断进来的地方观察EXTI->PR,就有这样的情况:当只有触发中断3时,EXTI->PR=0x18,也就是3,4都触发了,不知道你有没有遇到这样的情况

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

80

帖子

0

粉丝