高级会员

- 积分
- 680
- 金钱
- 680
- 注册时间
- 2013-8-16
- 在线时间
- 37 小时
|
5金钱
大家好,我遇到一个问题想请教一下大家。我使用正点原子mini开发板做了个外部中断的实验,选用的是第32和第33个引脚分别作为按键1,按键2的IO口------PB12,PB3.这两个IO口除去作为通用IO口外,都有复用功能。
PB12功能(包含复用功能)为:PB12/SPI2_NSS/I2S2_WS/I2C2_SMBAI/TIM1_BKIN;
PB13功能(包含服用功能)为:PB13/SPI2_SCK/I2S2_CK/TIM1_CH1N。
可是按按键不能进入外部中断服务程序,不知道是什么原因,下面是我的代码,还请知道原因的大哥能够指点一二,谢谢。
代码:
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟
KEY_Init();//初始化按键对应io模式
//GPIOB.12 中断线以及中断初始化配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12);
EXTI_InitStructure.EXTI_Line=EXTI_Line12;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//GPIOB.13 中断线以及中断初始化配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,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); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
if(EXTI_GetITStatus(EXTI_Line12) != RESET)
{
sei();
GPIOD->ODR^=0x04; //led灯1随着按键1的按动亮灭
EXTI_ClearITPendingBit(EXTI_Line12);
}
else if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
sei();
GPIOD->ODR^=0x08; //led灯2随着按键2的按动亮灭
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PORTB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12| GPIO_Pin_13;//PB12,PB13
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PB12,PB13设置成输入,默认下拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB2,PB3
}
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
EXTIX_Init(); //外部中断初始化
while(1)
{
}
}
|
|