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): Следует иметь в виду, что шина 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 МГц.
Разрешение тактирования каждого таймера устанавливается регистрами RCC_APB1ENR и RCC_APB1ENR блока RCC, см. врезки ниже для STM32F407 (биты разрешения тактирования таймеров выделены зеленым фоном). Смещение адреса 0x60, значение после сброса 0x36FEC9FF.
Биты 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..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, разрешение тактирования периферийных устройств. |