我的程序是用的是PE.5口
PE_DDR &= ~0x20; //PE.5 //设置为输入
PE_CR1 |= 0x20;//上拉输入
PE_CR2 |= 0x20; //允许中断
EXTI_CR2 &=~MASK_EXTI_CR2_PEIS; //MASK_EXTI_CR2_PEIS =0x03
EXTI_CR2 |=0x01; //仅上升沿触发。
这样配置后,我把PE.5口拉低,程序就一直进入
#pragma vector=9
__interrupt void EXTI_PORTE_IRQHandler(void)
{
}
这个函数。这是为什么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
我调试发现,EXTI_CR2一直为0x00,配置时根本写不进去。EXTI_CR2为0x00,为下降沿和低电平触发中断,所以它一直进入中断服务函数。我在初始化前后加了asm("sim")和asm("rim")。才能改变EXTI_CR2的值。 但是前面不加这两个语句怎么可以改变EXTI_CR1的值?
---------------------------------
我上面的代码是用库函数写的,如果你用的是寄存器的话,可以再中断函数里面这样写:
GPIOx->CR2=0X00;//禁止外部中断
EXTI->SR1=0X00;//清理中断标志位
GPIOx->CR2=0X00;//禁止外部中断
---------------------------------
嗯,应该是这样的。要修改,得关掉中断,改完后在打开。
一周热门 更多>