• 方案介紹
    • 【1】F407建工程所需依賴文件
    • 【2】新建工程
    • 【3】分析KEY按鍵硬件原理圖
    • 【4】編寫KEY按鍵驅(qū)動(dòng)代碼
    • 【5】編譯代碼 配置下載
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

STM32F407 GPIO口輸入配置配置步驟

03/28 08:38
1036
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請(qǐng)聯(lián)系.docx

共1個(gè)文件

介紹STM32F407新建寄存器工程流程,介紹輸入模式的配置方式,以按鍵為例完成按鍵輸入檢測(cè)。

【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按鍵驅(qū)動(dòng)代碼

查看數(shù)據(jù)手冊(cè):

img

img

key.c文件代碼如下:

#include "key.h"
/*
函數(shù)功能:按鍵初始化配置
硬件連接:
KEY0 --->PE4  按下為低電平
KEY1 --->PE3  按下為低電平
KEY2 --->PE2  按下為低電平
KEY_UP-->PA0  按下為高電平
*/
void KEY_Init(void)
{
		/*1. 開時(shí)鐘*/
	  RCC->AHB1ENR|=1<<0;//使能PORTA時(shí)鐘
		RCC->AHB1ENR|=1<<4;//使能PORTE時(shí)鐘
	
	  /*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;    //配置下拉
}


/*
函數(shù)功能:掃描按鍵
函數(shù)參數(shù):掃描的模式。1表示連續(xù)檢測(cè)、0只能檢測(cè)單個(gè)按鍵
返 回 值:按下的按鍵值1、2、3、4
          返回0表示按鍵沒有按下
*/
u8 ScanKeyVal(u8 mode)
{
		static u8 stat=0; //保存按鍵按下的狀態(tài)
		if(mode)stat=0;   //手動(dòng)清除按鍵按下標(biāo)志
		if((KEY_UP||KEY0==0||KEY1==0||KEY2==0)&&stat==0)
		{
				stat=1;      //標(biāo)記按鍵已經(jīng)按下了
				DelayMs(20); //延時(shí)消抖
				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; //清除按鍵按下標(biāo)志
		}
		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

  • 更多詳細(xì)資料請(qǐng)聯(lián)系.docx
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