完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
PB12~15四个没有一个能用,单单中断服务都进不去,
中断分组是这样: NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 按键初始化这样: void KEY_Init(void) //IO初始化 { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PORTB时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//KEY0-KEY3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB 12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//KEY0-KEY3 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;//KEY0-KEY3 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//KEY0-KEY3 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB 15 } 中断初始化这样: void EXtiX_Init(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; KEY_Init(); // 按键端口初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟 //GPIOB.12 中断线以及中断初始化配置 下降沿触发 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12); EXTI_InitStructure.EXTI_Line=EXTI_Line12; //KEY0 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寄存器 //GPIOB13 中断线以及中断初始化配置 下降沿触发 //KEY1 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寄存器 //GPIOB14 中断线以及中断初始化配置 下降沿触发 //KEY2 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14); EXTI_InitStructure.EXTI_Line=EXTI_Line14; 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寄存器 //GPIOB15 中断线以及中断初始化配置 //KEY3 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource15); EXTI_InitStructure.EXTI_Line=EXTI_Line15; 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; //使能按键WK_UP所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; //抢占优先级1, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); } 中断服务这样: void EXTI15_10_IRQnHandler(void) { FMQ = 1; //这个不响!!!,分明是进不来中断 if(EXTI_GetITStatus (EXTI_Line12) != RESET) { FMQ = 1; delay_ms(1000); FMQ = 0; EXTI_ClearITPendingBit(EXTI_Line12); //清除LINE0上的中断标志位 } if(EXTI_GetITStatus (EXTI_Line13) != RESET) { FMQ = 1; delay_ms(1000); FMQ = 0; EXTI_ClearITPendingBit(EXTI_Line13); //清除LINE0上的中断标志位 } if(EXTI_GetITStatus (EXTI_Line14) != RESET) { FMQ = 1; delay_ms(1000); FMQ = 0; EXTI_ClearITPendingBit(EXTI_Line14); //清除LINE0上的中断标志位 } if(EXTI_GetITStatus (EXTI_Line15) != RESET) { FMQ = 1; delay_ms(1000); FMQ = 0; EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中断标志位 } } |
|
相关推荐
1 条评论
1个回答
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1950 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1809 浏览 3 评论
4389 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1960 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2463 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:30 , Processed in 0.549376 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号