STM32寄存器开发练习(二):GPIO的工作模式
前言上篇文章我们点亮了LED用的是推挽输出模式。当我们去查STM32的参考手册时会发现GPIO有8种工作模式那这么多模式什么时候该用哪个这篇文章我们就来梳理一下GPIO的8种工作模式以及它们的应用场景。为什么要了解GPIO的工作模式你可能会问我只想点亮一个LED为什么要了解这么多模式原因是不同的外设需要不同的GPIO模式按键输入、PWM输出、I2C通信、ADC采集……每种应用场景都有对应的最佳GPIO模式如果模式选错了外设可能不工作或者工作不稳定所以了解GPIO的工作模式是STM32开发的基础。STM32 GPIO的8种工作模式STM32的GPIO可以分为两大类输出模式和输入模式每类各有4种。输出模式4种模式说明典型应用推挽输出(Push-Pull)能主动输出高、低电平LED控制、普通数字信号输出、驱动芯片使能脚开漏输出(Open-Drain)只能输出低电平高电平需要外接上拉电阻I2C总线、电平转换复用推挽输出GPIO 被外设接管引脚功能由片上外设决定如PWM、串口TXPWM输出、USART_TX复用开漏输出GPIO 被外设接管引脚功能由片上外设决定如I2CI2C_SDA、I2C_SCL输入模式4种模式说明典型应用浮空输入(Floating)引脚电平不确定易受干扰外部信号输入外部已有明确电平驱动上拉输入(Pull-up)内部上拉电阻无外部信号时为高电平按键输入按键另一端接GND、I²C 总线输入下拉输入(Pull-down)内部下拉电阻无外部信号时为低电平按键输入按键另一端接VCC、检测高电平有效的触发信号模拟输入(Analog)关闭数字缓冲器直接连接ADC或比较器电压采集、传感器信号采集输出模式详解1. 推挽输出Push-Pull原理引脚可以主动输出高电平3.3V或低电平0V内部有两个MOS管PMOS NMOS一个接VCC一个接GND输出高电平时上管导通输出低电平时下管导通特点✅ 驱动能力强能输出20mA左右✅ 高低电平切换快✅ 不需要外接上拉电阻应用场景LED控制、继电器控制、蜂鸣器控制普通数字信号输出驱动芯片使能脚配置方法寄存器编程c// 配置PA0为推挽输出、50MHz GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 GPIOA-CRL | (0x3 0); // CNF000推挽输出MODE01150MHz2. 开漏输出Open-Drain原理引脚只能主动输出低电平高电平需要外接上拉电阻输出低电平时内部MOS管导通引脚被拉到低电平输出高电平时MOS管截止引脚靠外部上拉电阻拉到高电平特点✅ 可以实现电平匹配比如用5V上拉就能输出5V电平✅ 支持线与多个开漏输出接在一起任意一个输出低电平总线就是低电平❌ 高电平切换速度慢受上拉电阻影响应用场景I2C总线SDA和SCL都是开漏输出电平匹配3.3V MCU控制5V设备多个设备共享一根信号线配置方法寄存器编程c// 配置PA0为开漏输出、50MHz GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 GPIOA-CRL | (0x7 0); // CNF001开漏输出MODE01150MHz3. 复用推挽输出 / 复用开漏输出原理和普通的推挽/开漏输出一样但输出信号来自外设不是来自GPIOx_ODR寄存器比如PWM信号来自定时器串口TX信号来自USART模块应用场景PWM输出TIMx_CHx串口发送USARTx_TXSPI时钟和数据SPIx_SCK、SPIx_MOSI配置方法寄存器编程c// 配置PA8为复用推挽输出、50MHzTIM1_CH1 GPIOA-CRH ~(0xF 0); // 清除CNF8和MODE8位 GPIOA-CRH | (0xB 0); // CNF810复用推挽输出MODE81150MHz输入模式详解1. 浮空输入Floating原理引脚内部既不上拉也不下拉引脚电平完全由外部电路决定如果外部没有接任何东西电平是不确定的可能是高也可能是低特点✅ 外部可以灵活控制电平❌ 如果外部信号不稳定容易误触发应用场景外部有上拉/下拉电阻的场合用于读取数字传感器的输出如DHT11配置方法寄存器编程c// 配置PA0为浮空输入 GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 GPIOA-CRL | (0x4 0); // CNF001浮空输入MODE000输入模式2. 上拉输入Pull-up原理引脚内部有一个上拉电阻约40kΩ把引脚拉到高电平如果外部把引脚拉到低电平引脚就读到低电平特点✅ 默认高电平适合按键接GND的场合✅ 抗干扰能力强应用场景按键输入按键另一端接GND读取开关状态配置方法寄存器编程c// 配置PA0为上拉输入 GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 GPIOA-CRL | (0x8 0); // CNF010上拉/下拉输入MODE000输入模式 GPIOA-ODR | (1 0); // ODR01选择上拉或者c// 配置PA0为上拉输入 GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 GPIOA-CRL | (0x8 0); // CNF010上拉/下拉输入MODE000输入模式 GPIOA-BSRR (1 0); // 置位 ODRODR写 1选择上拉更推荐第二种的写法因为操作ODR的过程是读-改-写在中断或多任务中可能被打断而BSRR是原子操作不会被中断打断。3. 下拉输入Pull-down原理引脚内部有一个下拉电阻约40kΩ把引脚拉到低电平如果外部把引脚拉到高电平引脚就读到高电平特点✅ 默认低电平适合按键接VCC的场合✅ 抗干扰能力强应用场景按键输入按键另一端接VCC读取开关状态配置方法寄存器编程c// 配置PA0为下拉输入 GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 GPIOA-CRL | (0x8 0); // CNF010上拉/下拉输入MODE000输入模式 GPIOA-BRR | (1 0); // 清除 ODRODR写 0选择下拉4. 模拟输入Analog原理引脚直接连到ADC模块用于采集模拟电压数字输入缓冲器被禁止引脚的电平变化不会触发中断特点✅ 专门用于ADC采集✅ 功耗低应用场景电位器读数温度传感器电池电压检测配置方法寄存器编程c// 配置PA0为模拟输入 GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 // CNF000MODE000模拟输入模式如何用寄存器配置GPIO模式关键寄存器配置GPIO模式主要用这两个寄存器GPIOx_CRL配置低8位引脚Pin0~Pin7GPIOx_CRH配置高8位引脚Pin8~Pin15每个引脚占用4位CNF[1:0]配置模式输入/输出、推挽/开漏等MODE[1:0]配置速度输入模式下这两位为00实际代码示例示例按键输入上拉输入模式c#include stm32f10x.h int main(void) { // 1. 开启GPIOA时钟 RCC-APB2ENR | (1 2); // 2. 配置PA0为上拉输入假设按键接在PA0另一端接GND GPIOA-CRL ~(0xF 0); // 清除CNF0和MODE0位 GPIOA-CRL | (0x8 0); // CNF010上拉/下拉输入MODE000输入模式 GPIOA-BSRR (1 0); // 置位 ODRODR写 1选择上拉 // 3. 主循环检测按键 while(1) { if ((GPIOA-IDR (1 0)) 0) { // PA0为低电平按键按下 // 做点什么... } } }将上述代码改成使用官方宏定义的形式c#include stm32f10x.h int main(void) { // 1. 开启GPIOA时钟 RCC-APB2ENR | RCC_APB2ENR_IOPAEN; // 2. 配置PA0为上拉输入假设按键接在PA0另一端接GND GPIOA-CRL ~GPIO_CRL_CNF0; // 清除CNF0位 GPIOA-CRL | GPIO_CRL_CNF0_1; // CNF010上拉/下拉输入 GPIOA-CRL ~GPIO_CRL_MODE0; // MODE000输入模式 GPIOA-BSRR GPIO_BSRR_BS0; // 置位 ODRODR写 1选择上拉 // 3. 主循环检测按键 while(1) { if ((GPIOA-IDR GPIO_IDR_IDR0) 0) { // PA0为低电平按键按下 // 做点什么... } } }总结这篇文章我梳理了STM32 GPIO的8种工作模式输出模式推挽输出最常用能输出高/低电平开漏输出用于I2C、电平匹配复用推挽/开漏用于外设功能输入模式浮空输入外部有上拉/下拉时用上拉输入按键接GND时用下拉输入按键接VCC时用模拟输入用于ADC采集作者一个焊板子的人欢迎关注获取更多硬件工程师学习笔记如果觉得有帮助欢迎点赞收藏也欢迎在评论区交流讨论

