2025年4月11日 星期五 乙巳(蛇)年 正月十二 设为首页 加入收藏
rss
您当前的位置:首页 > 电子 > 电气软件

STM32F407 GPIO口输入配置配置步骤

时间:11-09来源:作者:点击数:36
CDSY,CDSY.XYZ

介绍STM32F407新建寄存器工程流程,介绍输入模式的配置方式,以按键为例完成按键输入检测。

【1】F407建工程所需依赖文件

img
img
img
img
img
img

【2】新建工程

img
img
img
img
img
img
img
img
img
img
img

【3】分析KEY按键硬件原理图

img
img
img

【4】编写KEY按键驱动代码

查看数据手册:

img
img

key.c文件代码如下:

  • #include "key.h"
  • /*
  • 函数功能:按键初始化配置
  • 硬件连接:
  • KEY0 --->PE4 按下为低电平
  • KEY1 --->PE3 按下为低电平
  • KEY2 --->PE2 按下为低电平
  • KEY_UP-->PA0 按下为高电平
  • */
  • void KEY_Init(void)
  • {
  • /*1. 开时钟*/
  • RCC->AHB1ENR|=1<<0;//使能PORTA时钟
  • RCC->AHB1ENR|=1<<4;//使能PORTE时钟
  • /*2. 配置GPIO口模式*/
  • GPIOE->MODER&=~(0x3<<2*2); //清除模式
  • GPIOE->MODER|=0x0<<2*2; //配置输入模式
  • GPIOE->MODER&=~(0x3<<3*2); //清除模式
  • GPIOE->MODER|=0x0<<3*2; //配置输入模式
  • GPIOE->MODER&=~(0x3<<4*2); //清除模式
  • GPIOE->MODER|=0x0<<4*2; //配置输入模式
  • GPIOA->MODER&=~(0x3<<0*2); //清除模式
  • GPIOA->MODER|=0x0<<0*2; //配置输入模式
  • /*3. 配置GPIO口上下拉模式*/
  • GPIOE->PUPDR&=~(0x3<<2*2); //清除之前配置
  • GPIOE->PUPDR|=0x1<<2*2; //配置上拉
  • GPIOE->PUPDR&=~(0x3<<3*2); //清除之前配置
  • GPIOE->PUPDR|=0x1<<3*2; //配置上拉
  • GPIOE->PUPDR&=~(0x3<<4*2); //清除之前配置
  • GPIOE->PUPDR|=0x1<<4*2; //配置上拉
  • GPIOA->PUPDR&=~(0x3<<0*2); //清除之前配置
  • GPIOA->PUPDR|=0x2<<0*2; //配置下拉
  • }
  • /*
  • 函数功能:扫描按键
  • 函数参数:扫描的模式。1表示连续检测、0只能检测单个按键
  • 返 回 值:按下的按键值1、2、3、4
  • 返回0表示按键没有按下
  • */
  • u8 ScanKeyVal(u8 mode)
  • {
  • static u8 stat=0; //保存按键按下的状态
  • if(mode)stat=0; //手动清除按键按下标志
  • if((KEY_UP||KEY0==0||KEY1==0||KEY2==0)&&stat==0)
  • {
  • stat=1; //标记按键已经按下了
  • DelayMs(20); //延时消抖
  • if(KEY_UP) return 4;
  • if(KEY0==0)return 1;
  • if(KEY1==0)return 2;
  • if(KEY2==0)return 3;
  • }
  • else
  • {
  • if(KEY_UP==0&&KEY0&&KEY1&&KEY2)stat=0; //清除按键按下标志
  • }
  • return 0;
  • }

key.h代码如下

  • #ifndef _KEY_H
  • #define _KEY_H
  • #include "stm32f4xx.h"
  • #include "delay.h"
  • void KEY_Init(void);
  • u8 ScanKeyVal(u8 mode);
  • #define KEY0 (!!(GPIOE->IDR&1<<4))
  • #define KEY1 (!!(GPIOE->IDR&1<<3))
  • #define KEY2 (!!(GPIOE->IDR&1<<2))
  • #define KEY_UP (!!(GPIOA->IDR&1<<0))
  • #endif

Main.c代码如下

  • #include "stm32f4xx.h" // Device header
  • #include "led.h"
  • #include "delay.h"
  • #include "key.h"
  • int main(void)
  • {
  • u8 key,i;
  • LED_Init();
  • KEY_Init();
  • while(1)
  • {
  • key=ScanKeyVal(0);
  • if(key)
  • {
  • i=!i;
  • LED0(i);
  • LED1(i);
  • BEEP(i);
  • }
  • }
  • }

【5】编译代码 配置下载

img
img
img
CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