加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 方案介绍
    • 【1】F407建工程所需依赖文件
    • 【2】新建工程
    • 【3】分析KEY按键硬件原理图
    • 【4】编写KEY按键驱动代码
    • 【5】编译代码 配置下载
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

STM32F407 GPIO口输入配置配置步骤

03/28 08:38
605
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

更多详细资料请联系.docx

共1个文件

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

  • 更多详细资料请联系.docx
    下载
意法半导体

意法半导体

意法半导体(ST)集团于1987年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。意法半导体是世界最大的半导体公司之一,公司销售收入在半导体工业五大高速增长市场之间分布均衡(五大市场占2007年销售收入的百分比):通信(35%),消费(17%),计算机(16%),汽车(16%),工业(16%)。 据最新的工业统计数据,意法半导体是全球第五大半导体厂商,在很多市场居世界领先水平。例如,意法半导体是世界第一大专用模拟芯片和电源转换芯片制造商,世界第一大工业半导体和机顶盒芯片供应商,而且在分立器件、手机相机模块和车用集成电路领域居世界前列.

意法半导体(ST)集团于1987年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。意法半导体是世界最大的半导体公司之一,公司销售收入在半导体工业五大高速增长市场之间分布均衡(五大市场占2007年销售收入的百分比):通信(35%),消费(17%),计算机(16%),汽车(16%),工业(16%)。 据最新的工业统计数据,意法半导体是全球第五大半导体厂商,在很多市场居世界领先水平。例如,意法半导体是世界第一大专用模拟芯片和电源转换芯片制造商,世界第一大工业半导体和机顶盒芯片供应商,而且在分立器件、手机相机模块和车用集成电路领域居世界前列.收起

查看更多
点赞
收藏
评论
分享
加入交流群
举报

相关推荐