前言:我们都知道开发板上除了有经典的流水灯之外,还有一个必备的练习硬件--按键(key),下面继续来完成按键的配置。

1、通过查看原理图,找出按键(key)的管脚名字和对应芯片上的I/O口,四个I/O分别为PA0、PE2、PE3和PE4。

2、配置按键I/O口这里要注意的是工作模式要改成输入模式,不是led的输出模式,并且不需要设置输出模式。

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式

3、获取按键的按下和释放的状态

//读取PA0引脚的电平,低电平,按钮按下
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0
//高电平,按钮释放
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1

 

4、下面是具体代码,实现了按下一个按键对应的led灯亮,释放之后led灯灭

#include "stm32f4xx.h"

GPIO_InitTypeDef  GPIO_InitStructure;

void delay(void)
{
unsigned int i=0x500000; while(i--); } /*初始化led灯*/
void init_led(void)
{
/* GPIOG Peripheral clock enable ,使能外设时钟GPIOF、GPIOE,也就是让GPIOF、GPIOE工作*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); /* 配置PF9引脚为推挽输出模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //第PF9和PF10号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出模式,增加输出电流
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上拉电阻
GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化端口F GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; //第PE13和PE14号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出模式,增加输出电流
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上拉电阻
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化端口E } /*初始化按键*/
void init_key(void)
{
/* GPIOG Peripheral clock enable ,使能外设时钟GPIOA和GPIOE,也就是让GPIOA和GPIOE工作*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); /* 配置PA0引脚为输入模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //第PA0号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上拉电阻
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化端口A /* 配置PA0引脚为输入模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; //第PE2、PE3和PE4号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚的的工作速度最高为100MHz,最低为2MHz,工作速度越高,功耗就越高
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上拉电阻
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化端口E } int main(void)
{
init_led();
init_key();
GPIO_SetBits(GPIOF,GPIO_Pin_9); //PF9引脚为高电平,led灯灭
GPIO_SetBits(GPIOF,GPIO_Pin_10); //PF10引脚为高电平,led灯灭
GPIO_SetBits(GPIOE,GPIO_Pin_13); //PE13引脚为高电平,led灯灭
GPIO_SetBits(GPIOE,GPIO_Pin_14); //PE14引脚为高电平,led灯灭
while()
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == ) //读取PA0引脚的电平,低电平,按钮按下
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9);//PF9引脚为低电平,led灯亮
}
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) ==) //读取PA0引脚的电平,高电平,按钮按释放
{
GPIO_SetBits(GPIOF,GPIO_Pin_9); //PF9引脚为高电平,led灯灭
} if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == ) //读取PE2引脚的电平,低电平,按钮按下
{ GPIO_ResetBits(GPIOF,GPIO_Pin_10);//PF10引脚为低电平,led灯亮
} if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == ) //读取PE2引脚的电平,高电平,按钮按释放
{
GPIO_SetBits(GPIOF,GPIO_Pin_10); //PF10引脚为高电平,led灯灭
} if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == ) //读取PE3引脚的电平,低电平,按钮按下
{ GPIO_ResetBits(GPIOE,GPIO_Pin_13);//PF10引脚为低电平,led灯亮
} if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == ) //读取PE3引脚的电平,高电平,按钮按释放
{
GPIO_SetBits(GPIOE,GPIO_Pin_13); //PF10引脚为高电平,led灯灭
} if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == ) //读取PE4引脚的电平,低电平,按钮按下
{ GPIO_ResetBits(GPIOE,GPIO_Pin_14);//PF10引脚为低电平,led灯亮
} if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == ) //读取PE4引脚的电平,高电平,按钮按释放
{
GPIO_SetBits(GPIOE,GPIO_Pin_14); //PF10引脚为高电平,led灯灭
}
}
}

 

stm32按键配置的更多相关文章

  1. stm32时钟配置总结

    stm32时钟配置时钟源: 1,HSE(高速外部时钟)即常见的外接8M晶振方案: 2,HSI(高速内部时钟) 即8M内部振荡时钟方案: 3,LSE(低速外部时钟)即常见的32.768Khz晶振方案: ...

  2. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...

  3. 【STM32】STM32串口配置的一般步骤(库函数)

    STM32串口配置的一般步骤(库函数)(1)串口时钟使能:RCC_APBxPeriphClockCmd();    GPIO时钟使能:RCC_AHBxPeriphClockCmd();(2)引脚复用映 ...

  4. stm32按键FIFO的实现

    学习目标: 1.理解FIFO的基本概念和设计按键FIFO的意义   2.写出实现按键FIFO的代码 1.设计按键FIFO的优点 要介绍实现按键FIFO的优点,首先要了解FIFO的一些基本概念.FIFO ...

  5. STM32 NVIC配置详解

    例程:  /* Configure one bit for preemption priority */  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ...

  6. stm32 时钟配置——外部时钟倍频、内部时钟倍频 【worldsing笔记】

    stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.H ...

  7. stm32按键识别

    刚写了一个关于stm32单片机的按键识别的程序.目的,同时识别多个按键,并且不浪费cpu的时间. 关于去抖动,以前以为是在按键的时候,手会抖动.通过程序验证,这个确实是误解.这个应该是防止意外干扰.以 ...

  8. STM32按键控制程序

    由于最近时间比较匆忙 已经有很久的时间没有写博客了 这次和大家分享的是STM32的一个按键的小程序 他的优点呢也是和上面一个LED一样就是便于移植 更改管脚方便 虽然都是些小程序 但是我觉得他们就像基 ...

  9. stm32 DMA配置

    DMA就是将一个地址空间复制到另外一个地址空间.DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备直接传送数据,使CPU的效率大大的提高 ...

随机推荐

  1. linux的vi编辑器常用用法一览

    vi 命令用于编辑文本文件,语法: vi 文件名 vi 是一个比较强大的编辑工具,类似于windows下的notepad,但是功能要强大的多.vi分为三种模式,分别是“一般模式”,“编辑模式”,“命令 ...

  2. pixijs shader fade 从左到有右淡入 从下到上淡入效果

    pixijs shader fade 从左到有右淡入     从下到上淡入效果 const app = new PIXI.Application({ transparent: true }); doc ...

  3. ES6入门 阮一峰

    ECMAScript 6 入门 http://es6.ruanyifeng.com/#README 在线ES6转ES5 https://es6console.com/k11vgg1r/

  4. mysql多表关联update

    日常的开发中一般都是写的单表update语句,很少写多表关联的update. 不同于SQL Server,在MySQL中,update的多表连接更新和select的多表连接查询在使用的方法上存在一些小 ...

  5. web开发中移动端适配

    这个话题有些复杂,说起来有些琐碎,因为和移动端适配相关的问题太多了. 1. 概念 1.1 设备像素 设备像素被称为物理像素,它是显示设备中一个最小的物理部件.每个像素可以根据操作系统设置自己的颜色和亮 ...

  6. 转 googlenet论文解读

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u014061630/article/det ...

  7. 学习Swoole需要掌握哪些基础知识

    多进程/多线程 了解Linux操作系统进程和线程的概念 了解Linux进程/线程切换调度的基本知识 了解进程间通信的基本知识,如管道.UnixSocket.消息队列.共享内存 SOCKET 了解SOC ...

  8. [转]国内阿里Maven仓库镜像Maven配置文件Maven仓库速度快

    原文地址:http://www.cnblogs.com/ae6623/p/4416256.html 国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. ...

  9. [20190910]关于降序索引问题5.txt

    [20190910]关于降序索引问题5.txt --//测试了索引TERM使用0xfe表示,回想到以前遇到降序索引的特殊字符编码问题,现在可是忘得一干二净.--//现在想想当时自己怎么猜测出来的,^_ ...

  10. Mysql—用户表详解(mysql.user)

    MySQL是一个多用户管理的数据库,可以为不同用户分配不同的权限,分为root用户和普通用户,root用户为超级管理员,拥有所有权限,而普通用户拥有指定的权限. MySQL是通过权限表来控制用户对数据 ...