完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本节通过按键处理led来演示IO输入模式的配置
1、根据原理图按键找到对应的引脚 2、打开cubemx选择对应的芯片创建工程 3、配置系统时钟,打开外部高速时钟,配置时钟频率为72MHz 4、按键对应的引脚模式配置为输入模式 5、这里还要打开led用来做效果 6、根据原理图可知按键均是低电平触发(高电平触发的引脚这里没有展示,只需要反转后面的配置即可) 7、对于低电平触发的按键我们要将IO口配置为上拉模式(对于高电平触发的按键要配置成下拉模式) 8、生成工程,打开工程,在gpio.c文件里面添加下面的函数 uint8_t KEY_Scan(uint8_t bu_sign) { static uint8_t sign=1; if(bu_sign) //支持连按 sign=1; if((sign==1)&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)) { HAL_Delay(10); sign=0; if(KEY0==0||KEY1==0||KEY2==0||WK_UP==1) { if(KEY0==0) return 1; else if(KEY1==0) return 2; else if(KEY2==0) return 3; else if(WK_UP==1) return 4; } } else if(KEY0==1||KEY1==1||KEY2==1||WK_UP==0) sign=1; return 0; } 9、在gpio.h文件里面添加图示宏定义以及函数声明 #define KEY0 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4) #define KEY1 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3) #define KEY2 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2) #define WK_UP HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) uint8_t KEY_Scan(uint8_t bu_sign); 10、主函数如图所示 uint8_t key; key=KEY_Scan(0); if(key) switch(key) { case 1:HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET); break; case 2:HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); break; case3:HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET); break; case4:HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); break; default:break; } 11、烧录进单片机即可观察现象啦。 |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
3366 浏览 0 评论
3370 浏览 9 评论
3063 浏览 16 评论
3553 浏览 1 评论
9186 浏览 16 评论
1305浏览 3评论
671浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
666浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2413浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1978浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-25 05:04 , Processed in 1.180229 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191