完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
按键检测
CubeMX的操作 普通按键检测的I/O口设置
注意,该配置的I/O口也可以使用普通的按键检测。Keil5的操作 普通按键检测
如果是编写一个按键检测函数,可以在第3步检测到后将标志变量变为有效,而不是真的去执行应该执行的操作。按键检测函数例程: /** * @brief 检测按键是否按下 * @param Key_Port是按键对应的IO口端口;Key_Pin是按键对应的IO口编号;Level是按键按下对应的电平状态 * @retval 如果按下返回1,如果没有按下返回0 */ uint16_t Key_Detection(GPIO_TypeDef * Key_Port, uint16_t Key_Pin, GPIO_PinState Level) { uint16_t Key_State = 0; if(Level == HAL_GPIO_ReadPin(Key_Port,Key_Pin)) { HAL_Delay(15); if(Level == HAL_GPIO_ReadPin(Key_Port,Key_Pin)) { Key_State = 1; } while(Level == HAL_GPIO_ReadPin(Key_Port,Key_Pin)); } return Key_State; } 外部中断的按键检测
应当注意,所有的外部中断使用同一个回调函数,通过传入参数(IO口编号)的不同来分辨是哪个外部中断被触发。另外,外部中断无法去抖,一般单片机的外部中断输入段都会进行硬件去抖,但如果它还无法消抖,那就自己对按键进行硬件消抖。按键检测并亮灯的例程: /** * @brief 这是外部中断的回调函数,功能为按键控制LED灯,并保存灯的亮灭状态。 * 使用之前需要将三个按键分别设置别名“Key1”、“Key2”和“Key3”,LED设置为“Led2”和"Led3"。 * 按键1控制LED2,按键2控制LED3,按键3熄灭两盏LED。 * 两个外部变量是用来记录LED灯状态的,应该放在主函数所在文件中作为全局变量。 */ >extern uint16_t led2_state, led3_state; void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == Key1_Pin) { if(1 == led2_state) { HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET); led2_state=0; } else if(0 == led2_state) { HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET); led2_state=1; } } if(GPIO_Pin == Key2_Pin) { if(1 == led3_state) { HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET); led3_state=0; } else if(0 == led3_state) { HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET); led3_state=1; } } if(GPIO_Pin == Key3_Pin) { led2_state = 0; led3_state = 0; HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 22:34 , Processed in 0.917841 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号