STM32硬件
2026/8/31 15:35:15 网站建设 项目流程

一、STM32高级外设总线

在STM32中,APB1APB2是两条用于连接不同外设的高级外设总线(Advanced Peripheral Bus)。

它们之间最核心的区别在于速度等级,我们可以把它们理解为芯片内部连接不同外设的“高速路”和“普通路”。

🔎 APB1 vs APB2:核心差异速览

特性APB1 (低速总线)APB2 (高速总线)
速度等级低速外设总线高速外设总线
最大频率 (F1系列)36 MHz72 MHz
最大频率 (F4系列)42 MHz84 MHz
主要特点连接对时钟频率要求不高的外设,有助于优化功耗连接需要高响应速度的外设,保证性能
典型外设USART2/3, I2C, SPI2/3, 通用定时器(TIM2-7), CAN等所有GPIO(GPIOA-GPIOG), USART1, SPI1, ADC, 高级定时器(TIM1/8)等

从表格中可以看到,所有GPIO端口都挂载在高速的APB2总线上,这也是为什么你的代码中开启GPIOA时钟时,使用的是RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE)

💡 为什么这样设计?

这种设计主要有两个目的:

  1. 按需分配,保障性能:将USART1(高速串口)、SPI1(高速SPI)、ADC(模数转换器)等需要高速时钟的外设挂在APB2上;而将I2C、CAN、USART2/3等对速度不敏感的外设放在APB1上。

  2. 优化功耗:STM32为了省电,所有外设时钟默认是关闭的。这种分组设计允许我们独立控制每条总线的时钟频率,甚至可以单独关闭某条总线上所有不用的外设时钟,从而精细管理功耗。

🧭 如何查找外设挂在哪个总线?

最可靠的方法是查阅你所用芯片的《参考手册》(Reference Manual)。在手册的存储器映射(Memory Map)章节,通常会有一个表格,清晰地列出所有外设及其所属的总线和地址。

一个小技巧是,在代码中通过宏定义的名字也能看出来:

  • APB1的外设,其时钟使能宏通常以RCC_APB1Periph_开头。

  • APB2的外设,其时钟使能宏通常以RCC_APB2Periph_开头。

💎 总结

简单来说,配置外设时钟时,可以遵循这个原则:高速外设(如GPIO、USART1、SPI1、ADC、高级定时器)找APB2,低速外设(如USART2/3、I2C、SPI2/3、通用定时器)找APB1

二、STM32 GPIO 的输出模式

STM32 GPIO 的输出模式一共有四种,可以分为“通用输出”“复用输出”两大类。

  • 通用输出:引脚由你写的代码(如GPIO_SetBits)直接控制。

  • 复用输出:引脚由芯片内部的外设(如串口、定时器)控制。

下面我们来逐一了解这四种模式。

⚡️ 推挽输出 (Push-Pull Output)

这就是在代码里用的GPIO_Mode_Out_PP

  • 原理:内部有两个开关管,一个接电源(VCC),一个接地(GND)。输出高电平时,接电源的开关导通,“推”出电流;输出低电平时,接地的开关导通,“拉”回电流。

  • 特点

    • 驱动能力强:可以主动输出高低电平。

    • 速度快:电平切换迅速,上升沿时间短。

  • 应用场景:适合驱动数字器件,比如你用来控制LED、驱动蜂鸣器、控制继电器等。

🌊 开漏输出 (Open-Drain Output)

对应代码中的GPIO_Mode_Out_OD

  • 原理:内部只有接地的开关管(N-MOS)。输出低电平时,开关导通,引脚被拉到地(0V);输出高电平时,开关断开,引脚处于高阻态(High-Z),既不输出高也不输出低。

  • 特点

    • 不能独立输出高电平:要输出高电平,必须在外部接一个上拉电阻到电源。

    • 可实现“线与”功能:多个开漏引脚可以直接连在一起,共用一个上拉电阻。只要有一个输出低电平,整条线就是低电平,实现了“逻辑与”。

  • 应用场景

    • I2C总线:这是最典型的应用,用于实现多设备通信。

    • 电平转换:通过改变上拉电阻的电源电压(如5V),可以让输出高电平匹配不同电压的设备。

🔄 复用推挽输出 (Alternate Function Push-Pull Output)

对应代码中的GPIO_Mode_AF_PP

  • 原理:引脚内部连接到某个外设(如USART、SPI、PWM定时器),由该外设直接驱动。其电气特性与推挽输出一样。

  • 应用场景:用于需要输出功能的复用外设,例如:

    • USART的TX(发送)引脚

    • SPI的MOSI、SCK引脚

    • PWM(脉宽调制)输出引脚

🔄 复用开漏输出 (Alternate Function Open-Drain Output)

对应代码中的GPIO_Mode_AF_OD

  • 原理:引脚同样连接到内部外设,由外设控制。其电气特性与开漏输出一样。

  • 应用场景:主要用于需要“线与”功能的总线协议,最典型的就是I2C的SDA和SCL引脚


💎 总结

为了方便记忆,你可以这样理解四种模式的选择:

模式核心一句话典型应用
推挽输出“大力士”,能推能拉,驱动能力强。点LED、驱动蜂鸣器、控制继电器。
开漏输出“受控开关”,只能拉低,高电平靠外部电阻。I2C总线、电平匹配。
复用推挽输出推挽输出由内部外设接管。USART_TXSPI_MOSIPWM输出
复用开漏输出开漏输出由内部外设接管。I2C的SDA/SCL引脚。

理解这几种模式的区别,是配置STM32外设的基础。

💎参考:

想要对推挽输出和开漏输出有更深刻的理解,可以参考下面的文章:

电路图分析:GPIO推挽输出 + 开漏输出 - 21ic电子网

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询