STM32学习笔记——GPIO的八种工作模式
前言stm32单片机的GPIO一共有8种工作模式4种输出模式4种输入模式。分别是通用推挽输出通用开漏输出复用推挽输出复用开漏输出上拉输入下拉输入悬空输入模拟输入。输出工作模式GPIO的四种工作模式可以再次分成具体如何分析推挽开漏复用通用需要从stm32IO口的结构来分析输出部分的电路可以直接简化成下图推挽模式当从输出数据寄存器读取到1的时候P—MOS管导通N—MOS管截止IO口输出1当从输出数据寄存器读取到0的时候N—MOS管导通P—MOS管截止IO口输出0。开漏模式P—MOS管始终截止。当从输出数据寄存器读取到1的时候P—MOS管截止N—MOS管截止IO口成高阻状态当从输出数据寄存器读取到0的时候N—MOS管导通P—MOS管截止IO口输出0。通用模式和复用模式通用模式CPU直接向寄存器写入数据。复用模式单片机上的其他外设来向寄存器写入数据。最大输出速度四种输出模式的代码配置示例下面以 STM32 标准外设库为例演示如何将 GPIO 配置为推挽输出、开漏输出、复用推挽输出和复用开漏输出四种模式。初始化时先开启 GPIO 所在端口的时钟再调用 GPIO_Init 函数完成配置。/* 开启 GPIOA 和 GPIOB 时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; /* 1. 推挽输出驱动 LED、蜂鸣器等需要强驱动能力的负载 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); /* 2. 开漏输出I2C 总线、电平转换、多设备共享总线等场景 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_OD; // 开漏输出 GPIO_Init(GPIOA, GPIO_InitStructure); /* 3. 复用推挽输出USART、SPI、定时器 PWM 等外设输出引脚 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_Init(GPIOA, GPIO_InitStructure); /* 4. 复用开漏输出I2C 外设引脚、需要开漏驱动的复用功能 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_OD; // 复用开漏输出 GPIO_Init(GPIOA, GPIO_InitStructure);实际使用时应根据负载类型和外设需求选择合适的输出模式驱动 LED、蜂鸣器等普通负载常用推挽输出I2C 总线或需要电平转换时使用开漏输出并外接上拉电阻USART、SPI、PWM 等外设信号输出使用复用推挽输出I2C 外设引脚则使用复用开漏输出。输入工作模式输入模式的简化电路图输入上拉电路中接入上拉电阻当GPIO口的状态是1的时候输入数据寄存器也是1GPIO口的状态是0的时候输入数据寄存器也是0当GPIO口悬空的时候输入数据寄存器默认值为1。上拉的意思主要是在GPIO口悬空的时候写入寄存器的默认值是1还是0。输入下拉电路中接入下拉电阻当GPIO口的状态是1的时候输入数据寄存器也是1GPIO口的状态是0的时候输入数据寄存器也是0当GPIO口悬空的时候输入数据寄存器默认值为0。输入浮空电路中不接入如何电阻当GPIO口的状态是1的时候输入数据寄存器也是1GPIO口的状态是0的时候输入数据寄存器也是0当GPIO口悬空的时候输入数据寄存器也悬空。模拟模式后续用到补充四种输入模式的代码配置示例下面以 STM32 标准外设库为例演示如何将 GPIO 配置为上拉输入、下拉输入、浮空输入和模拟输入四种模式。初始化时先开启 GPIO 所在端口的时钟再调用 GPIO_Init 函数完成配置。/* 开启 GPIOA 和 GPIOC 时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; /* 1. 上拉输入按键检测、读取开关状态等场景悬空时默认读到高电平 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; // 上拉输入 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); /* 2. 下拉输入读取需要默认低电平的传感器信号悬空时默认读到低电平 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPD; // 下拉输入 GPIO_Init(GPIOA, GPIO_InitStructure); /* 3. 浮空输入外部已接上拉/下拉电阻或由外部电路确定电平的场景 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; // 浮空输入 GPIO_Init(GPIOA, GPIO_InitStructure); /* 4. 模拟输入ADC 采样、比较器等模拟信号采集场景 */ GPIO_InitStructure.GPIO_Pin GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN; // 模拟输入 GPIO_Init(GPIOA, GPIO_InitStructure);实际使用时应根据外部电路和应用需求选择合适的输入模式按键或开关检测常用上拉输入需要默认低电平的信号可用下拉输入外部电路已确定电平或使用开漏输出驱动时选择浮空输入采集电压、电流等模拟量时必须使用模拟输入模式。驱动GPIO口步骤开启时钟—初始化—写入数据或者读取数据。初始化是选择io口号工作模式输出速度。再调用初始化函数。PA1端口接按键实现当按键按下的时候PA0口的LED亮松开的时候LED灭。代码#include stm32f10x.h int main() { //开启时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //初始化PA0 GPIO_InitTypeDef Init_Struct {0}; Init_Struct.GPIO_Pin GPIO_Pin_0; Init_Struct.GPIO_Speed GPIO_Speed_2MHz; Init_Struct.GPIO_Mode GPIO_Mode_Out_PP; GPIO_Init(GPIOA,Init_Struct); //初始化PA1选择输入上拉当按键为按下的时候输入1按下的时候输入0 Init_Struct.GPIO_Pin GPIO_Pin_1; Init_Struct.GPIO_Mode GPIO_Mode_IPU; GPIO_Init(GPIOA,Init_Struct); while(1) { if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) Bit_RESET)//按下的时候点亮led { GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET); } else //松开的时候led灭 { GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET); } } return 0; }

