butterflyspring 发表于 2018-4-2 10:17
中断首先需要各个时钟开启,GPIO功能使能,中断开启,优先级开启.实在找不到,先调试好的代码,查看寄存器,再调 ...
谢谢,按照这个思路我再查查
select326 发表于 2018-4-2 10:09
我是新手,还请指点
void EXT0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
wenyangzeng 发表于 2018-4-2 10:52
void EXT0_IRQHandler(void)
{
void EXTI4_IRQHandler(void)
{
delay_ms(10);//消抖
EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位
}
我在这里面打断点,无法触发按键没任何响应。。。
select326 发表于 2018-4-2 11:26
void EXTI4_IRQHandler(void)
{
delay_ms(10);//消抖
EXTI_GenerateSWInterrupt(EXTI_Line4);
就可以判断EXTI4中断配置是否正确
select326 发表于 2018-4-2 11:26
void EXTI4_IRQHandler(void)
{
delay_ms(10);//消抖
牛逼。。。中断里面硬件延时10ms。。。膜拜!!!
本帖最后由 select326 于 2018-4-2 13:10 编辑
MrJiu 发表于 2018-4-2 11:56
牛逼。。。中断里面硬件延时10ms。。。膜拜!!!
问题是,都不执行中断里面的代码。。。。
再说了,从正点原子拿的例子拿的代码
while(1)里边就一个延时函数吗?
想进入中断的话我觉得while里边起码要有个判断按键按下的函数吧,要记得加上消抖。
中断中延时10ms,这个不应该。但是你说的不进中断,那可能另有问题。
void EXTI4_IRQHandler(void)
{
delay_ms(10);//消抖
EXTI_ClearITPendingBit(EXTI_Line4);//清除LINE4上的中断标志位
}
经过查看你的程序,你的外部中断使能在哪里?
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
加上使能试试,见下图。
toofree 发表于 2018-4-2 23:16
中断中延时10ms,这个不应该。但是你说的不进中断,那可能另有问题。
void EXTI4_IRQHandler(void)
{
这个确实没有。但是,正点原子的例子是可以执行的。
后来我比较了下,我发下一个RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
有这句,中断就能执行,没有的话,原子的例子也不能中断。很奇怪,串口和中断有什么关系?
按键这不执行简单得就两个问题:
1、中断未打开;
2、中断开错了;
如果深入你会发现还有一个问题会造成无按键中断产生:
就是中断的映射位与其他中断映射位冲突。