Перейти к содержанию

Шины AHB и APB

Ядро STM32 общается с памятью и периферией не по одному проводу, а через несколько шин. От того, на какой шине висит блок, зависят его тактовая частота, делитель скорости UART и то, в каком регистре RCC включается его тактирование.

Обновлено Редакция GAW

AHB (advanced high-performance bus) и APB — внутренние шины микроконтроллера из семейства шин AMBA компании Arm. По AHB ядро и DMA обращаются к флеш-памяти, ОЗУ и быстрой периферии; шины APB подключены к AHB через мосты и обслуживают остальную периферию — таймеры, UART, SPI, I²C, АЦП. Частоты шин получаются из системной частоты делителями — это часть дерева тактирования.

Шины STM32F103 и STM32F407

ШинаЧастотаSTM32F103 (RM0008)STM32F407 (RM0090)
AHBHCLKдо 72 МГц: флеш-память, SRAM, DMA, RCC, CRCдо 168 МГц, три шины AHB1–AHB3; GPIO — на AHB1
APB2PCLK2до 72 МГц: GPIO, AFIO, EXTI, АЦП, TIM1, SPI1, USART1до 84 МГц
APB1PCLK1до 36 МГц: TIM2–TIM4, USART2–3, I²C, SPI2, CAN, USB, IWDG, WWDGдо 42 МГц

Распределение блоков по шинам у STM32F103 — по рисунку 1 и таблице 3 RM0008. У STM32F4 порты GPIO перенесены на AHB1, поэтому их тактирование включается в регистре RCC_AHB1ENR, а не в RCC_APB2ENR, как у F1.

Что из этого следует

  • Частота периферии. UART, SPI и I²C считают делители от частоты своей шины: USART1 у STM32F103 — от PCLK2, USART2 — от PCLK1. Ошибка в выборе шины даёт неверную скорость.
  • Частота таймеров. Если делитель APB больше 1, таймеры этой шины получают удвоенную частоту — подробнее в статье о таймерах STM32.
  • Включение тактирования. У каждой шины свой регистр ключей RCC — см. включение тактирования периферии.
  • Обращения к регистрам. По RM0008 (разд. 3.1) 8- и 16-битная запись в регистр на APB превращается мостом в 32-битную с повторением данных.

Частоты всех шин под выбранный кварц и PLL посчитает калькулятор тактирования STM32, а что бывает, если забыть поделить APB1, — в ответе «STM32 зависает после настройки 72 МГц».

Не путать с внешними шинами вроде I²C или SPI: AHB и APB существуют только внутри кристалла и снаружи недоступны.

Частые вопросы

Чем APB1 отличается от APB2 у STM32F103?

Пределом частоты: APB2 работает на полной частоте до 72 МГц, APB1 — не выше 36 МГц (RM0008, разд. 3.1). На APB2 у STM32F103 висят порты GPIO, AFIO, EXTI, АЦП, TIM1, SPI1 и USART1, на APB1 — TIM2–TIM4, USART2 и USART3, I²C, SPI2, CAN, USB и сторожевые таймеры. Поэтому делитель скорости USART1 считают от PCLK2, а USART2 — от PCLK1.

Почему при 72 МГц обязательно делить APB1 на 2?

Потому что предел APB1 у STM32F103 — 36 МГц. Если оставить делитель 1, периферия на этой шине получит 72 МГц и может работать неверно. Типичная ошибка разобрана в ответе «STM32 зависает после настройки 72 МГц».

Почему таймер на APB1 считает от 72 МГц, если шина работает на 36 МГц?

Если делитель APB не равен 1, таймеры этой шины получают удвоенную частоту шины (RM0008, разд. 7.2). При APB1 = 72 / 2 = 36 МГц таймеры TIM2–TIM4 тактируются от 72 МГц. У STM32F42x/43x правило ещё зависит от бита TIMPRE.

Источники

  1. STMicroelectronics. RM0008 Rev 21. Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx — разд. 3.1 и рис. 1: многослойная шина AHB, матрица шин с круговым арбитражем между ядром и DMA; два моста AHB/APB, APB1 до 36 МГц, APB2 на полной частоте до 72 МГц; 8- и 16-битное обращение к регистру APB превращается в 32-битное с дублированием данных; после сброса тактирование всей периферии, кроме SRAM и FLITF, выключено; табл. 3: распределение периферии по шинам; разд. 7.2: делители AHB /1…512 и APB /1…16, удвоение частоты таймеров при делителе APB не 1
  2. STMicroelectronics. RM0090 Rev 21 (June 2024). Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — разд. 1.2: AHB — advanced high-performance bus; рис. 41 (контроллер EXTI): шина обозначена AMBA APB bus; разд. 7.2: AHB до 168 МГц, APB2 до 84 МГц, APB1 до 42 МГц; разд. 6.2: у F42x/43x бит TIMPRE меняет правило удвоения частоты таймеров; разд. 5.3.2: ключи тактирования в регистрах RCC_AHB1ENR, RCC_AHB2ENR, RCC_AHB3ENR

Нашли ошибку?