相关新闻

《何须浅碧深红色》小说|下载|txt

《何须浅碧深红色》小说|下载|txt

资料可下载《何须浅碧深红色》小说全文百度可下载https://pan.baidu.com/s/1fXL7c5bIn6_JdtgZTrXy7g?pwd17jvEnglish Practice Set 47 个人练习草稿,随便记几道题。Part 1 Vocabulary Choose the best word.The flowers in the garden ______ beautifully in spr…

2026/7/2 1:08:27阅读更多 →
三分钟读懂你的QQ群:从聊天记录到数据洞察的魔法工具

三分钟读懂你的QQ群:从聊天记录到数据洞察的魔法工具

三分钟读懂你的QQ群:从聊天记录到数据洞察的魔法工具 【免费下载链接】chatLog QQ群聊天记录分析 项目地址: https://gitcode.com/gh_mirrors/ch/chatLog 你是否曾经好奇,在那些热闹的QQ群里,谁才是真正的"话痨之王"&#x…

2026/7/2 1:08:27阅读更多 →
从推荐系统到大模型:算法工程师的转型实战指南

从推荐系统到大模型:算法工程师的转型实战指南

1. 转型背景与行业趋势观察2019年之前,推荐算法工程师还是互联网行业的热门岗位。当时我在某电商平台负责商品推荐系统,主要用协同过滤和矩阵分解这些传统方法。但到了2020年,明显感觉到行业风向在变——头部公司开始把更多资源投向预训练大模…

