No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)

简介: No.6 STM32F429IGT6 LED按键检测 按键点灯 (STM32F429/F767/H743)

原理图:

按键的四个引脚:

创建key.c和key.h文件

  1. 使能 GPIO 端口时钟;
  2. 初始化 GPIO 目标引脚为输入模式 (引脚默认电平受按键电路影响,浮空/上拉/下拉均没有区别);
  3. 编写简单测试程序,检测按键的状态,实现按键控制 LED 灯。

参考正点原子和野火

部分源代码

main.c

#include "sys.h"
#include "delay.h" 
#include "led.h"
#include "key.h"
int main(void)
{ 
  u8 key;
  Stm32_Clock_Init(360,25,2,8);//ÉèÖÃʱÖÓ,180Mhz
  delay_init(180);    //³õʼ»¯ÑÓʱº¯Êý
  LED_Init();       //³õʼ»¯LEDʱÖÓ
  KEY_Init();           //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  LED0=0;         //ÏȵãÁÁºìµÆ  
  while(1)
  {
    key=KEY_Scan(0);  //µÃµ½¼üÖµ
      if(key)
    {              
      switch(key)
      {        
        case WKUP_PRES: //¿ØÖÆLED0,LED1»¥³âµãÁÁ
          LED1=!LED1;
          LED0=!LED1;
          break;
        case KEY2_PRES: //¿ØÖÆLED0·­×ª
          LED0=!LED0;
          break;
        case KEY1_PRES: //¿ØÖÆLED1·­×ª   
          LED1=!LED1;
          break;
        case KEY0_PRES: //ͬʱ¿ØÖÆLED0,LED1·­×ª 
          LED0=!LED0;
          LED1=!LED1;
          break;
      }
    }else delay_ms(10); 
  }
}

key.c

#include "key.h"
#include "delay.h" 
//°´¼ü³õʼ»¯º¯Êý
void KEY_Init(void)
{
  RCC->AHB1ENR|=1<<0;    
  RCC->AHB1ENR|=1<<2;     
  RCC->AHB1ENR|=1<<7;     
  GPIO_Set(GPIOA,PIN0,GPIO_MODE_IN,0,0,GPIO_PUPD_PD);       
  GPIO_Set(GPIOC,PIN13,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);      
  GPIO_Set(GPIOH,PIN2|PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);    
} 
u8 KEY_Scan(u8 mode)
{  
  static u8 key_up=1;
  if(mode)key_up=1;   
  if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
  {
    delay_ms(10);//È¥¶¶¶¯ 
    key_up=0;
    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)key_up=1;      
  return 0;
}

key.h

#ifndef __KEY_H
#define __KEY_H  
#include "sys.h" 
#define KEY0    PHin(3)     //PH3
#define KEY1    PHin(2)   //PH2 
#define KEY2    PCin(13)  //PC13
#define WK_UP     PAin(0)   //PA0 
#define KEY0_PRES   1 //KEY0
#define KEY1_PRES 2 //KEY1
#define KEY2_PRES 3 //KEY2
#define WKUP_PRES   4 //KEY_UP
void KEY_Init(void);  //IO
u8 KEY_Scan(u8);         
#endif


相关文章
|
1月前
stm32学习 3-2 LED流水灯
stm32学习 3-2 LED流水灯
69 4
|
1月前
stm32学习3-1 LED闪烁
stm32学习3-1 LED闪烁
34 4
|
4月前
STM32CubeMX FreeRTOS点亮LED
STM32CubeMX FreeRTOS点亮LED
78 10
|
4月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
69 0
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
428 2
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
694 0
|
6月前
|
传感器
STM32标准库ADC和DMA知识点总结-1
STM32标准库ADC和DMA知识点总结
|
5月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
503 4
|
5月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
674 2