STM32中为什么会有APB1和APB2两个外设有什么区别

一.核心概念:总线矩阵与分级

STM32使用一种叫做"总线矩阵"的互联结构。你可以把它想象成一个城市的交通网络,其中:

  • CPU(内核):是城市的指挥中心。

  • 内存(Flash, RAM):是仓库和资料库。

  • 外设(GPIO, UART, SPI等):是各个功能建筑(如公园、车站)。

  • 总线:是连接这些地点的道路。

为了优化性能和功耗,STM32没有用同一种"道路"连接所有地方,而是采用了分级总线结构。主要的三条总线是:

  1. AHB高级高性能总线 。这是城市的主干道,高速、带宽大。CPU、DMA、内存和一些最关键的高速外设(如USB)都连接在这条主干道上。

  2. APB高级外设总线 。这是城市的支路,速度较低,功耗也更低,专门用于连接大多数普通速度的外设。

那么,为什么要把APB再分成APB1和APB2呢?答案是:为了在性能和功耗之间取得最佳平衡


APB1 与 APB2 的详细区别

我们可以通过一个表格来清晰地对比它们:

特性 APB1(外设总线1) APB2(外设总线2)
官方称呼 低速外设总线 高速外设总线
时钟频率 较低 ,通常是系统时钟(SYSCLK)的一半。 例如:SYSCLK=72MHz时,APB1 = 36MHz 较高 ,通常与系统时钟(SYSCLK)相同。 例如:SYSCLK=72MHz时,APB2 = 72MHz
挂载的外设类型 对速度要求不高的"基础"或"控制型"外设 。 例如:定时器(TIM2-TIM7)、看门狗、通信接口(I2C, UART4, UART5)等。 对速度要求高的"关键"或"交互型"外设 。 例如:GPIO端口(A,B,C...)、外部中断、高速ADC、通信接口(USART1)、高级定时器(TIM1, TIM8)等。
典型外设举例 - 定时器 : TIM2, TIM3, TIM4, TIM5, TIM6, TIM7 - 窗口看门狗 (WWDG) - 通信接口 : I2C1, I2C2, UART4, UART5, CAN - 电源接口 (PWR) - DAC(数模转换器) - GPIO端口 : GPIOA, GPIOB, ... - 系统配置 : SYSCFG, AFIO(复用功能重映射) - 外部中断 (EXTI) - ADC1, ADC2 (模数转换器) - 高级定时器 : TIM1, TIM8 - 通信接口 : USART1 - SPI1
设计哲学 节能与隔离。将低速设备放在一条独立的、可以降速运行的总线上,可以降低系统整体功耗,同时避免低速设备占用高速总线的资源。 性能优先。GPIO、ADC等外设需要快速响应CPU的指令或外部事件,因此需要更高的时钟频率来保证实时性。

二.为什么这么设计?(深入理解)

  1. 功耗控制

    • 在低功耗应用中,你可以选择只降低APB1的时钟频率或将其关闭,而保持APB2全速运行,以驱动关键的GPIO或ADC。这种精细化的电源管理对于电池供电的设备至关重要。
  2. 性能优化

    • 将高速外设(如GPIO、高级定时器)放在APB2上,确保它们能以最高速度运行,满足实时控制的需求。例如,快速翻转一个GPIO引脚来产生PWM波,需要很高的时钟速度。

    • 将低速外设(如I2C、UART)放在APB1上,36MHz的时钟对于这些通常工作在Kbps或几百Kbps速度的接口来说已经绰绰有余,不会成为性能瓶颈。

  3. 系统结构与稳定性

    • 将不同特性的外设分开,简化了总线仲裁和时钟树的设计。高速数据流和低速数据流在不同的"车道"上行驶,互不干扰,提高了系统的稳定性和可靠性。

三.在编程中的实际影响

理解这个区别对你的编程工作有直接指导意义:// 例子:在标准外设库中(以STM32F1为例)

  1. 开启APB2总线上的GPIOA和ADC1的时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);

    开启APB1总线上的TIM3和UART2的时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB1Periph_USART2, ENABLE);

    如果你忘记开启时钟,即使代码逻辑完全正确,外设也无法工作。

  2. 速度预期

    当你使用定时器进行精确定时,或者配置UART的波特率时,你需要知道该外设的输入时钟源是来自APB1还是APB2,因为它们的基准频率不同。计算公式中会用到 PCLK1(APB1时钟)或 PCLK2(APB2时钟)。

四.总结

  • APB1是"低速总线",承载着对实时性要求不高的基础控制和外设,时钟频率较低,旨在节能。

  • APB2是"高速总线",承载着与CPU快速交互、对速度要求高的关键外设,时钟频率与系统核心同步,旨在保证性能。

这种"分车道行驶"的设计是STM32乃至许多现代微控制器高效、可靠、低功耗运行的关键架构思想。记住这个区别,对你理解STM32的时钟系统和进行外设编程非常有帮助。

相关推荐
沐欣工作室_lvyiyi8 小时前
基于单片机的家庭煤气泄漏检测系统(论文+源码)
stm32·单片机·嵌入式硬件·煤气泄漏
摇滚侠8 小时前
Java 零基础全套视频教程,异常,处理异常,自定义异常,笔记 124-129
java·笔记
wdfk_prog8 小时前
[Linux]学习笔记系列 -- [fs]initramfs
linux·笔记·学习
风行男孩8 小时前
stm32基础学习——定时器的使用
stm32·单片机·学习
深蓝海拓8 小时前
PySide6从0开始学习的笔记(十八) MVC(Model-View-Controller)模式的图形渲染体系
笔记·python·qt·学习·pyqt
西城微科方案开发8 小时前
精准守护健康:西城微科电子体温计方案解析
单片机·嵌入式硬件·方案公司推荐
Saniffer_SH8 小时前
【每日一题】笔记本电脑上从U盘拷贝文件到M.2 SSD过程中为什么链路还会偶尔进入L1.2低功耗?
服务器·网络·人工智能·驱动开发·单片机·嵌入式硬件·电脑
lpfasd1238 小时前
《乌合之众》精读笔记
笔记
DIY机器人工房8 小时前
简单理解:珠海航宇微科技(航宇微)、芯探索、XM1002他们之间的关系
科技·单片机·嵌入式·diy机器人工房·芯探索·xm1002·航宇微
知识分享小能手8 小时前
Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 的软件包管理 —— 全面详解(9)
linux·学习·ubuntu