STM32单片机学习心得——GPIO(2)使用GPIO做输入

以探索者板载按键为例,以下是板载按键的电路图,此文章不包括RESET按键的相关内容

其中,KEY_UP -> PA1

   KEY_0  -> PE4

KEY_1  -> PE3

    KEY_2  -> PE2

事实上,按键相当于一个开关,按下时开关导通,两端电平相同,GPIO接口电平发生变化,通过库函数读取后触发一系列操作。

对于按键的初始化,以上图为例,代码如下(为节约时间,只放上关键代码)

 1 void KEY_Init(void)
 2 {
 3
 4   GPIO_InitTypeDef  GPIO_InitStructure;
 5
 6   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOA和GPIOE
 7
 8   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //KEY0 KEY1 KEY2对应PE4/3/2
 9   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//设置为输入模式 10   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
11   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//电平由高到低对应上拉
12   GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE13
14
15   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//WK_UP按键对应PA016   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN ;//电平由高到低对应下拉
17   GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA
18
19 } 

关于输入读取函数

#include "stm32f4xx_gpio.h"

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//官方标准库定义

初始化完成后,就可以进行按键扫描了,按键扫描主要是为了读取按键对应IO接口的电平变化,为方便起见,我们使用宏定义来写

 1 #define KEY0         GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //PE4
 2 #define KEY1         GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)    //PE3
 3 #define KEY2         GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) //PE2
 4 #define WK_UP     GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)    //PA0
 5
 6 #define KEY0_PRES     1
 7 #define KEY1_PRES    2
 8 #define KEY2_PRES    3
 9 #define WKUP_PRES   4
10
11 u8 KEY_Scan(u8 mode)
12 {
13     static u8 key_up=1;//按键松开标志14     if(mode)key_up=1;  //支持连按
15     if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
16     {
17         delay_ms(10);//延迟,防止纹波干扰
18         key_up=0;
19         if(KEY0==0)
20           return 1;
21         else if(KEY1==0)
22                return 2;
23              else if(KEY2==0)
24                     return 3;
25                   else if(WK_UP==1)
26                          return 4;
27     }
28     else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)
29            key_up=1;
30            return 0;//没有按键按下
31 }

此后,就可以在主函数中调用按键扫描函数进行按键扫描,可以用if-else语句或者switch语句进行判断并执行后续操作,至于按键中断的相关内容,敬请期待

时间: 2024-08-23 11:41:00

STM32单片机学习心得——GPIO(2)使用GPIO做输入的相关文章

STM32单片机学习(11) DS18B20温度传感器实验

STM32单片机学习(11) DS18B20温度传感器实验 本程序主要实现 DS18B20温度传感器数据获取,并利用串口通信把温度数据传至计算机 注:使用普中科技开发板测试时,需要拔掉Boot1插口,因为用到的是PA15管脚, 由开发板电路图可知,需要改变PA15 管脚的映射,将其设置成普通IO口 参考资料 DS18B20中文手册.pdf   http://download.csdn.net/detail/leytton/7742193 STM32-外设篇 视频教程(Cortex-M3)-主讲人

德飞莱STM32单片机学习(一)——下载环境搭建

一.下载驱动安装. 1.手动打开CH341 文件夹(驱动程序文件夹内) ,双击安装驱动 2. 尼莫M3S 开发硬件设置 硬件需要做到以下2 点:1. USB插入USB1(COM),打开电源开关J14(蓝白开关),并安装好驱动程序2. BOOT启动跳帽插入位置,BOOT1 设置0,BOOT0 设置0,J15 位置,正向看,跳帽都插入下端. 3.使用FlyMcu进行下载 (1)首先点击搜索串口 (2)其次选择要下载的.hex文件进行下载即可 二.使用Keil生成Hex文件 1.首先写好程序 2.单击

STM32学习心得——MDK开发模板的创建

其实这一篇应该是学习心得的第一篇文章,但是由于种种原因,这篇文章到现在才放出来 STM32F407ZGTx Template 源码下载地址:https://github.com/stark-zhang/STM_Template 该源码上传时,删除了体积较大的lib文件和Keil MDK的配置文件,今天,就分享一下如何用这份源代码创建一个MDK工程 首先下载解压该模板,模板内一共有六个文件夹和一些说明文件 1. Lib_Create 生成STM官方标准库lib文件的工程文件夹 2. Lib_Mat

STM32单片机在Keil5下仿真的若干问题解决

STM32单片机在Keil5下仿真的若干问题解决 最近看了视频,里面有仿真,可以清楚看到GPIO口的数据变化,也想尝试下,DUG时却出现*** error 65: access violation at 0x40021000 : no 'read' permission,按照网上给的各种办法,包括修改memory map,以及其他各种办法,都无法解决,后来发现问题在下面这张图所示的位置: 这个图上红色框中的两个参数是我修改之后的,原来的值是软件安装之后的默认值: Dialog DLL默认是DCM

STM32 CubeMX 学习:001-GPIO的使用

背景 在上一讲STM32 CubeMX 学习:搭建开发环境中,我们已经利用CubeMx搭建了可编译的工程. 今天就开始来介绍STM32 GPIO的有关知识,以及如何驱动它. HOST-OS : Windows-10 STM32 Cube :v5.6 MCU : STM32F429 LIB : stm32cube_fw_f4_v1250 知识 在STM32中,GPIO有这些属性:输入.输出.复用功能:也可以设置速度,上下拉,推挽开漏等电器特性. 在Drivers/STM32F4xx_HAL_Dri

windows类书的学习心得(转载)

原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什么××天精通××,精通××编程, ××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也许是外面的世界变化得太快,我编程数月,出去一走,

正点原子STM32探索者学习笔记1

1.在STM32的数据手册中,引脚定义中的I/O structure中如果是FT的话,说明该引脚兼容5V: 2.IO口一般都有多个功能,可以通过寄存器的设置来选择其IO口的功能,F1还有重映射的概念,F4没有: 3.IO口分为两种情况:一个是完全独立的IO(不能有任何外设连接的IO,一般比较少)(如ADC采集):一种是允许IO口挂其他外设,但是必须可以单独做输入.输出使用. 4.基本外设:GPIO输入输出,外部中断,定时器,串口.这四个基本外设任何一款MCU都有:然后是一些高级的通信外设如SPI

用DMA直接驱动GPIO,实现GPIO最高输出速率(转)

源:用DMA直接驱动GPIO,实现GPIO最高输出速率 先上图:STM32F303芯片,72M的主频 可以看到GPIO的达到了14.4M的翻转速率,      再来上代码: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); GPIOC->MODER |= 0x55555555; GPIOC->OSPEEDR |= 0xFFFFFFF; GPIOC->PUPDR |= 0x55555555; u32 Gpio_data[4]= {0x0

STM32单片机资料大全1.1G

STM32单片机资料大全1.1G包括有不限于以下资料:其实还有更多,大家凑合着看吧!资料下载地址下面都有写,需要的自己去瞧一瞧就知道了,stm32的全部资料在闯客网技术论坛都可以下载,只有你想不到,没有你找不到,请相信这个帖子所说的 STM32F107VCU3S羊册V6.pdfSTM32F系列ARM内核32位高性能徴控制器参考丰册V10_l.pdfSTM32F系列ARM内核32位高性能徴控制器参考丰册V14.pdfSTM32F系列ARM内核32位高性能徴控制器参考丰册V10_l.pdfKeil+