STM32 GPIO 第一课学习笔记

发布时间:2026/10/8 19:30:02
STM32 GPIO 第一课学习笔记
STM32 GPIO 第一课学习笔记嵌入式学习笔记 · 第 1 课今天学习了 GPIO 的定义与原理、4 种输出模式、4 种输入模式整理成文方便复习。文章目录STM32 GPIO 第一课学习笔记一、GPIO 的定义和原理二、GPIO 的 4 种输出模式1. 通用 vs 复用输出由谁控制2. 推挽 vs 开漏内部结构区别3. 在 STM32CubeMX 中怎么选三、GPIO 的 4 种输入模式1. 浮空输入2. 上拉输入3. 下拉输入4. 模拟输入5. 在 STM32CubeMX 中怎么选四、8 种模式速查表五、记忆口诀汇总一、GPIO 的定义和原理GPIO General Purpose Input/Output通用输入输出端口。它是单片机/处理器上的一种通用引脚可以通过软件配置为功能说明输入读取外部电平高/低输出向外输出高/低电平复用功能交给片上外设使用如 UART、SPI、I2C、PWM、定时器等模拟功能作为 ADC/DAC 等模拟通道STM32 的 I/O 引脚内部结构框图来自参考手册二、GPIO 的 4 种输出模式4 种输出模式通用输出推挽、通用输出开漏、复用输出推挽、复用输出开漏。1. 通用 vs 复用输出由谁控制类型输出由谁控制通用由 GPIO 输出数据寄存器控制CPU 写 1 输出高写 0 输出低复用输出不再由 GPIO 数据寄存器直接控制而是由某个外设控制如 UART_TX、SPI_SCK、PWM记忆通用 CPU 直接管复用 外设接管。2. 推挽 vs 开漏内部结构区别类型内部结构特点推挽输出内部上管P-MOS导通输出高下管N-MOS导通输出低能主动输出高、低电平开漏输出只有下管N-MOS输出低时拉低输出高时高阻态只能拉低输出高电平要靠外部上拉电阻记忆推挽 能高能低开漏 只能拉低高靠上拉。下面用 STM32 HAL 库演示推挽输出和开漏输出的配置差异。以 PC14 为例分别初始化为推挽输出和开漏输出/* 推挽输出能主动输出高、低电平适合驱动 LED、蜂鸣器等 */voidGPIO_PushPull_Init(void){GPIO_InitTypeDef GPIO_InitStruct{0};__HAL_RCC_GPIOC_CLK_ENABLE();// 使能 GPIOC 端口时钟GPIO 外设才能工作GPIO_InitStruct.PinGPIO_PIN_14;// 选择 PC14 引脚GPIO_InitStruct.ModeGPIO_MODE_OUTPUT_PP;// 推挽输出模式Push-PullGPIO_InitStruct.PullGPIO_NOPULL;// 推挽输出本身能驱动高低电平无需上/下拉GPIO_InitStruct.SpeedGPIO_SPEED_FREQ_LOW;// 低速即可降低功耗和噪声HAL_GPIO_Init(GPIOC,GPIO_InitStruct);// 将配置写入寄存器完成初始化}/* 开漏输出只能拉低输出高电平要靠外部上拉电阻适合 I2C、电平转换等 */voidGPIO_OpenDrain_Init(void){GPIO_InitTypeDef GPIO_InitStruct{0};__HAL_RCC_GPIOC_CLK_ENABLE();// 使能 GPIOC 端口时钟GPIO_InitStruct.PinGPIO_PIN_14;// 选择 PC14 引脚GPIO_InitStruct.ModeGPIO_MODE_OUTPUT_OD;// 开漏输出模式Open-DrainGPIO_InitStruct.PullGPIO_PULLUP;// 开漏输出高电平靠上拉这里使能内部上拉GPIO_InitStruct.SpeedGPIO_SPEED_FREQ_LOW;// 低速即可HAL_GPIO_Init(GPIOC,GPIO_InitStruct);// 将配置写入寄存器完成初始化}对比小结推挽用GPIO_MODE_OUTPUT_PP开漏用GPIO_MODE_OUTPUT_OD开漏输出高电平必须依赖上拉内部GPIO_PULLUP或外部电阻推挽则不需要。3. 在 STM32CubeMX 中怎么选打开 STM32CubeMX在引脚配置里选中某个 GPIO 引脚GPIO mode 下拉菜单中可以看到两种输出结构以 PC14 为例选 Output Push Pull推挽输出后的完整配置三、GPIO 的 4 种输入模式1. 浮空输入内部无上拉/下拉引脚电平完全由外部电路决定若外部悬空电平不确定容易受干扰适合外部已有明确驱动源的场景如 UART RX、SPI MISO。2. 上拉输入内部通过上拉电阻接到 VDD无外部输入时默认读到高电平适合按键按下接地、外部开漏输出等场景。3. 下拉输入内部通过下拉电阻接到 GND无外部输入时默认读到低电平适合按键按下接高、外部推挽输出等场景。4. 模拟输入关闭数字输入缓冲和施密特触发器引脚直接连到模拟外设如 ADC此时读 GPIO 数据寄存器没有意义适合 ADC 采样、DAC 输出等。一句话总结GPIO 输入 高阻监听 可配上拉/下拉 经施密特触发器读入寄存器。5. 在 STM32CubeMX 中怎么选输入模式也在 CubeMX 中配置。以 PC13 为例GPIO mode 选 Input mode再在 GPIO Pull-up/Pull-down 里选择上拉/下拉上下拉一共有三种选项对应上文中的浮空No pull-up and no pull-down、上拉Pull-up、下拉Pull-down四、8 种模式速查表模式谁控制电平行为适用场景通用输出推挽CPU可输出高 / 低电平—通用输出开漏CPU只能拉低高电平为高阻态需上拉—复用输出推挽外设可输出高 / 低电平UART_TX、SPI_SCK、PWM复用输出开漏外设只能拉低高电平为高阻态需上拉—浮空输入—电平完全由外部决定悬空易受干扰UART RX、SPI MISO上拉输入—无输入时默认高电平按键按下接地、外部开漏输出下拉输入—无输入时默认低电平按键按下接高、外部推挽输出模拟输入—关闭数字缓冲直连模拟外设ADC 采样、DAC 输出五、记忆口诀汇总通用 CPU 直接管复用 外设接管。推挽 能高能低开漏 只能拉低高靠上拉。GPIO 输入 高阻监听 可配上拉/下拉 经施密特触发器读入寄存器。本文为第一课学习笔记如有错误欢迎评论区指正。