首页 > 其他分享 >STM32CubeMX输入配置---按键

STM32CubeMX输入配置---按键

时间:2022-11-23 15:05:41浏览次数:56  
标签:输出 引脚 按键 STM32CubeMX --- 寄存器 GPIO 输入

STM32CubeMX输入配置---按键

  本示例主要讲解IO口输入模式的应用,以按键驱动为例来学校输入模式配置方法。本次实验所用开发板有3个按键,其中一个为复位按键,另外两个则可用户自行驱动。我们采用板载的2个按键来实现对LED灯开关控制。

1.硬件接口

  SW2为复位按键,已直接接到芯片复位引脚上,SW3接在PB0上、SW4接在PB1上。按键按下均为低电平。

STM32CubeMX输入配置---按键_HAL库

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端口的每个位可以由软件分别配置成多种模式。

─ 输入浮空
      ─ 输入上拉
      ─ 输入下拉
      ─ 模拟输入
      ─ 开漏输出
      ─ 推挽式输出
      ─ 推挽式复用功能
      ─ 开漏复用功能

  • 输入浮空/上拉/下拉配置如下图

STM32CubeMX输入配置---按键_GPIO配置_02

当I/O端口配置为输入时:

● 输出缓冲器被禁止
● 施密特触发输入被激活
● 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 对输入数据寄存器的读访问可得到I/O状态

输出配置如下图

STM32CubeMX输入配置---按键_输入模式_03

当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端口位的复用功能配置如下:

STM32CubeMX输入配置---按键_GPIO配置_04


2.2 按键引脚配置

     打开STM32CubmMX代码生成软件,将PB0、PB1配置为输入模式。

     在选定为输入模式后,STM32输入模式分为两种:浮空输入、上拉/下拉输入。

     浮空输入:配置为浮空输入模式,初始化成功后引脚电平状态处于中间态,既不为高也不为低。

    上拉/下拉输入:配置为浮空输入模式,初始化成功后引脚电平状态可以选择是高电平或者低电平。

STM32CubeMX输入配置---按键_GPIO配置_05

  因为按键按下为低电平,因此要想检测到按键状态变化,初始化时就得设置为与按下相反的电平,所用我们这里选择带上拉的输入模式(选择浮空输入也可,一般建议使用上拉输入模式)。

2.3生成配置代码

  1.使用STM32Cubemx生成代码时,所有的GPIO初始化均会放gpio.c中。

void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : PBPin PBPin */
GPIO_InitStruct.Pin = KEY1_Pin|KEY2_Pin;//按键引脚
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP;//上拉
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);//按键初始化
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = BEEP_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(BEEP_GPIO_Port, &GPIO_InitStruct);
}

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

STM32CubeMX输入配置---按键_输入模式_06

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

STM32CubeMX输入配置---按键_GPIO配置_07

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

STM32CubeMX输入配置---按键_GPIO配置_08

STM32CubeMX输入配置---按键_输入模式_09

5.编写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;
}

6.main函数实现按键控制LED开关。

int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
int key;
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while(1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
key=KEY_GetVal();
if(key)
{
HAL_GPIO_TogglePin(BEEP_GPIO_Port,BEEP_Pin);//蜂鸣器电平信号翻转
}
}
/* USER CODE END 3 */
}

标签:输出,引脚,按键,STM32CubeMX,---,寄存器,GPIO,输入
From: https://blog.51cto.com/u_15688123/5881293

相关文章

  • 简单的股票行情展示演示(一) - 实时标的数据
    目录一、概述二、效果展示三、实现代码1、行情数据中心2、数据拉取模块3、基础服务模块4、UI展示四、相关文章原文链接:简单的股票行情演示(一)-实时标的数据一、概述很......
  • HCIA---数据转发过程
    概述相同网段数据转发直接做ARP数据请求数据封装和解封装的过程:​​IP封装​同一网段直接做ARP解析,不同网段就需要找网关了。整体过程:发送端从上到下的封装过程,到目的地是从......
  • Codeforces Round #835 (Div.4) A-G题解
    原题链接:https://codeforces.com/contest/1744A.MediumNumber题意:给定三个数,求中间那个数(倒数第二小or倒数第二大)。题解:直接用数组存,sort一下输出中间的数即可。#in......
  • springcloud -nacos-配置中心-接入
    1.nacaosClient接入:pom.xml引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-actuator</artifactId>......
  • uni-app 小程序获取用户信息
    小程序获取用户头像昵称,微信又叒做妖,废除之前的接口,改成了头像昵称填写通知:微信小程序端基础库2.27.1及以上版本,wx.getUserProfile接口被收回,详见《小程序用户头像昵称获......
  • IPv6改造方案:双栈技术-中科三方
    IPv4到IPv6的过渡技术主要有双栈协议,隧道技术和网络地址转换-协议地址转换技术三种技术方案,本篇内容中科三方针对双栈技术的原理和应用场景做下简单介绍。一、双协议栈(Dual......
  • 实用工具(锐捷无线篇)-WIS
    大家好,我是小杜,前天学习睿易产品的云端相关登录方式,今天发现原来行业设备也有对应的云管理平台:WIS云网融合平台,这是要对所有产品做全方位覆盖,全面支持云管理的节奏啊!那就来......
  • kali 1、信息收集-ZoomEye(钟馗之眼)
    ZoomEye(钟馗之眼)是知道创宇公司研发的一款网络空间搜索引擎。侧重点在web服务层面。1、需要注册用户注册后成为终身会员每月API可享1万条搜索服务。2、搜索语法说......
  • 基于XQ6657Z35-EVM开发平台上TI TMS320C6657 TLV320AIC3206音频设计
    XQ6657Z35-EVM评估板是基于TI双核DSPTMS320C6657和XilinxZynqSoC处理器XC7Z035设计的多核异构平台,由核心板与底板架构组成。​SOM-XQ6657Z35核心板资源框图TMS320C6657......
  • VMware 桥接 NAT host-only 模式区别和配置方法
    NAT:网络地址转换,虚拟机和物理机构建一个子网络,虚拟机可以上网,物理机可以连接虚拟机,但是物理机所在网络的其他设备不能直接连接子网络中的虚拟(通过网络地址下探也是可以的......