news 2026/6/25 20:28:57

深入解析GPIO:嵌入式开发必备接口,按键与点灯实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析GPIO:嵌入式开发必备接口,按键与点灯实验

GPIO

​​​​​基本概念

GPIO(General-purpose I/Os)通用输入输出接口

GPIO是一种在嵌入式系统中广泛使用的接口,它允许系统与外部设备进行交互。GPIO引脚可以配置为输入或输出模式,以读取或控制外部设备的状态。

输入模式:GPIO作为输入时,可以接收来自传感器、开关或其他外部设备的信号。这些信号被传递给嵌入式系统的处理器,以便系统可以根据这些信号做出相应的决策或执行特定的操作。

输出模式:GPIO作为输出时,可以向外部设备发送数字信号。例如,控制LED的亮灭、驱动电机运转等。通过改变输出信号的状态,嵌入式系统可以与外部设备进行交互。

GPIO内部结构

根据stm32U575芯片手册找到GPIO内部框图,基本各个型号的框图差不多。

元器件介绍

保护二极管(1)防止电压过大,保护电路(2)防止反向电动势(电压,就是反向截止)

ESD:防静电保护电路

上拉电阻上拉电阻是将一个不确定的信号拉高;通过一个电阻与电源正极(通常是VCC或 VDD)相连,以保证在默认状态下该信号处于高电平。

下拉电阻下拉电阻是将一个不确定的信号拉低,通过一个电阻与电源负极(通常是GND)相连,使得在默认状态下该信号处于低电平。

它们是电子电路中常见的元件,在电路中主要起到稳定电平、确定默认状态等作用

施密特触发器施密特触发器可以将一个模拟信号波形整型为数字电路能处理的方波波形,起到整型的作用。

施密特触发器和一般比较器不同的点在于,它可以有两个参考电压,分别是正向阈值电压和反向阈值电压。

1. 输入电压 > 正向阈值电压(0.7*VDD),输出高电平;

2. 输入电压 < 负向阈值电压(0.3*VDD),输出低电平;

3.负向阈值电压 < 输入电压 < 正向阈值电压,输出不变。

VDD、VCC、VSS:

VDD:元器件内部的工作电压,范围是1.7v~3.3v

VCC:接入电路的电压

VSS:公共接地端电压

工作模式

浮空输入

特点:上下拉电阻全部关闭

优点:信号完全由外部决定

缺点:当引脚没有接外部电路的时候,其电平信号是不确定的,易受干扰

上拉输入

特点:当外部没有信号输入时,提供默认的高电平输入的电平不会因上下浮动而导致输入信号不稳定

应用:按键检测开关状态读取外部中断信号输入

下拉输入

特点:当外部没有信号输入时,提供默认的低电平,输入的电平不会因上下浮动而导致输入信号不稳定

外界接的是什么电平,读到的就是什么

模拟输入

特点:信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,将原始电压信号传送到片上外设。 所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。

应用:读取传感器数据等

推挽输出

推挽输出中P-MOS和N-MOS属于可激活状态,具备输出高低电平的能力

当CPU输出高电平1时,经过输出控制器后变为0,此时PMOS管导通,输出高电平,此时是把电流推出去。

当CPU输出低电平0时,经过输出控制器后变为1,此时NMOS导通,输出低电平,此时IO引脚接外部电路时是将电流挽的过程。

开漏输出

开漏输出中PMOS管不工作,只能输出低电平,无法真正输出高电平即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。

当CPU输出低电平0时,NMOS管导通,输出低电平

当CPU输出高电平1时,NMOS管不导通,呈现高阻态相当于电路断开

推挽输出和开漏输出区别:

推挽输出的优缺点:

优点:可以输出高电平和低电平

缺点:输出的高电平值固定为VDD(3.3v),驱动高电压(5v)电器时驱动不起来

开漏输出的优缺点:

缺点:只能输出低电平

优点:通过外接上拉电阻输出高电平,电压大小自己决定,比较灵活;

可以实现线与功能。

复用推挽

复用是指:将 GPIO 引脚的控制权转移到其他片上外设(如 UART、I2C、SPI、TIMER 等),引脚的输出 / 输入信号由这些外设直接控制,而非通过 GPIO 的 ODR 寄存器(输出数据寄存器)。

复用开漏

HAL库实现点灯实验

​​​​​​​实验要求

控制扩展板的LD1灯闪烁

​​​​​​​原理图分析

结论:控制LD1灯的亮灭,只需要往PC4引脚输出高低电平即可。

​​​​​​​cubemx配置

启动SWD调试接口

配置PC4为GPIO_Output,推挽输出、无上下拉、低速

生成keil代码即可

​​​​​​​代码实现
intmain(void){while(1){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_SET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_RESET);HAL_Delay(500);}}

按键实验

​​​​​​​实验要求

