前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32F407 GPIO口输入配置配置步骤

STM32F407 GPIO口输入配置配置步骤

作者头像
DS小龙哥
发布2023-07-08 20:07:52
2860
发布2023-07-08 20:07:52
举报
文章被收录于专栏:嵌入式项目开发

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

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

【2】新建工程

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

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

查看数据手册:

key.c文件代码如下:

代码语言:javascript
复制
#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代码如下

代码语言:javascript
复制
#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代码如下

代码语言:javascript
复制
#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】编译代码 配置下载

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【1】F407建工程所需依赖文件
  • 【2】新建工程
  • 【3】分析KEY按键硬件原理图
  • 【4】编写KEY按键驱动代码
  • 【5】编译代码 配置下载
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档