STM32按键实验

1.key.h

#ifndef _KEY_H
#define _KEY_H
#include "stm32f10x.h"

void KEY_INIT(void);

#endif

2.key.c

#include "key.h"
#include"stm32f10x.h"

void KEY_INIT(void)
{ GPIO_InitTypeDef    GPIO_InitStruct;
  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA , ENABLE);
    
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
    GPIO_Init(GPIOC, &GPIO_InitStruct);

  GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

}

3.led.h

#ifndef _LED_H
#define _LED_H
#include "stm32f10x.h"
void LED_Init(void);

#endif

4. led.c

#include "led.h"
#include "stm32f10x.h"

void LED_Init(void)
{
   GPIO_InitTypeDef   GPIO_InitStructure;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
    
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8 ;
     GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
     GPIO_Init( GPIOA, & GPIO_InitStructure);
     GPIO_SetBits(GPIOA,  GPIO_Pin_8);
    
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2 ;
     GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
     GPIO_Init( GPIOD, & GPIO_InitStructure);
     GPIO_SetBits(GPIOD,  GPIO_Pin_2);
     
}

5.mian.c

#include "stm32f10x.h"
#include"led.h"
#include "delay.h"
#include"key.h"
int main(void)
{
    LED_Init();
    delay_init();
    KEY_INIT();
    
    while(1)
    {
        if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5))
        {
            delay_ms(20);
            if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5))
            {GPIO_ResetBits(GPIOA, GPIO_Pin_8);
            
            }
      }
       else
         {
            GPIO_SetBits(GPIOA,  GPIO_Pin_8);
         }
    

    

if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15))
        {
            delay_ms(20);
            if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15))
            {GPIO_ResetBits(GPIOD, GPIO_Pin_2);
            
            }
      }
       else
         {
            GPIO_SetBits(GPIOD,  GPIO_Pin_2);
         }
    
     }

 }     
     

    6.对应关系

LED0   PA8;

LED1   PD2;

KEY0   PC5;

KEY1  PA15;

7.原理图

版权声明:本文为CSDN博主「艾伦13」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_55741528/article/details/121276425

生成海报
点赞 0

艾伦13

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

Lin总线通信在STM32作为主机代码以及从机程序

距离上次做资料准备已经过去六天了。最近在学车,上周末就没有开电脑。这周开始进行了Lin通信的代码整理,目前是可以正常通信的了,采用的是增强型校验方式。后期再进一步跟进研究。。。更新一博,留

4路红外循迹模块使用教程

4路红外循迹模块使用教程 个人原创博客:点击浏览模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1A以上电源供电 工作温度:-10℃~50℃ 安装孔

【STM32Cube笔记】12-配置外部中断

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配