`
anlx27
  • 浏览: 496119 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

stm32 检测到按键按下 灯亮 否则灯不亮

阅读更多

/****************************************************************************

* File Name          : key_led.c.c
* Author               : MCD Application Team
* FW Version        : V2.0.1
* Date                  : 06/11/2012

* Description        : This file provides all the RCC firmware functions.

*开发板                  :神舟三号

* 现象                    :如程序执行前按住按键USER2 LED亮起,没按则灯不亮
*****************************************************************************

*/

 

#include "stm32f10x_lib.h"


/////////////   define LED   ///////////////
#define  RCC_GPIO_LED               RCC_APB2Periph_GPIOF
#define  GPIO_LED                     GPIOF
#define  GPIO_LED_PIN         GPIO_Pin_6

 

/////////////   define KEY   ///////////////
#define  RCC_GPIO_KEY       RCC_APB2Periph_GPIOD
#define  GPIO_KEY      GPIOD
#define  GPIO_KEY_PIN                    GPIO_Pin_3

 

/////////////   define Beep  ///////////////
#define  RCC_GPIO_BEEP                RCC_APB2Periph_GPIOB
#define  GPIO_BEEP                    GPIOB
#define  GPIO_BEEP_PIN                GPIO_Pin_10

 

/////////////   config LED   ///////////////
void LED_Config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

// RCC_ABP2PeriphClockCmd(RCC_GPIO_LED,ENABLE);


 GPIO_InitStructure.GPIO_Pin =  GPIO_LED_PIN;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

// GPIO_SetBits(GPIO_LED,GPIO_LED_PIN); //初始化完成才能使用输出功能
 GPIO_Init(GPIO_LED, &GPIO_InitStructure);

 GPIO_SetBits(GPIO_LED,GPIO_LED_PIN);

}

void LED_Turn_on(void)
{
 GPIO_ResetBits(GPIO_LED,GPIO_LED_PIN);
}

void LED_Turn_off(void)
{
 GPIO_SetBits(GPIO_LED,GPIO_LED_PIN);
}

 

 

/////////////   config KEY   ///////////////
void KEY_Config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;

// RCC_ABP2PeriphClockCmd(RCC_GPIO_KEY,ENABLE);

 GPIO_InitStructure.GPIO_Pin =  GPIO_KEY_PIN;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//需要配置速率

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

 GPIO_Init(GPIO_KEY, &GPIO_InitStructure);
}

int Is_KeyDown(void)
{
 if( !GPIO_ReadInputDataBit(GPIO_KEY,GPIO_KEY_PIN) )
 {
  return  1 ;
 }
 else
     return 0  ;
}

 

/////// RccConfig///////
void RccConfiguration(void)
{
  ErrorStatus HSEStartUpStatus;

  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);     //启动外部晶体震荡器

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待启动完成

  if(HSEStartUpStatus == SUCCESS)   //如果启动成功,继续配置系统频率
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//选择flash预取址缓存模式

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2); //设置flash存储器延时时钟周期数
 
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);  //设置HCLK相对SYSCLK的分频比例  AHB时钟
 
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);   //设置PCLK2相对SYSCLK的分频比例  设置高速AHB时钟

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);   

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);//启动PLL

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08) 
    {
    }
  }
    
  RCC_APB2PeriphClockCmd(RCC_GPIO_LED,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_GPIO_KEY,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_GPIO_BEEP,ENABLE);
}

 

 

//////// NvicConfig//////////

void NvicConfiguration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif

}

void ConfigureInterfaces(void)
{     
    /* System Clocks Configuration */
    RccConfiguration();          //配置系统时钟   
      
    /* NVIC configuration */
    NvicConfiguration();   //设置向量入口

}
                   


int main(void)
{
 ConfigureInterfaces();

 LED_Config();
 KEY_Config();

 while(1)
 {
    if(Is_KeyDown()==1)
    {
         LED_Turn_on(); 
    }
    else
    {
         LED_Turn_off(); 
    }
 }
}

 

分享到:
评论

相关推荐

    STM32 GPIO端口进行按键检测.zip

    3. 检测按键:循环检查GPIO状态,当检测到按键由高变低(按键按下)或由低变高(按键释放)时,调用消抖处理函数。 4. 处理按键事件:根据检测到的GPIO状态变化,判断是哪个按键被按下或释放,并执行相应操作,如...

    单片机按键控制LED亮灭

    例如,`JNB P1.0,$` 检查P1.0位是否为低,如果是,跳转到下一行,否则停留在当前位置,等待按键按下。`JNB F0,LL0` 检查标志位F0是否为低,如果为低,则执行LED控制代码。这里,`MOV P0,#0F0H` 将P0口的第0位设为低...

    STM32-按键输入实验学习笔记

    为了解决这个问题,通常会在检测到按键变化后延迟一段时间再重新检测按键状态,确保按键信号稳定。在实验中,使用了`delay_ms(10)`来进行去抖处理。 ##### 4.2 按键优先级设置 在本实验中,通过设置按键的响应...

    STM32F407 开发例程之按键LED

    - 为了检测按键是否被按下,我们需要在主循环中不断检查按键GPIO引脚的状态。如果检测到输入变为低电平,说明按键被按下。 - 防抖动处理:由于机械按键的抖动,可能导致误触发。可以使用软件延时或中断配合标志位...

    基于有限状态机的STM32系统按键识别方法.pdf

    结合有限状态机的按键扫描方法,通常将按键操作过程划分为若干个稳定的状态,如“等待按键动作”、“检测到按键按下”、“检测到按键释放”等。在每个状态下,系统会判断特定事件(如时间阈值到达、按键位置变化等)...

    状态机+定时器方法实现按键

    每个状态都有相应的转换条件,例如当检测到按键触发事件时,状态机就会从“无按键按下”状态转换到“按键按下”状态。 二、定时器的作用 在STM32中,定时器被广泛用来处理时间相关的任务,如周期性事件、延迟或中断...

    stm32F103ZET6简易去抖

    例如,可以使用TIM模块来设置一个定时器,当检测到按键按下时启动定时器,如果在设定的时间内按键状态持续不变,则认为是有效的按键动作。 在实际应用中,开发STM32F103ZET6时通常需要以下步骤: 1. 硬件连接:将...

    1,STM32F4xx标准例程.zip_32f4例程_STM32F446例程_STM32F4XX_stm32f4xx_fsmc.

    2. **按键实验**:此实验涉及到GPIO输入和中断处理,当用户按下按键时,MCU能够检测到并作出响应,可能是点亮或熄灭LED,或者执行其他操作。 3. **串口实验**:串行通信是嵌入式系统中常见的数据传输方式。STM32F4...

    STM32矩阵键盘实现方法收集.doc

    在本文中,我们将深入探讨如何在STM32单片机上使用C语言来实现一个4x4矩阵键盘,该键盘不依赖外部中断,并且支持多键同时按下。 首先,矩阵键盘是一种节省引脚资源的键盘设计方式,它将按键排成行和列的阵列,通常...

    3 key_threelines_key_三行按键_STM32F103_按键_

    STM32F103的GPIO端口可以配置为输入或输出模式,对于按键应用,我们通常将其设置为输入并启用上拉电阻,这样当按键未按下时,GPIO读取到的是高电平,按下时变为低电平。 实现三行按键检测的核心在于中断服务程序和...

    基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线 毕业设计

    本设计由STM32F103C8T6单片机核心板电路+心率传感器电路+报警电路+按键+TFT彩屏组成。 功能描述: 1、TFT液晶实时显示心率值。 2、TFT液晶实时显示采集到的的模拟信号的曲线图,直接显示心率变化曲线。 3、通过按键...

    STM32F407 SD卡IAP升级

    - **检测按键**:系统上电后,检查PA0状态,若按键按下,则进入IAP升级流程。 - **SD卡初始化**:初始化SD卡控制器,建立与卡的连接。 - **读取IAP.bin**:从SD卡读取IAP升级文件到RAM。 - **擦除Flash**:根据...

    STM32F103AT24C02V

    在STM32中,需要确保连续写入的数据不超过一页的大小,否则可能会覆盖到其他数据。 在实际应用中,开发者需要编写相应的驱动代码来实现这些操作,包括初始化I2C接口、设置数据传输速率、处理中断、错误检测等。例如...

    STM32 矩阵键盘扫描实验

    4. **处理中断**:在STM32中,可以利用中断处理按键的按下和释放事件。当检测到行线状态变化时,触发中断服务程序,根据行线和列线的组合确定按键编号,并进行相应操作。 5. **去抖动**:由于机械开关的接触抖动,...

    按键长按、短按、双击检测。

    此外,为了防止按键抖动带来的误操作,通常会在检测到按键按下后加入一小段延时,确保按键状态稳定后再进行后续处理。 总的来说,通过状态机实现的按键检测方案具有良好的可扩展性和灵活性,能够有效地处理各种按键...

    STM32L151串口、IO输入、输出例程

    STM32L151是意法半导体(STMicroelectronics)推出的一款超低功耗的微控制器,属于STM32L系列,基于ARM Cortex-M3内核。在嵌入式开发中,掌握串口通信和GPIO(通用输入/输出)的操作是基础且重要的技能。下面我们将...

    STM32之USB固件升级_IAP_USB程序升级_上位机软件操作

    当设备检测到特定条件(如按键按下),将自动切换至IAP模式,等待接收来自上位机的固件更新数据。一旦升级完成,IAP程序会将控制权交还给新版本的用户应用程序。 - **用户应用程序(APP)**:这是设备的主要功能...

    基于STM32设计的智慧路灯(腾讯云IOT)(233).zip

    (9)有人求救按下设备上的SOS按键,微信小程序页面会显示求救信息 并显示定位信息 (11)在微信小程序上可以显示,环境的温度、环境湿度、空气质量、光强强度、路灯的开关状态。 (12)在微信小程序上可以切换路灯...

Global site tag (gtag.js) - Google Analytics