相关新闻

STM32F103驱动VL53L0X:软件模拟IIC与TOF测距实战解析

STM32F103驱动VL53L0X:软件模拟IIC与TOF测距实战解析

简介:本资源是一套面向嵌入式初学者与STM32开发者的VL53L0X高精度激光测距传感器驱动工程,基于STM32F103系列单片机,采用标准IC接口通信,解决ToF传感器在ARM Cortex-M3平台上的底层驱动适配与快速集成问题,适用于智能小…

2026/9/3 5:40:31 阅读更多 →
Perplexity Pro模型委员会:多LLM协同提升AI问答准确性与可靠性

Perplexity Pro模型委员会:多LLM协同提升AI问答准确性与可靠性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 5:40:31 阅读更多 →
量产级线控制动EMB控制器PCB硬件设计全解析

量产级线控制动EMB控制器PCB硬件设计全解析

继续之前的EMB硬件拆解系列。本文是下篇,重点放在量产级线控制动EMB控制器的PCB硬件方案上。对于从事汽车电子、电控开发、PCB设计或硬件测试的工程师来说,EMB控制器是一块很典型的“功率级数字控制模拟采样”混合板卡,既有12V系统下的百安培…

2026/9/3 5:40:31 阅读更多 →

最新新闻

全栈开源外卖系统“食刻”部署与核心业务调试实战指南

全栈开源外卖系统“食刻”部署与核心业务调试实战指南

简介:这是一套面向外卖平台创业者、中小型技术团队及全栈开发者的完整开源外卖系统解决方案,覆盖用户下单、商户管理、骑手配送、多端协同等核心业务闭环,助力快速搭建可商用的本地化外卖服务平台。资源包共2000个文件,含1266个PH…

2026/9/3 8:19:52 阅读更多 →
电力系统暂态稳定仿真:从DAE求解到MATLAB实现

电力系统暂态稳定仿真:从DAE求解到MATLAB实现

简介:本资源是一套面向电力系统专业本科生、研究生及工程技术人员的3机9节点系统暂态稳定性仿真计算程序,聚焦于故障扰动下发电机功角动态响应分析这一核心问题,适用于课程设计、毕业设计及基础科研建模场景。压缩包共29个文件(21…

2026/9/3 8:19:52 阅读更多 →
MATLAB图像去遮挡修复系统:可复现、可调试、可教学

MATLAB图像去遮挡修复系统:可复现、可调试、可教学

简介:本资源是一套面向数字图像处理课程设计与MATLAB实践学习者的图像去遮挡修复系统,聚焦真实场景中前景栏杆遮挡的智能修复问题,适用于本科高年级或研究生图像处理实验、课程设计及算法对比研究。压缩包共24个文件,含15个核心MA…

2026/9/3 8:19:52 阅读更多 →
MATLAB实现一维卷积神经网络(1D CNN)时间序列预测完整指南

MATLAB实现一维卷积神经网络(1D CNN)时间序列预测完整指南

简介:本资源是一份面向MATLAB初学者与时间序列建模实践者的完整技术实现方案,聚焦单变量时间序列的CNN卷积神经网络预测任务,适用于电力负荷、气象数据、工业传感器信号等典型场景。压缩包共7个文件(717KB)&#xff0c…

2026/9/3 8:19:52 阅读更多 →
速达财务3G系统数据迁移实战:从老旧C/S架构到现代数据库管理

速达财务3G系统数据迁移实战:从老旧C/S架构到现代数据库管理

简介:本资源为速达财务SSTD3G企业版服务器端安装包(v6.37),面向中小企业IT运维人员、财务系统实施工程师及信息化管理员,解决多用户协同环境下财务系统部署、客户端接入与基础配置落地等核心问题。压缩包大小316.81MB&…

2026/9/3 8:19:52 阅读更多 →
基于STM32F103C8T6的智能家居控制系统毕业设计全流程实战

基于STM32F103C8T6的智能家居控制系统毕业设计全流程实战

简介:本资源是一套基于STM32F103C8T6微控制器实现的完整智能家居控制系统,面向计算机、物联网、自动化等专业的本科生,专为毕业设计、课程设计及嵌入式项目实战打造。系统涵盖温湿度采集(DHT11)、MQTT协议接入OneNet云…

2026/9/3 8:18:51 阅读更多 →

日新闻

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

AI智能体辅助JS逆向:从V8环境搭建到补环境实战

先别急着点开,这不是劝退文,而是想讲清楚一件事:用 AI 做逆向值不值得学?如果要用,怎么搭一套“V8 环境 AI 智能体”来提升效率。最近逆向圈、爬虫圈都在聊 AI Agent、AST 工程逆向、JS 逆向这些词,很多新手…

2026/9/3 0:00:29 阅读更多 →
安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

安卓设备通过修改机型信息解锁游戏高帧率:原理、操作与风险指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →
ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

ARM版OpenJDK 11安装部署全攻略:下载、配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 0:00:29 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/3 4:22:22 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/3 4:22:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/3 4:22:59 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/3 4:17:49 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/3 4:18:56 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/3 4:21:44 阅读更多 →