第一章F407建工程所需依赖文件
第二章 新建工程
第三章分析 KEY 按键硬件原理图
第四章 编写 KEY 按键驱动代码
查看数据手册:
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);
}
}
}
复制代码
第五章 编译代码 配置下载
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
GPIO
+关注
关注
16文章
1197浏览量
51968 -
配置
+关注
关注
1文章
187浏览量
18366 -
STM32F407
+关注
关注
15文章
187浏览量
29394
发布评论请先 登录
相关推荐
【STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统
【STM32F407开发板用户手册】第14章 STM32F407的电源,复位和时钟系统
发表于 12-02 16:21
•42次下载
【STM32F407开发板用户手册】第1章 初学STM32F407的准备工作
【STM32F407开发板用户手册】第1章 初学STM32F407的准备工作
发表于 12-04 13:36
•75次下载
【STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)
【STM32F407开发板用户手册】第21章 STM32F407的NVIC中断分组和配置(重要)
发表于 12-04 13:51
•21次下载
【STM32F407开发板用户手册】第19章 STM32F407的GPIO应用之按键FIFO
【STM32F407开发板用户手册】第19章 STM32F407的GPIO应用之按键FIFO
发表于 12-05 15:21
•39次下载
STM32F407入门开发: 位带操作
STM32F407的位带操作可以实现类似51单片机中寄存器的操作方法,操作GPIO口代码简洁方便。 关于位段的操作在Cortex-M3M4权威指南里有详细描述:
STM32F407入门开发: 串口配置
STM32F407 的串口资源非常丰富,功能也很强劲。 STM32F407 最多可提供 6 路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持 LIN、 支持调制解调器操作、 智能卡
评论