2026/7/2 1:08:27阅读更多 →
终极指南:HS2-HF Patch - Honey Select 2游戏体验的完整革命

终极指南:HS2-HF Patch - Honey Select 2游戏体验的完整革命

终极指南:HS2-HF Patch - Honey Select 2游戏体验的完整革命 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否正在为Honey Select 2的日文界面…

2026/7/2 2:38:32阅读更多 →
孤能子视角:Karpathy LLM Wiki,一个人工观察符自动编织系统

孤能子视角:Karpathy LLM Wiki,一个人工观察符自动编织系统

(在以下的与AI互动中,在EIS理论约束下,DeepSeek叫信兄,Kimi叫酷兄,我呢叫水兄。姑且当科幻小说看) 讨论源于文章:【Karpathy又封神,掀翻RAG,把你的笔记变成第二大脑】 https://m.toutiao.com/is/_EjshnuXUC…

2026/7/2 2:38:32阅读更多 →
Pikachu靶场从入门到精通(五):RCE、XXE、SSRF与反序列化漏洞实战

Pikachu靶场从入门到精通(五):RCE、XXE、SSRF与反序列化漏洞实战

摘要:本篇是Pikachu靶场系列教程的第五篇,也是漏洞类型最为“硬核”的一篇,将带领大家攻克四个高危级别的Web安全漏洞模块:RCE(远程命令/代码执行) 、XXE(XML外部实体注入) 、SSRF&a…

2026/7/2 2:38:32阅读更多 →
些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力。然而,你一定曾为这些“高深术语”感到过困扰——依赖倒置•控制反转•依赖注入•面向接口编程。也许时至今日,你仍对它们一知…

2026/7/2 2:38:32阅读更多 →
简述交换机

简述交换机

一根网线直连就可以实现同网络的计算机通信多台计算机之间通信使用网线直连就不方便了,这时候就可以使用交换机作为中转进行通信交换机:交换机接口就是交换机上的插孔,每个插孔都有自己编号交换机中维护着一张MAC地址表,在这张表中…

2026/7/2 2:38:32阅读更多 →
构建现代 Web3 后端:Go + Solidity 全栈技术指南

构建现代 Web3 后端:Go + Solidity 全栈技术指南

1. 引言:Web3 后端的技术革命 在传统 Web2 架构中,后端系统围绕中心化服务器、数据库和 API 构建。Web3 的到来彻底改变了这一范式,将核心逻辑转移到去中心化的区块链网络上。这种转变不仅要求开发者掌握新的编程语言和工具,更需…

2026/7/2 2:33:32阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →