网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 控制/MCU >

STM32F407 GPIO口输入配置配置步骤

时间:2023-07-06 14:28

人气:

作者:admin

标签:

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

介绍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

审核编辑:汤梓红

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信