野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12843|回复: 4

这个exti中断是怎么回事,一嗯按键就死机,大家来看看

[复制链接]
发表于 2015-3-23 20:51:19 | 显示全部楼层 |阅读模式
写了个外部中断的代码,使用的是ISO-MINI-V2的按键KEY2,接的是PC13,下载的例程倒是能用,自己参照书上写的,几乎和例程一模一样,可一摁KEY2,就想死机了一样,程序卡着不走了,先贴代码给大家看看:
#include "exti.h"

void NVIC_Configuration()
{
        NVIC_InitTypeDef NVIC_InitStructure;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
       
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

//PC13
void exti_init()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
        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 EXIT15_10_IRQHandler(void)
{
        delay_ms(20);
        if(EXTI_GetITStatus(EXTI_Line13) != RESET)
        {
                delay_ms(20);
                if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
                {
                        GPIO_WriteBit(GPIOB, GPIO_Pin_0, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_0)));
                }
                EXTI_ClearITPendingBit(EXTI_Line13);
        }
}

void init()
{
        delay_init(72);
        led_init();
        exti_init();
        NVIC_Configuration();
}

int main(void)
{
        init();
        __set_PRIMASK(0);
       
          while(1)
        {
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                delay_s(1);
                GPIO_ResetBits(GPIOB, GPIO_Pin_0);
                delay_s(1);
        }
          /* add your code here ^_^. */
}


调试的时候发现根本就没进中断,本来led在闪烁的只要一按按键,立马就停了,感觉就是程序卡在一个地方不走了,望大家帮忙找下原因。
回复

使用道具 举报

发表于 2015-3-24 09:06:35 | 显示全部楼层
一看,感觉没问题啊。。看不出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-24 09:22:58 | 显示全部楼层
flyleaf 发表于 2015-3-24 09:06
一看,感觉没问题啊。。看不出来

昨天都被搞糊涂了,还是早上比较清醒,其实是中断函数名这里写错了EXIT15_10_IRQHandler,应该是EXTI15_10_IRQHandler,把EXTI写成了EXIT,真无语,我也是醉了
回复 支持 反对

使用道具 举报

发表于 2015-3-24 10:08:37 | 显示全部楼层
漩涡哲 发表于 2015-3-24 09:22
昨天都被搞糊涂了,还是早上比较清醒,其实是中断函数名这里写错了EXIT15_10_IRQHandler,应该是EXTI15_1 ...

写错了能编译通过?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-24 13:56:37 | 显示全部楼层
flyleaf 发表于 2015-3-24 10:08
写错了能编译通过?

库有默认的中断函数名,必须重写这个函数才能进入中断执行中断函数,写错的话编译器就可能把他当成一个普通函数,所以没报错
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-30 03:34 , Processed in 0.060134 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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