完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在开发板上有四个按键,我四个按键处理都是用中断方式来处理的。烧进板子之后发现只有最高级的按键反应是灵敏的,每次按都会有串口输出,其他三个按键很迟钝,而且这几个按键随机乱按之后还会出现死机的情况,不知道是为什么?麻烦知道的帮小弟解决一下,不胜感激。。。按键回调函数代码如下
void HAL_GPIO_EXti_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==KEY_UP_Pin) { HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */ if(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==1) { printf("°´ÏµļüÊÇKEY_UPn"); while(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==1); } __HAL_GPIO_EXTI_CLEAR_IT(KEY_UP_Pin); } if(GPIO_Pin==KEY0_Pin) { HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */ if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)==1) { printf("°´ÏµļüÊÇKEY0n"); while(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)==1); } __HAL_GPIO_EXTI_CLEAR_IT(KEY0_Pin); } if(GPIO_Pin==KEY1_Pin) { HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */ if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==1) { printf("°´ÏµļüÊÇKEY1n"); while(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==1); } __HAL_GPIO_EXTI_CLEAR_IT(KEY1_Pin); } if(GPIO_Pin==KEY2_Pin) { HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */ if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==1) { printf("°´ÏµļüÊÇKEY2n"); while(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==1); } __HAL_GPIO_EXTI_CLEAR_IT(KEY2_Pin); } } |
|
相关推荐
7个回答
|
|
其中KEY_UP的中断优先级最高,代码中的printf内容拷贝时显示出来问题,但是不影响看代码吧
|
|
|
|
在线等大神帮忙解决。。。
|
|
|
|
|
|
|
|
我是等待它松开。我刚刚看见你说的这里联想到了,KEY_UP和KEY0,KEY1,KEY2不同,后面这三个按键是按下为低电平,前面那个按下为高电平。要把后面的读取值等于0就好了。还是谢谢大神,这么细心的为每位解答。。。 |
|
|
|
我刚改了试了,就是这个问题,高低电平弄反了 |
|
|
|
乱码了
|
|
|
|
注意看手册,PA0是高电平有效。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1470 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1405 浏览 3 评论
3150 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1543 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1975 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 08:39 , Processed in 0.665638 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号