你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F429IGT6 LED按键检测 按键点灯(STM32F429/F767/H743)

[复制链接]
STMCU小助手 发布时间:2022-5-7 17:47
原理图:

aea25a6c1fc342c58e408d21ac9b5de3.png

按键的四个引脚:

30f64442efd94cfc813ec3dff8a81c83.png
040bca4c28954cfca5161687a628ad13.png

62feb47decd14b79a8bcdaa866f3be41.png

创建key.c和key.h文件

使能 GPIO 端口时钟;
初始化 GPIO 目标引脚为输入模式 (引脚默认电平受按键电路影响,浮空/上拉/下拉均没有区别);
编写简单测试程序,检测按键的状态,实现按键控制 LED 灯。
参考正点原子和野火
部分源代码

main.c

  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "led.h"
  4. #include "key.h"


  5. int main(void)
  6. {
  7.         u8 key;
  8.         Stm32_Clock_Init(360,25,2,8);//ÉèÖÃʱÖÓ,180Mhz
  9.         delay_init(180);                //³õʼ»¯ÑÓʱº¯Êý
  10.         LED_Init();                                //³õʼ»¯LEDʱÖÓ
  11.         KEY_Init();                 //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  12.         LED0=0;                                        //ÏȵãÁÁºìµÆ  
  13.         while(1)
  14.         {
  15.                 key=KEY_Scan(0);         //µÃµ½¼üÖµ
  16.                    if(key)
  17.                 {                                                   
  18.                         switch(key)
  19.                         {                                 
  20.                                 case WKUP_PRES:        //¿ØÖÆLED0,LED1»¥³âµãÁÁ
  21.                                         LED1=!LED1;
  22.                                         LED0=!LED1;
  23.                                         break;
  24.                                 case KEY2_PRES:        //¿ØÖÆLED0·­×ª
  25.                                         LED0=!LED0;
  26.                                         break;
  27.                                 case KEY1_PRES:        //¿ØÖÆLED1·­×ª         
  28.                                         LED1=!LED1;
  29.                                         break;
  30.                                 case KEY0_PRES:        //ͬʱ¿ØÖÆLED0,LED1·­×ª
  31.                                         LED0=!LED0;
  32.                                         LED1=!LED1;
  33.                                         break;
  34.                         }
  35.                 }else delay_ms(10);
  36.         }
  37. }
复制代码

key.c

  1. #include "key.h"
  2. #include "delay.h"

  3. //°´¼ü³õʼ»¯º¯Êý
  4. void KEY_Init(void)
  5. {
  6.         RCC->AHB1ENR|=1<<0;   
  7.         RCC->AHB1ENR|=1<<2;     
  8.         RCC->AHB1ENR|=1<<7;     
  9.         GPIO_Set(GPIOA,PIN0,GPIO_MODE_IN,0,0,GPIO_PUPD_PD);                        
  10.         GPIO_Set(GPIOC,PIN13,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);                        
  11.         GPIO_Set(GPIOH,PIN2|PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);               
  12. }

  13. u8 KEY_Scan(u8 mode)
  14. {         
  15.         static u8 key_up=1;
  16.         if(mode)key_up=1;   
  17.         if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
  18.         {
  19.                 delay_ms(10);//È¥¶¶¶¯
  20.                 key_up=0;
  21.                 if(KEY0==0)return 1;
  22.                 else if(KEY1==0)return 2;
  23.                 else if(KEY2==0)return 3;
  24.                 else if(WK_UP==1)return 4;
  25.         }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;            
  26.          return 0;
  27. }
复制代码

key.h

  1. #ifndef __KEY_H
  2. #define __KEY_H         
  3. #include "sys.h"



  4. #define KEY0                 PHin(3)           //PH3
  5. #define KEY1                 PHin(2)                //PH2
  6. #define KEY2                 PCin(13)        //PC13
  7. #define WK_UP                 PAin(0)                //PA0

  8. #define KEY0_PRES         1        //KEY0
  9. #define KEY1_PRES        2        //KEY1
  10. #define KEY2_PRES        3        //KEY2
  11. #define WKUP_PRES   4        //KEY_UP

  12. void KEY_Init(void);        //IO
  13. u8 KEY_Scan(u8);                     
  14. #endif

复制代码



收藏 评论0 发布时间:2022-5-7 17:47

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版