介紹STM32F407新建寄存器工程流程,介紹輸入模式的配置方式,以按鍵為例完成按鍵輸入檢測。
【1】F407建工程所需依賴文件
【2】新建工程
【3】分析KEY按鍵硬件原理圖
【4】編寫KEY按鍵驅(qū)動代碼
查看數(shù)據(jù)手冊:
key.c文件代碼如下:
#include "key.h"
/*
函數(shù)功能:按鍵初始化配置
硬件連接:
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; //配置下拉
}
?
?
/*
函數(shù)功能:掃描按鍵
函數(shù)參數(shù):掃描的模式。1表示連續(xù)檢測、0只能檢測單個按鍵
返 回 值:按下的按鍵值1、2、3、4
返回0表示按鍵沒有按下
*/
u8 ScanKeyVal(u8 mode)
{
static u8 stat=0; //保存按鍵按下的狀態(tài)
if(mode)stat=0; //手動清除按鍵按下標(biāo)志
if((KEY_UP||KEY0==0||KEY1==0||KEY2==0)&&stat==0)
{
stat=1; //標(biāo)記按鍵已經(jīng)按下了
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; //清除按鍵按下標(biāo)志
}
return 0