【STM32HAL-----GPIO】
1. 什么是GPIO?(了解)



2. STM32 GPIO简介
2.1. GPIO特点


2.2. GPIO电气特性

2.3. GPIO引脚分布图


IO引脚分布特点:按组存在、组数视芯片而定、每组最多16个IO引脚。
3. IO端口基本结构介绍






4. GPIO八种工作模式

4.1. 输入浮空


特点:空闲时(高阻态),IO状态不确定,由外部环境决定。
4.2. 输入上拉


特点:空闲时(高阻态),IO呈现高电平。
4.3. 输入下拉


特点:空闲时(高阻态),IO呈现低电平。
4.4. 模拟功能


特点:专门用于模拟信号输入或输出,如ADC和DAC
4.5. 开漏输出


特点:不能输出高电平,必须有外部(或内部)上拉才能输出高电平。
4.6. 开漏式复用功能


特点:不能输出高电平,必须有外部(或内部)上拉才能输出高电平。由其他外部控制输出。
4.7. 推挽输出


特点:可输出高低电平,驱动能力强。
4.8. 推挽式复用功能


特点:可输出高低电平,驱动能力强,由其他外设控制输出。

5. GPIO寄存器

5.1. 端口配置寄存器(GPIOx_CRL和GPIOx_CRH)(x=A..E)
这两个寄存器都是GPIO口配置寄存器,不过CRL控制端口的低8位(GPIOx_0~7),CRH控制端口的高8位(GPIOx_8~15)。寄存器的作用是控制GPIO的工作模式和工作速度。


STM32F103为例,每组GPIO下有16个IO口,一个寄存器共32位,每4个位控制1个IO口,所以才需要俩个寄存器完成。我们看看这个寄存器的复位值,然后用复位值举例说明一下这样的配置值代表什么意思。比如 GPIOA_CRL 的复位值是 0x44444444,4 位为一个单位都是 0100,以寄存器低四位说明一下,首先位 1:0 为 00 即是设置为 PA0 为输入模式,位 3:2 为 01 即设置为浮空输入模式。所以假如 GPIOA_CRL 的值是 0x44444444,那么 PA0~PA7 都是设置为输入模式,而且是浮空输入模式。
上面这 2 个配置寄存器就是用来配置 GPIO 的相关工作模式和工作速度,它们通过不同的配置组合方法,就决定我们所说的 8 种工作模式。下面,我们来列表阐述,如表 13.1.3.1。

5.2. 端口输出数据寄存器(GPIOx_ODR)(x=A..E)
该寄存器用于控制GPIOx的输出高低电平。该寄存器32位,低16位为数据有效位,高16位为保留位。

该寄存器低 16 位有效,分别对应每一组 GPIO 的 16 个引脚。当 CPU 写访问该寄存器,如果对应的某位写 0(ODRy=0),则表示设置该 IO 口输出的是低电平,如果写 1(ODRy=1),则表示设置该 IO 口输出的是高电平,y=0~15。
此外,除了 ODR 寄存器,还有一个寄存器也是用于控制 GPIO 输出的,它就是 BSRR 寄存器。
5.3. 端口输入数据寄存器(GPIOx_IDR)(x=A..E)
该寄存器可以读出GPIOx的端口的引脚状态。

5.4. 端口置位/复位寄存器(GPIOx_BSRR) (x=A..E)
该寄存器用于控制GPIOx的输出高低电平。该寄存器位32位,高16位为清除位,低16位为设置位。

5.5. 端口位设置/清除寄存器(GPIOx_BRR) (x=A..E)
该寄存器用于清除GPIOx组的位,高16位用于保留,低16位用来清除0~15口。


5.6. ODR和BSRR寄存器控制输出有什么区别?
使用ODR,在读和修改访问之间产生中断时,可能会发生风险,BSRR则无风险。

总的来说,建议大家使用BSRR寄存器控制输出。
6. 通用外设驱动模型(四步法)




7. GPIO配置步骤






8. 点亮一个LED灯(成为点灯大师的第一步)



分析IO应该设置为什么模式?推挽输出。开漏输出需要接外部或内部上拉电阻。




HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);HAL_Delay(500);
9. 按键控制控制LED

如何消除抖动波形?
两种方法:软件消抖,通过延时跳过抖动的时间段,在判断IO输入电平。
硬件消抖,通过电路设计去除抖动波形,比如RS触发器、电容滤波。
按键原理图(精英板)

有三个按键,PA0、PE4、PE3。
分析IO应该设置为什么模式?
KEY_UP(PA0):接VCC,按下时为高电平,不按下为低电平。所以要设置为下拉输入,默认低电平。
KEY0(PE4):接GND,按下时为低电平,不按下为高电平。所以要设置为上拉输入,默认高电平。
KEY1(PE3):接GND,按下时为低电平,不按下为高电平。所以要设置为上拉输入,默认高电平。
int main(void)
{HAL_Init(); sys_stm32_clock_init(RCC_PLL_MUL9); delay_init(72); led_init(); key_init(); while(1){ int ret=key_scan(); if(ret==1){HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);}}
}
void key_init(void)
{GPIO_InitTypeDef key_init_struct;__HAL_RCC_GPIOE_CLK_ENABLE(); /* IO口PE时钟使能 */key_init_struct.Pin = GPIO_PIN_3; /* KEY0引脚 */key_init_struct.Mode = GPIO_MODE_INPUT; /* 输入模式 */key_init_struct.Pull = GPIO_PULLUP; /* 上拉 */key_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */HAL_GPIO_Init(GPIOE, &key_init_struct) ; /* 初始化KEY0引脚 */
}uint8_t key_scan(void)
{if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==0){delay_ms(10); //消抖if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==0) //读取按键返回值{while(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==0); //等待按键松开return 1; //按键按下时返回1,没有返回0}}return 0;
}相关文章:
【STM32HAL-----GPIO】
1. 什么是GPIO?(了解) 2. STM32 GPIO简介 2.1. GPIO特点 2.2. GPIO电气特性 2.3. GPIO引脚分布图 IO引脚分布特点:按组存在、组数视芯片而定、每组最多16个IO引脚。 3. IO端口基本结构介绍 4. GPIO八种工作模式 4.1. 输入浮空 特…...
Java Web开发高级——单元测试与集成测试
测试是软件开发的重要环节,确保代码质量和功能的正确性。在Spring Boot项目中,单元测试和集成测试是常用的两种测试类型: 单元测试:测试单个模块(如类或方法)是否按预期工作。集成测试:测试多个…...
编译chromium笔记
编译环境: windows10 powershell7.2.24 git 2.47.1 https://storage.googleapis.com/chrome-infra/depot_tools.zip 配置git git config --global user.name "John Doe" git config --global user.email "jdoegmail.com" git config --global …...
Web开发 -前端部分-CSS3新特性
1 CSS概述 2 CSS3私有前缀 3 CSS3的长度单位 代码实现: <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...
【基础篇】什么是SQL注入,如何防止?
什么是 SQL 注入,如何防止? SQL 注入(SQL Injection)是一种常见的网络安全漏洞,它发生在 Web 应用程序中,当恶意用户在输入数据时,将恶意的 SQL 代码插入到输入中,从而导致应用程序…...
Swift语言的数据结构
Swift语言的数据结构 Swift是一种现代化的编程语言,它以安全性、性能和简洁性著称。尽管Swift通常被视为面向对象的语言,但它也支持函数式编程的特性,使得开发者可以以多种方式构建应用程序。在Swift中,数据结构是编程的基础&…...
牛客周赛 Round 77
题目链接:牛客周赛 Round 77 A. 时间表 tag:签到 B. 数独数组 tag:签到 Description:给定n个数,每个数的范围为1-9,问能否经过排列,使其每个长度为9的连续子数组都包含1-9这9个数字。 Sol…...
浅谈云端编辑器,分析其亮点与不足
浅谈云端编辑器,分析其亮点与不足 这个云端编辑器界面可以分为左侧题目筛选栏、中间题目描述与代码编辑区域、右侧AI提示功能三部分。以下是详细的分析: 1. 左侧题目筛选栏 层次结构清晰:左侧栏展示了一个层级结构,题目按主题分…...
web应用引入cookie机制的用途和cookie技术主要包括的内容
web应用引入cookie机制,用于用户跟踪。 (1)HTTP响应报文中的Cookie头行:set-Cookie (2)用户浏览器在本地存储、维护和管理的Cookie文件 (3)HTTP请求报文中的Cookie头行:…...
【HTML+CSS】使用HTML与后端技术连接数据库
目录 一、概述 1.1 HTML前端 1.2 后端技术 1.3 数据库 二、HTML表单示例 三、PHP后端示例 3.1 连接数据库 3.2 接收数据并插入数据库 四、安全性 4.1 防止SQL注入 4.2 数据验证与清洗 五、优化 5.1 索引优化 5.2 查询优化 六、现代Web开发中的最佳实践 6.1 使用…...
「2024·我的成长之路」:年终反思与展望
文章目录 1. 前言2.创作历程2.1 摆烂期2.2 转变期3. 上升期 2. 个人收获3.经验分享4. 展望未来 1. 前言 2025年1月16日,2024年博客之星入围公布,很荣幸获得了这次入围的机会。2024年对我个人是里程碑的一年,是意义非凡的一年,是充…...
C#PaddleOCRSharp使用
using PaddleOCRSharp;namespace PaddleOCRSharpDemo {internal class Program{static void Main(string[] args){//中英文模型V3模型OCRModelConfig config null;//OCR参数OCRParameter oCRParameter new OCRParameter();oCRParameter.cpu_math_library_num_threads 6;//预…...
【Excel】【VBA】Reaction超限点筛选与散点图可视化
【Excel】【VBA】Reaction超限点筛选与散点图可视化 功能概述 这段代码实现了以下功能: 从SAFE输出的结果worksheet通过datalink获取更新数据从指定工作表中读取数据检测超过阈值的数据点生成结果表格并添加格式化创建可视化散点图显示执行时间 流程图 #mermaid-…...
京华春梦,守岁这方烟火人间
文章目录 准备篇温度公共交通人流情况年货采购 文化体验传统庙会博物馆与展览烟花灯会祈福仪式民俗集市现代氛围其他活动 美食盛宴传统美食与特色小吃传统老字号京城新宠特色小吃街多元美食街 准备篇 温度 北京春节期间气温较低,室外通常在零下几度到零上几度之间…...
学Python的人…
学Python的人… 一、Python能干什么? 1.爬虫:前几年,深度学习还没发展起来的时候,书店里Python就和爬虫挂钩,因为Python写爬虫确实方便。 2.数据分析:Python有各种的数据分析库可以方便使用࿰…...
WebSocket 和 Socket 的区别
一、协议层次和工作方式 1.1 )Socket 1.1.1)Socket位于传输层,通常使用TCP或UDP协议 1.1.2)提供了一个通用的网络编程接口,允许应用程序通过它发送和接收数据 1.1.3)一般需要手动管理连接,错…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)
重新创建WebApi项目,安装Microsoft.AspNetCore.Authentication.JwtBearer包,将之前JwtBearer测试项目中的初始化函数,jwt配置类、token生成类全部挪到项目中。 重新编写login函数,之前测试Cookie和Session认证时用的函数适合m…...
【SpringBoot】SpringBoot中分页插件(PageHelper)的使用
目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2?使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户(如果用户有一万条数据呢),而是分页展示给用户,这就是分页查询…...
【优选算法】4----盛最多水的容器
开始有点上强度了铁子们,这道算法题也是可以说很难理解的~ 想了好久才想明白~ ---------------------------------------begin--------------------------------------- 题目解析: 这一道题刚看题目,根本不知道在讲啥,但看到体积…...
EDI安全:2025年数据保护与隐私威胁应对策略
在数字化转型的浪潮中,电子数据交换(EDI)已成为企业间信息传递的核心基础设施。然而,随着数据规模的指数级增长和网络威胁的日益复杂化,EDI安全正面临前所未有的挑战。展望2025年,企业如何构建一套全面、高…...
让AI学习最优抓取:基于快马平台探索OpenClaw Onboard的智能参数优化方案
最近在做一个机器人抓取相关的项目,遇到了参数调优的难题。传统的试错法效率太低,于是尝试用AI辅助开发的方式来解决这个问题。在InsCode(快马)平台上折腾了一周,终于搞出了一个智能参数优化方案,效果还不错,分享下我的…...
解锁3大维度:Helix Toolkit如何重构.NET开发者的3D开发体验
解锁3大维度:Helix Toolkit如何重构.NET开发者的3D开发体验 【免费下载链接】helix-toolkit Helix Toolkit is a collection of 3D components for .NET. 项目地址: https://gitcode.com/gh_mirrors/he/helix-toolkit Helix Toolkit是一套功能完备的.NET 3D组…...
Qwen3.5-9B Visio图表智能生成:根据文本描述自动创建流程图与架构图
Qwen3.5-9B Visio图表智能生成:根据文本描述自动创建流程图与架构图 1. 引言:告别手动绘图的烦恼 你有没有遇到过这样的情况?开会讨论完一个业务流程,需要把它画成流程图;或者设计了一个系统架构,得在Vis…...
MATLAB/Simulink三相四桥臂逆变器仿真模型:电压外环电流内环控制策略下的负载平衡与...
matlab/simulink三相四桥臂逆变器仿真模型 采用的是电压外环电流内环控制策略,交流测可以接不平衡负载,在负载不平衡的情况下依然可以保持输出电压对称。 直流侧输入电压范围450V~2000V均可。 交流测输出电压为380/220V,不平衡负载和平衡负载…...
避坑指南:正在运行的 Java 线程,到底把“代码逻辑”藏在 JVM 的哪里了?
避坑指南:正在运行的 Java 线程,到底把“代码逻辑”藏在 JVM 的哪里了?在并发编程的世界里,我们经常会写出这样的代码:启动 100 个线程,去执行同一个方法。 这时候,如果你停下来思考一个极其刁钻…...
保姆级教程:用阿里云物联网平台给你的ESP32实现远程OTA升级(Arduino/PlatformIO通用)
ESP32远程OTA升级实战:基于阿里云物联网平台的完整解决方案 想象一下这样的场景:你开发的智能家居设备已经部署在用户家中,突然发现一个关键漏洞需要紧急修复。传统方式需要用户手动下载固件或返厂升级,而远程OTA(Ove…...
企业SEO网站推广的优势和劣势有哪些
企业SEO网站推广的优势分析 在当今互联网时代,企业SEO网站推广已经成为一种必不可少的数字营销手段。无论是中小企业还是大型企业,都在竞争激烈的市场中寻找最佳的方式来提升品牌知名度和销售额。企业SEO网站推广究竟有哪些优势呢?以下将从几…...
Qwen3-0.6B-FP8部署案例:跨境电商多语种商品描述批量生成系统
Qwen3-0.6B-FP8部署案例:跨境电商多语种商品描述批量生成系统 1. 引言:跨境电商的文案难题与AI解法 如果你是做跨境电商的,肯定遇到过这样的头疼事:一款产品要上架到不同国家的平台,比如美国站、日本站、德国站&…...
Wan2.2-I2V-A14B企业知识库联动:从内部文档自动生成培训视频
Wan2.2-I2V-A14B企业知识库联动:从内部文档自动生成培训视频 1. 企业知识管理的新范式 在当今快节奏的商业环境中,企业知识管理正面临前所未有的挑战。传统文档形式的培训材料往往存在几个痛点: 更新不及时导致信息滞后员工学习效率低下知…...
终极指南:Sapiens核心架构解析——从300万图像预训练到多任务微调的完整路径
终极指南:Sapiens核心架构解析——从300万图像预训练到多任务微调的完整路径 【免费下载链接】sapiens High-resolution models for human tasks. 项目地址: https://gitcode.com/gh_mirrors/sa/sapiens Sapiens是一个专注于高分辨率人体任务的深度学习模型项…...