按键KEY1按下时控制LD3灯进行反转。

​​​​​​​原理图分析

结论:KEY1按键连接到了PC9引脚,当按键按下时PC9引脚读到低电平,按键抬起时读到是高电平。

​​​​​​​cubemx配置

​​​​​​​代码实现
while(1){//条件满足按键按下if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)==0){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);}}
​​​​​​​按键抖动问题

以上代码下载后,当按键按下时,LD3进行反转的效果不好,原因如下:

  • 首先,当按键按下 / 释放时,触点会因机械弹性产生5~20ms 的高频弹跳(抖动),直接导致 GPIO 引脚的电平快速跳变

  • 但是我们stm32U5的KEY按键都并联了电容电路,电容具有滤波效果,可以通过充放电 “吸收” 抖动信号,从而平滑掉高频抖动,输出相对稳定的高低电平。这就是硬件消抖的方式。

  • 按键按下抬起的波形通过IO引脚输入到GPIO中,经过施密特触发器进行整形后,波形如下(绿色方波信号):

  • 下面通过逻辑分析仪得到的PC9和PC13引脚的电平信号,紫色为按键按下时,绿色表示PC13引脚电平发生了多次的跳变。

按键消抖

这里按键消抖并不是实际意义上的消抖,而是按键按下时触发一次操作的优化处理

​​​​​​​延时消抖
while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///读PC9电平状态,如果是低电平,说明按键按下,让灯进行反转if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_9) == 0){HAL_Delay(100);if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)== 0)//让PC13(LD3)实现电平反转(灯的亮灭)HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);}}

​​​​​​​抬手检测

代码实现:

while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///抬手检测if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)==0){//循环判断按键状态,抬起时反转while(!HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9));HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);}}


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 4:51:13

数论难题挑战:用VibeThinker尝试破解哥德巴赫猜想简化版

用VibeThinker挑战数论难题&#xff1a;一次轻量模型的高阶推理实践 在编程竞赛圈里&#xff0c;一个流传已久的段子是&#xff1a;“能手推哥德巴赫猜想的人&#xff0c;早就去拿菲尔兹奖了。”这句玩笑背后&#xff0c;其实藏着人们对数学深度与逻辑严密性的敬畏。然而&#…

作者头像 李华
网站建设 2026/6/20 18:35:57

VibeThinker-1.5B代码生成实测:结构化逻辑拆解能力媲美中型模型

VibeThinker-1.5B代码生成实测&#xff1a;结构化逻辑拆解能力媲美中型模型 在算法竞赛的深夜训练营里&#xff0c;一个学生盯着“Two Sum”变种题苦思良久——输入数组有序、要求常数空间、不能使用哈希表。他尝试了几种双指针写法都未能通过所有测试用例。如果这时有个助手能…

作者头像 李华
网站建设 2026/6/12 4:52:07

Magistral Medium被超越?VibeThinker-1.5B在v6测试中反超

VibeThinker-1.5B&#xff1a;小模型如何在推理赛道反超大模型&#xff1f; 在AIME数学竞赛题上得分80.3&#xff0c;超越参数量超400倍的DeepSeek-R1&#xff1b;在LiveCodeBench v6编程基准测试中拿下51.1分&#xff0c;首次超过Magistral Medium&#xff08;50.3&#xff09…

作者头像 李华
网站建设 2026/6/15 15:54:38

图解说明工业控制PCB布线规则设计典型结构

工业控制PCB布线实战&#xff1a;从噪声隔离到信号完整性的系统设计 在工业自动化现场&#xff0c;一台PLC模块突然频繁重启&#xff1b;一个温度采集系统读数漂移严重&#xff0c;误差超出允许范围&#xff1b;一条CAN总线通信时断时续&#xff0c;却查不出明显故障点——这些…

作者头像 李华
网站建设 2026/6/12 6:14:54

企业能否用VibeThinker降本增效?适用场景与限制分析

企业能否用VibeThinker降本增效&#xff1f;适用场景与限制分析 在AI模型越做越大、算力军备竞赛愈演愈烈的今天&#xff0c;一家企业是否还有可能以不到一万人民币的成本&#xff0c;部署一个能解奥数题、写算法代码的“智能专家”&#xff1f;这听起来像天方夜谭&#xff0c;…

作者头像 李华
网站建设 2026/6/10 17:04:48

【稀缺技术揭秘】:企业级Docker镜像缓存策略,仅1%工程师掌握

第一章&#xff1a;企业级Docker镜像缓存的核心价值在现代企业级应用交付体系中&#xff0c;Docker镜像的构建与分发效率直接影响开发迭代速度和部署稳定性。镜像缓存机制作为优化CI/CD流水线的关键环节&#xff0c;能够显著减少重复拉取和构建的时间开销。提升构建效率 Docker…

作者头像 李华