STM32CubeMX输入配置—按键
本示例主要讲解IO口输入模式的应用,以按键驱动为例来学校输入模式配置方法。本次实验所用开发板有3个按键,其中一个为复位按键,另外两个则可用户自行驱动。我们采用板载的2个按键来实现对LED灯开关控制。
1.硬件接口
SW2为复位按键,已直接接到芯片复位引脚上,SW3接在PB0上、SW4接在PB1上。按键按下均为低电平。
2.软件设计
2.1 GPIO引脚模式简介
在STM32单片机中,每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL, GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。
─ 输入浮空
─ 输入上拉
─ 输入下拉
─ 模拟输入
─ 开漏输出
─ 推挽式输出
─ 推挽式复用功能
─ 开漏复用功能
- 输入浮空/上拉/下拉配置如下图
当I/O端口配置为输入时:
● 输出缓冲器被禁止
● 施密特触发输入被激活
● 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 对输入数据寄存器的读访问可得到I/O状态
● 输出配置如下图
当I/O端口被配置为输出时:
● 输出缓冲器被激活
─ 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1 ’将端口置于高阻状态(PMOS从不被激活)。
─ 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1 ’将激活P-MOS。
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。
当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。
输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。
所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。
复用功能配置
当I/O端口被配置为复用功能时:
● 在开漏或推挽式配置中,输出缓冲器被打开
● 内置外设的信号驱动输出缓冲器(复用功能输出)
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
● 开漏模式时,读输入数据寄存器时可得到I/O口状态
● 在推挽模式时,读输出数据寄存器时可得到最后一次写的值
I/O端口位的复用功能配置如下:
2.2 按键引脚配置
打开STM32CubmMX代码生成软件,将PB0、PB1配置为输入模式。
在选定为输入模式后,STM32输入模式分为两种:浮空输入、上拉/下拉输入。
浮空输入:配置为浮空输入模式,初始化成功后引脚电平状态处于中间态,既不为高也不为低。
上拉/下拉输入:配置为浮空输入模式,初始化成功后引脚电平状态可以选择是高电平或者低电平。
因为按键按下为低电平,因此要想检测到按键状态变化,初始化时就得设置为与按下相反的电平,所用我们这里选择带上拉的输入模式(选择浮空输入也可,一般建议使用上拉输入模式)。
2.3生成配置代码
1.使用STM32Cubemx生成代码时,所有的GPIO初始化均会放gpio.c中。
2.在当前工程的Core目录下新建SYSTEM文件夹保存用户自定义驱动文件。
3.创建一个key.c和key.h文件,在SYSTEM目录中创建一个KEY文件夹保存该文件。
4.添加头文件路径,编写key.h文件。
5.编写key.c文件,编写按键检测函数。
6.main函数实现按键控制LED开关。