Программирование ARM STM32: тактирование таймеров от APB1 и APB2 Thu, February 25 2021  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

STM32: тактирование таймеров от APB1 и APB2 Печать
Добавил(а) microsin   

При выборе таймеров для определенной задачи часто возникает необходимость определить, от какой внутренней частоты они могут тактироваться. Все станет понятно, если взглянуть на регистры RCC (Reset and Clock Control, блок управления сбросом и тактами).

Все внутренние периферийные устройства STM32 (в том числе и таймеры), могут получать тактирование от частот внутренних шин периферийных устройств APB1 и APB2 (APB расшифровывается как Advanced Peripheral Bus). Такты PCLK1 и PCLK2 шин APB1 и APB2 вырабатываются из частоты системных тактов HCLK с помощью отдельных делителей APB1 Prescaler и APB2 Prescaler, см. пример настройки тактовых частот (скриншот Clock Configuration из утилиты STM32CubeMX):

STM32 clocks PCLK1 PCLK2

Следует иметь в виду, что шина APB1 медленнее в 2 раза, чем шина APB2. Поэтому при выборе высокой частоты тактов ядра обычно получается так, что максимальная допустимая частота шины APB1 в 2 раза ниже максимально допустимой частоты шины APB2. Поскольку каждый таймер может тактироваться только от определенной шины, от APB1 или APB2, это нужно учитывать при выборе таймера, если нужно добиться для него максимальной частоты тактирования (например, для получения максимальной производительности ШИМ).

Обратите внимание на одну интересную особенность установки внутренней частоты тактов таймеров - частота тактов от шины AHBx для таймеров может быть в 2 раза выше, чем для периферийных устройств, что показывает не редактируемый бокс x2. Значение этого множителя автоматически меняется при выборе значения прескалера APBx (APB1 Prescaler и APB2 Prescaler). При отключении прескалера (когда его коэффициент деления 1) множитель автоматически меняется на x1, при всех других коэффициентов прескалера (2, 4, 8, 16) множитель меняется на x2.

В следующей таблице в качестве примера для STM32F407 показаны его таймеры и шины, от которых они тактируются (APB1 или APB2). В столбце Fmax показана максимально достижимая тактовая частота для соответствующего таймера при максимальной частоте HCLK = 168 МГц.

Таймер Шина тактирования Fmax, МГц
TIM1 APB2 168
TIM2 APB1 84
TIM3
TIM4
TIM5
TIM6
TIM7
TIM8 APB2 168
TIM9
TIM10
TIM11
TIM12 APB1 84
TIM13
TIM14

Разрешение тактирования каждого таймера устанавливается регистрами RCC_APB1ENR и RCC_APB1ENR блока RCC, см. врезки ниже для STM32F407 (биты разрешения тактирования таймеров выделены зеленым фоном).

Смещение адреса 0x60, значение после сброса 0x36FEC9FF.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res. DAC
LPEN
PWR
LPEN
Res. CAN2
LPEN
CAN1
LPEN
Res. I2C3
LPEN
I2C2
LPEN
I2C1
LPEN
UART5
LPEN
UART4
LPEN
USART3
LPEN
USART2
LPEN
Res.
rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SPI3
LPEN
SPI2
LPEN
Res. WWDG
LPEN
Res. TIM14
LPEN
TIM13
LPEN
TOM12
LPEN
TIM7
LPEN
TIM6
LPEN
TIM5
LPEN
TIM4
LPEN
TIM3
LPEN
TIM2
LPEN
rw rw rw rw rw rw rw rw rw rw rw rw

Биты 31, 30, 27, 24, 16, 13, 12, 10, 9 зарезервированы, и должны сохраняться на значении после сброса.

DACLPEN: DAC interface clock enable during Sleep mode.

PWRLPEN: Power interface clock enable during Sleep mode.

CAN2LPEN, CAN1LPEN: CAN 2, CAN1 clock enable during Sleep mode.

I2C3LPEN..I2C1LPEN: I2C3..I2C1 clock enable during Sleep mode.

UART5LPEN, UART4LPEN: UART5, UART4 clock enable during Sleep mode.

USART3LPEN, USART2LPEN: USART3, USART2 clock enable during Sleep mode.

SPI3LPEN, SPI2LPEN: SPI3, SPI2 clock enable during Sleep mode.

WWDGLPEN: Window watchdog clock enable during Sleep mode.

TIM14LPEN..TIM12LPEN, TIM7LPEN..TIM2LPEN: TIM14..TIM12, TIM7..TIM2 clock enable during Sleep mode.

Смещение адреса 0x64, значение после сброса 0x00075F33.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved TIM11
LPEN
TIM10
LPEN
TIM9
LPEN
rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res. SYSCFG
LPEN
Res. SPI1
LPEN
SDIO
LPEN
ADC3
LPEN
ADC2
LPEN
ADC1
LPEN
Res. USART6
LPEN
USART1
LPEN
Res. TIM8
LPEN
TIM1
LPEN
rw         rw rw rw rw rw

Биты 31..19, 15, 13, 7, 6, 3, 2 зарезервированы, и должны сохраняться на значении после сброса.

TIM11LPEN..TIM8LPEN, TIM1LPEN: TIM11..TIM8, TIM1 clock enable during Sleep mode.

SYSCFGLPEN: System configuration controller clock enable during Sleep mode.

SPI1LPEN: SPI1 clock enable during Sleep mode.

SDIOLPEN: SDIO clock enable during Sleep mode.

ADC3LPEN..ADC1LPEN: ADC3..ADC1 clock enable during Sleep mode.

USART6LPEN, USART1LPEN: USART6, USART1 clock enable during Sleep mode.

[Ссылки]

1. STM32F407, разрешение тактирования периферийных устройств.
2. Руководство по использованию обычных таймеров STM32.
3. STM32F4xx: продвинутые таймеры TIM1 и TIM8.

 

Добавить комментарий


Защитный код
Обновить

Top of Page