【STM32CubeMX开发】-1-GPIO:点亮一个LED,以及按键KEY的捕获

news2024/11/26 8:32:39

案例背景:

我们将实现这样一个效果:按下按键KEY,点亮LED灯;松开按键KEY,熄灭LED灯。

  • KEY需配置为上拉输入;
  • LED需配置为推挽输出。

目录

1 STM32CubeMX中配置 – GPIO

1.1 PIN引脚配置

1.2 GPIO配置

1.2.1 GPIO – DI输入模式

1.2.1 GPIO – DO输出模式

2 生成代码

结尾


1 STM32CubeMX中配置 – GPIO

1.1 PIN引脚配置

依次选择Pinout&Configuration -- > Pinout view,配置如下:

GPIO设置:

  • PA1 Pin:配置为GPIO_Input,用于捕获KEY的动作;
  • PB4 Pin:配置为GPIO_Ouput,用于控制LED灯。

1.2 GPIO配置

1.2.1 GPIO – DI输入模式

依次选择Pinout&Configuration -- > System Core -- > GPIO,参数配置如下:

GPIO mode:Input mode为输入模式。

GPIO Pull-up/Pull-down

  • No Pull-up and no Pull-down表示引脚未连接到电源或地,引脚浮空输入时,读取结果是不确定的;
  • Pull-up表示引脚上拉输入模式(引脚电平拉高至VDD,引脚与VDD之间存在一个高电阻);
  • Pull-down表示引脚下拉输入模式(引脚电平拉低至GND,引脚与VDD之间存在一个高电阻)。

User Label:为该GPIO – Input定义一个标签,方便使用。

1.2.1 GPIO – DO输出模式

依次选择Pinout&Configuration -- > System Core -- > GPIO,参数配置如下:

GPIO output level表示MCU初始化GPIO(调用函数MX_GPIO_Init)后,该引脚输出的电平,Low低电平,High高电平;

GPIO mode:输出模式。

  • Output Push Pull表示推挽(Pull)输出模式(输出较大电流),推挽输出,既提高电路的负载能力,又提高开关速度;
  • Output Open Drain表示开漏(Drain)输出模式(一般外接上拉电阻,如果外部不接上拉电阻只能输出低电平。驱动电流大小,取决于上拉电阻的大小。),可用于不同电压的系统之间的通信。

GPIO Pull-up/Pull-down

  • No Pull-up and no Pull-down表示引脚未连接到电源或地;
  • Pull-up表示引脚上拉输出模式(引脚电平拉高至VDD,引脚与VDD之间存在一个高电阻);
  • Pull-down表示引脚下拉输出模式(引脚电平拉低至GND,引脚与VDD之间存在一个高电阻)。

Maximum output speed:IO口速率(I/O口驱动电路的响应速度),当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:LowMediumHigh,通过选择速度来选择不同的驱动电路,达到最佳的噪声控制和降低功耗的目的;

User Label:为该GPIO – Output定义一个标签,方便使用。

2 生成代码

单击GENERATE CODE,生成代码:通过HAL_GPIO_ReadPin捕获KEY的状态;通过HAL_GPIO_WritePin控制LED。

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		GPIO_PinState Pinstatus;
		
		Pinstatus = HAL_GPIO_ReadPin(GPIOA,KEY_DI_Pin);
		
		if(Pinstatus == GPIO_PIN_RESET)      // ON KEY
		{
			   HAL_GPIO_WritePin(GPIOB,LED_DO_Pin,GPIO_PIN_RESET);   // ON LED
		}
		else if(Pinstatus == GPIO_PIN_SET)   // OFF KEY
		{
			   HAL_GPIO_WritePin(GPIOB,LED_DO_Pin,GPIO_PIN_SET);     // OFF LED
		}		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}



