浅谈APB1、APB2

本文详细解析了STM32在IO初始化过程中的时钟配置,区分了APB1ENR与APB2ENR两种时钟使能寄存器的功能,介绍了它们各自对应的外设及时钟频率限制,提供了具体的寄存器操作实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在STM32初始化IO的时候,首先要初始化IO的时钟,这里面有两种时钟:APB1ENR、APB2ENR。两个从字面上看都是 Advanced Periphery Bus Enable,不同之处一个是1 ,一个是2。区别在哪里?IO初始化的应该根据需要开启哪个时钟?

         APB1外设时钟使能寄存器(RCC_APB1ENR) 低速APB使能,最大允许频率36MHz

         APB2外设时钟使能寄存器(RCC_APB2ENR) 高速APB使能,最大允许频率72MHz

         这里的外设是相对Cortex M3的内核来讲的。这两个寄存器都是32的,占用四个字节。

         APB1外设时钟使能寄存器 的可用位为20位,这些都是R/W,对应的“外设”时钟有:(1)DAC接口时钟使能 ,(2)接口时钟使能,(3)备份接口时钟使能,(4、5)Can 2和Can1 接口时钟使能,(6、7)IIC2和IIC1接口时钟使能,(8、9、10、11)USART 5、USART4、USART3、USART2接口时钟使能,(12、13)SPI3和SPI2接口时钟使能,(14) 窗口看门狗时钟使能,(15-20) -7时钟使能,可以看得出,一个位对应一个“外设”,0关闭,1打开。

        APB2外设时钟使能寄存器,在跑马灯程序的IO_Configration函数初始化的第一个寄存器就是它。说明一下,这两个寄存器都位于结构体RCC_TypeDef中,名字叫APB1ENR和APB2ENR。操作的时候就是 RCC->APB1ENR=xxxxxxxx,这里是举个例子。同样这个寄存器和上面的1不一样,它只有11个bit有效,其余的bit保留(保留位读为0),开放出来的bit都是R/W(可读可写的)。这些外设都是:(1)USART1接口时钟使能,(2)SPI1接口时钟使能 (3)定时器1时钟使能,(4、5)ADC2 和ADC1接口时钟使能,(6-10)端口A-E时钟使能,(11)辅助功能IO时钟使能。可以看得出,也是一个位对应一个外设,1打开,0关掉。

example:使能端口A、C

       RCC->APB2ENR|=1<<2; //使能PORTA时钟

       RCC->APB2ENR|=1<<4; //使能PORTC时钟

### APB1 APB2 的区别 APB1 APB2STM32 微控制器中的两个外设总线,它们都属于 AMBA(Advanced Microcontroller Bus Architecture)协议下的 APB(Advanced Peripheral Bus)总线架构。尽管它们的功能相似,但在实际应用中存在显著差异。 #### 1. **时钟速度** APB1 是低速总线,其时钟频率通常为系统时钟的一半。例如,在系统时钟为 72MHz 的情况下,APB1 的频率为 36MHz。这种较低的时钟频率使其适合连接对速度要求不高的外设[^3]。 相比之下,APB2 是高速总线,其时钟频率通常与系统时钟相同。在系统时钟为 72MHz 的情况下,APB2 的频率也为 72MHz。这意味着挂载在 APB2 上的外设可以以更高的速度运行,适用于需要高性能的应用场景[^3]。 #### 2. **连接的外设** APB1 连接的是低速外设,包括以下模块: - 定时器:TIM2、TIM3、TIM4 - 串口通信:USART2、USART3 - I2C 接口:I2C1、I2C2 - SPI 接口:SPI2 - 控制器局域网:CAN - 电源控制:PWR - 数模转换器:DAC 这些外设通常不需要高速数据传输或实时响应[^3]。 APB2 则连接的是高速外设,包括以下模块: - 高级定时器:TIM1 - 高速串口:USART1 - 模数转换器:ADC1、ADC2 - 通用输入输出:GPIOA、GPIOB 等 - 复用功能 I/O:AFIO - 外部中断:EXTI 这些外设对实时性速度的要求较高,因此需要更高的时钟频率来支持其操作[^3]。 #### 3. **用途** APB1 主要用于管理控制低速外设,适合那些对实时性要求不高的任务。由于其较低的时钟频率,APB1 在功耗方面也具有优势,因此更适合电池供电或低功耗设备。 APB2 则用于管理控制高速外设,适合需要快速响应高带宽的任务。通过使用 APB2,系统可以在处理关键任务时获得更高的性能。 #### 4. **时钟控制** APB1 的时钟使能由寄存器 `RCC_APB1ENR` 控制。在使用 APB1 上的外设之前,必须设置该寄存器以启用对应的时钟[^1]。 APB2 的时钟使能由寄存器 `RCC_APB2ENR` 控制。同样,在使用 APB2 上的外设之前,也需要通过该寄存器启用对应的时钟[^1]。 #### 示例代码:启用 APB1 APB2 的时钟 ```c // 启用 APB1 上的 USART2 时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); // 启用 APB2 上的 GPIOA 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值