第一章F407建工程所需依賴文件
第二章 新建工程
第三章分析 KEY 按鍵硬件原理圖
第四章 編寫 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; //手動清除按鍵按下標志
if((KEY_UP||KEY0==0||KEY1==0||KEY2==0)&&stat==0)
{
stat=1; //標記按鍵已經(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; //清除按鍵按下標志
}
return 0;
}
復(fù)制代碼
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
復(fù)制代碼
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);
}
}
}
復(fù)制代碼
第五章 編譯代碼 配置下載
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
GPIO
+關(guān)注
關(guān)注
16文章
1188瀏覽量
51832 -
配置
+關(guān)注
關(guān)注
1文章
187瀏覽量
18340 -
STM32F407
+關(guān)注
關(guān)注
15文章
187瀏覽量
29330
發(fā)布評論請先 登錄
相關(guān)推薦
STM32CubeMX 配置STM32F407 實現(xiàn)HAL庫延時微妙方案
STM32CubeMX 配置STM32F407 實現(xiàn)HAL庫延時微妙方案
發(fā)表于 11-24 20:51
?20次下載
STM32F407標準庫學(xué)習(xí)筆記-GPIO
STM32F407標準庫學(xué)習(xí)筆記-GPIO頭文件 gpio.h枚舉-列舉同一寄存器的不同選項typedef enum{ GPIO_Low_Speed = 0x00, /*!
發(fā)表于 11-29 15:51
?46次下載
STM32F407的串口UART 基礎(chǔ)配置STM32CubeMX
STM32F407的串口UART 基礎(chǔ)配置STM32CubeMX
發(fā)表于 11-29 16:06
?54次下載
【STM32F407開發(fā)板用戶手冊】第1章?? 初學(xué)STM32F407的準備工作
【STM32F407開發(fā)板用戶手冊】第1章?? 初學(xué)STM32F407的準備工作
發(fā)表于 12-04 13:36
?75次下載
【STM32F407開發(fā)板用戶手冊】第21章 STM32F407的NVIC中斷分組和配置(重要)
【STM32F407開發(fā)板用戶手冊】第21章 STM32F407的NVIC中斷分組和配置(重要)
發(fā)表于 12-04 13:51
?21次下載
【STM32F407開發(fā)板用戶手冊】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO
【STM32F407開發(fā)板用戶手冊】第19章 STM32F407的GPIO應(yīng)用之按鍵FIFO
發(fā)表于 12-05 15:21
?39次下載
STM32F407入門開發(fā): 位帶操作
STM32F407的位帶操作可以實現(xiàn)類似51單片機中寄存器的操作方法,操作GPIO口代碼簡潔方便。 關(guān)于位段的操作在Cortex-M3M4權(quán)威指南里有詳細描述:
STM32F407入門開發(fā): 串口配置
STM32F407 的串口資源非常豐富,功能也很強勁。 STM32F407 最多可提供 6 路串口,有分數(shù)波特率發(fā)生器、支持同步單線通信和半雙工單線通訊、支持 LIN、 支持調(diào)制解調(diào)器操作、 智能卡
評論