完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
最近做项目,按键比较多,所以需要外部中断也比较多。比如,PA3和PC3占用一个中断线,我设置完后,后面设置的中断会覆盖前面设置的。这种一个中短线配置多个中断的问题应该怎么配置呢?还是跟优先级有关?可是,每个按键的优先级不是一样的吗?
|
|
相关推荐
16个回答
|
|
|
没做过这个,但是你怎么判断后面设置的中断会覆盖前面设置的,毕竟即使时同一个中断,产生中断得引脚时不一样得,这种情况应该跟51的中断扩展类似,多个中断源使用同一个中断时,进入中断后,需要判断时哪个中断源产生的中断。
|
|
|
|
|
人中狼 发表于 2017-11-29 10:13 因为我设置的前面的中断不起作用,比如我配置时先配置了PA3中断,又配置了PC3中断,PA3对应按键不起作用,PC3起作用。而我单独配置PA3时是起作用的。PA3和PC3公用一条中断线,由此判断PC3的配置覆盖了PA3的 |
|
|
|
|
人中狼 发表于 2017-11-29 10:13 您有什么好的方法吗? |
|
|
|
|
|
/** * @Brief This function handles EXTI line 0 and 1 interrupts. */ void EXTI0_1_IRQHandler(void) { /* USER CODE BEGIN EXTI0_1_IRQn 0 */ /* USER CODE END EXTI0_1_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); /* USER CODE BEGIN EXTI0_1_IRQn 1 */ /* USER CODE END EXTI0_1_IRQn 1 */ } /** * @brief Handle EXTI interrupt request. * @param GPIO_Pin Specifies the port pin connected to corresponding EXTI line. * @retval None */ void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) { /* EXTI line interrupt detected */ if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) { HAL_GPIO_EXTI_Callback(GPIO_Pin); __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); } } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==GPIO_PIN_0) { App.KEY_VALUE=Button_Function; } if(GPIO_Pin==GPIO_PIN_1) { App.KEY_VALUE=Button_Power; } // delay_ms(20); // Button_Process(); // xSemaphoreGiveFromISR(Semaphore_Button,NULL); } 看上面3个函数 同一条中断线进来后判断是哪一个引脚发生中断时是第二个函数完成的,如果该引脚发生的中断就调用第3个函数进行处理 |
|
|
|
|
|
PA3和PC3只能有一个占用中断线。
|
|
|
|
|
|
你的判断方法应该还是不能说明先设置的中断被覆盖了,你需要判断的是PA3和PC3的按键是否都进入了中断程序,如果进入了中断程序,而没有判断到按键,那就是程序的问题了。
|
|
|
|
|
|
|
|
人中狼 发表于 2017-11-29 13:15 亲测先设置PA3,再设置PC3,按PA3对应按键,进不了中断,PC3可以 |
|
|
|
|
|
|
|
|
|
|
|
那只能改线路或换其他的方法了,这个可能跟芯片的内部设计有关,查看芯片资料的AFIO_EXTICR1寄存器和External interrupt/event GPIO mapping,似乎硬件上同一编号的引脚只能选择一个。
|
|
|
|
|
|
因为我有些键是按键,有些是拨断开关,所以没法设计矩阵键盘。 |
|
|
|
|
|
本帖最后由 zhifubao 于 2017-11-29 16:25 编辑
最多支持16个引脚中断,有一个原则是假设你使用了PA1那么其他下标为1的引脚就不能使用,不如PB1、PC1就不能再用于引脚中断。 |
|
|
|
|
|
嗯嗯,谢谢啦 |
|
|
|
|
|
路过学习,顶起来
|
|
|
|
|
|
哥们,你要想实现这个功能,得要在外部添加一个多输入或门才行啊。你要想实现16个以上的外部中断响应,得要额外添加硬件啊
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16899 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 21:00 , Processed in 1.116365 second(s), Total 72, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2053