1.STM32中GPIO口模式
每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL, GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。
─ 输入浮空
─ 输入上拉
─ 输入下拉
─ interwetten与威廉的赔率体系
输入
─ 开漏输出
─ 推挽式输出
─ 推挽式复用功能
─ 开漏复用功能
每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问 (不允许半字或字节访问 )。 GPIOx_BSRR和 GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。
本示例主要讲解IO口输入模式的应用,以按键驱动为例来实现输入模式配置方法。本次实验所用开发板有3个按键,其中一个为复位按键,另外两个则可用户自行驱动。我们采用板载的2个按键来实现对LED灯开关控制。
2.硬件接口
SW2为复位按键,已直接接到芯片复位引脚上,SW3接在PB0上、SW4接在PB1上。按键按下均为低电平。

3.软件设计
1.打开STM32CubmMX代码生成软件,将PB0、PB1配置为输入模式。
2.在选定为输入模式后,STM32输入模式分为两种:浮空输入、上拉/下拉输入。
─浮空输入:配置为浮空输入模式,初始化成功后引脚电平状态处于中间态,既不为高也不为低。
─上拉/下拉输入:配置为浮空输入模式,初始化成功后引脚电平状态可以选择是高电平或者低电平。

因为按键按下为低电平,因此要想检测到按键状态变化,初始化时就得设置为与按下相反的电平,所用我们这里选择带上拉的输入模式(选择浮空输入也可,一般建议使用上拉输入模式)。
4.生成配置代码
使用STM32Cubemx生成代码时,所有的GPIO初始化均会放gpio.c中。

-
在当前工程的Core目录下新建SYSTEM文件夹保存用户自定义驱动文件。

2.创建一个key.c和key.h文件,在SYSTEM目录中创建一个KEY文件夹保存该文件

3.添加头文件路径,编写key.h文件


4.编写key.c文件,编写按键检测函数
u8 KEY_GetVal(void)
{
u8 static stat=0;
if((!KEY1 || !KEY2) && !stat)
{
stat=1;
HAL_Delay(30);
if(!KEY1)return 1;
else if(!KEY2)return 2;
else return 0;
}
else
{
if(KEY1 && KEY2)stat=0;
}
return 0;
}
5.实现按键控制LED开关

-
STM32
+关注
关注
2270文章
10900浏览量
356062 -
GPIO
+关注
关注
16文章
1204浏览量
52105 -
按键驱动
+关注
关注
0文章
11浏览量
7134
发布评论请先 登录
相关推荐
以L298N为例介绍电机驱动模块的使用方法
学习配置按键模块
单片机的按键配置为输入模式获取控制信号
以SPI驱动为例展示如何使用ENV工具对BSP进行配置
STM32笔记之按键KEY输入

评论