/** Configure pins as
        * Analog
        * Input
        * Output
        * EVENT_OUT
        * EXTI
        * Free pins are configured automatically as Analog (this feature is enabled through
        * the Code Generation settings)
*/
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(LED_DO_GPIO_Port, LED_DO_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure GPIO pins : PA0 PA2 PA3 PA4
                           PA5 PA6 PA7 PA8
                           PA9 PA10 PA11 PA12
                           PA15 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4
                          |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12
                          |GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = KEY_DI_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(KEY_DI_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : PB0 PB1 PB2 PB10
                           PB11 PB12 PB13 PB14
                           PB15 PB3 PB5 PB6
                           PB7 PB8 PB9 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10
                          |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
                          |GPIO_PIN_15|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6
                          |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*Configure GPIO pins : PF6 PF7 */
  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = LED_DO_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(LED_DO_GPIO_Port, &GPIO_InitStruct);

}

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三款GIS工具多角度对比:免费的倾斜摄影OSGB/3Dtiles编辑转换发布平台

GIS数据处理工具在现代技术与应用中扮演着至关重要的角色,它们不仅是连接原始地理信息与可分析、可视化数据的桥梁,更是推动地理信息系统(GIS)在各个行业领域深入发展与应用不可或缺的关键工具。选择一款合适的工具直接关系到数据…

电汽车充电革命:充电桩的过去现在与未来

电动汽车充电革命:中国充电桩行业的过去、现在与未来 一、发展历程概述 中国充电桩行业的发展历程可划分为以下几个阶段: 1. 初始期(2006-2008年):在此阶段,国家队主导市场,主要参与者包括国…

《智慧博物馆:科技与文化的完美融合》

《智慧博物馆:科技与文化的完美融合》 一、智慧博物馆的兴起与发展 随着科技的飞速发展,智慧博物馆应运而生。进入新时代,大数据、人工智能、信息化的进步以及智能产品的应用,改变了人们接收信息和学习的习惯。为顺应社会变革&am…

alter system reset scope sid不要随便加 查询视图

全局变量 写全比较稳妥 set的时候自动加both , reset时不是自动both Applies to: Oracle Database - Enterprise Edition - Version 11.2.0.4 and later Information in this document applies to any platform. Symptoms When the OPTIMIZER_FEATURES_ENABLE p…

Apifox「动态值」全新升级:灵活mock类型的数据

在使用 Apifox 进行接口测试时,你可能不希望将接口参数的值固定,也不想每次发送请求时手动修改数据,而是希望参数值能够自动变化,并且这个参数值能够符合真实场景中的数据需求。比如,你可能需要随机生成数字、字符串、…

90、Python之鸭子类型:for循环的本质,进一步解析迭代协议

引言 在前面的文章中,我们简单介绍了Python中的可迭代对象、迭代器、以及迭代协议的概念。今天就for这个用得特别多,觉得很熟悉很简单的语法结构,稍微展开一下,从而更好地加深对迭代协议的理解。 本文的主要内容有: …

<<迷雾>> 第11章 全自动加法计算机(1)--比特单元 示例电路

具有唯一输入/输出线的存储器 info::操作说明 读取时, 将 读R 开关闭合即可, Q 的输出将通过传输门 G 到达输出 DB 处 写入时, 首先将 写W 开关闭合, 再将上方为测试引入的开关闭合, 此时此高电平将写入 Q 之后断开 写W 的开关, 写入状态结束, 之后可将上方为测试引入的开关断开…

使用MySQL API 进行多线程数据库增删改查操作

使用MySQL API 进行多线程数据库增删改查操作 准备工作安装MySQL Connector/C包含必要的头文件初始化MySQL连接增删改查处理插入数据删除数据更新数据查询数据主函数注意事项在现代的应用程序中,数据库操作往往是性能的关键瓶颈之一。为了提高数据库操作的效率,多线程技术被广…

LeCun数十年经验之谈:视觉是建立AGI的核心,视频理解难点在哪?语言模型技术为何难以复用于视觉?

文字来源 | 夕小瑶科技说 AI寒武纪 大语言模型(LLM)已经接近人类水平,但视觉理解在世界范围似乎尚未突破,那么为何不能直接将LLM技术用于视觉?让AI看视频的难点在哪?如果语言是AGI必要的能力,为…

Flink 批作业如何在 Master 节点出错重启后恢复执行进度?

摘要:本文撰写自阿里云研发工程师李俊睿(昕程),主要介绍 Flink 1.20 版本中引入了批作业在 JM failover 后的进度恢复功能。主要分为以下四个内容: 背景解决思路使用效果如何启用 Tips:点击「阅读原文」跳转…

数据结构实验:用栈求解迷宫问题的所有路径及最短路径

用栈求解迷宫问题的所有路径及最短路径 题目描述 编写一个程序exp3-5.cpp,改进《教程》3.1.4节中的求解迷宫问题程序,要求输 如图3.9所示的迷宫的所有路径,并求第一条最短路径及其长度。 在本实验中用mg作为迷宫数组,用St数组作为顺序栈,Path数组保存一条迷宫径,将它们都设置为…

47 C 语言实战项目——家庭收支记账软件

目录 1 需求说明 1.1 菜单显示 1.2 登记收入 1.3 登记支出 1.4 显示收支明细 1.5 退出 2 流程分析 2.1 总流程图 2.2 登记收入流程图 2.3 登记支出流程图 2.4 收支明细流程图 2.5 退出流程图 3 代码实现 3.1 框架搭建 3.2 收支明细功能 3.3 登记收入功能 3.4 …

解决UOS操作系统vim内容鼠标选中后进入可视模式,无法复制问题

现象: 在 vim 插入模式中右键单击出现可视模式,如下图 解决方法: 1. 编辑文件 rootkylin-PC:~# vi /usr/share/vim/vim81/defaults.vim 改为

ANSYS Workbench多边形骨料及界面过渡区混凝土细观模型

混凝土细观模型是一种用来研究混凝土材料内部结构和性能的分析方法。它主要关注于混凝土中不同组分(如骨料、水泥浆体等)之间的相互作用以及这些相互作用如何影响整体材料的行为。在建立这样的模型时,考虑到多边形骨料及其与周围基质之间形成…

【含文档】基于Springboot+Android的环境保护生活App(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

Jenkins入门:流水线方式部署多模块Springboot项目

目录 一、环境准备 1. 搭建配置Jenkins (在上一篇基础上进行) 2. 安装mysql 3. 安装redis 4. 配置docker-componse 5. 启动docker-componse 二、脚本准备 1. Jenkinsfile 2. deploy.sh 3. Dockerfile 三、Jenkins流水线配置 新增版本号参数 流水线选择代码里面的Je…

ffmpeg面向对象——rtsp拉流探索(1)

目录 1.tcp创建及链接的流程图及对象图2.解析 标准rtsp协议的基石是tcp,本节探索下ffmpeg的rtsp拉流协议tcp的socket创建及链接。 1.tcp创建及链接的流程图及对象图 tcp创建及链接的流程图,如下: tcp创建及链接的对象图,如下&…

QD1-P15 HTML 文本标签(textarea、label)

本节学习 HTML 常用标签:textarea和label ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p15 ‍ 知识点1:textarea标签的用途 可输入多行文本的控件 cols属性: 文本的可见宽度 rows属性: 文本的可见行数 HTML示例 &l…

Map父接口

通过API可以详细查看Map接口包含的具体方法。重点的方法包括: 案例一:Map接口的基本使用 package com.map;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** Map接口的使用* 特点:存储键值对;键不能重…

【数据结构】零碎知识点(易忘 / 易错)总结回顾

一、数据结构的概念 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 二、算法 算法(Algorithm)就是定义良好的计算过程,它取一个或一组的值为…