Регистры RCC STM32F1
Регистры RCC STM32F1: включение генераторов HSI, HSE и PLL, выбор системной частоты и делителей шин, тактирование и сброс каждого периферийного блока, резервный домен с LSE и RTC, причины последнего сброса.
Блок RCC выбирает, от чего работает микроконтроллер, и раздаёт тактирование периферии. Системную частоту SYSCLK дают три источника: внутренний RC-генератор HSI на 8 МГц, внешний кварц или генератор HSE на 4–16 МГц (у connectivity line STM32F105/107 — 3–25 МГц) и умножитель PLL. Ещё два генератора работают на часы и сторожевой таймер: внутренний LSI на 40 кГц и часовой кварц LSE на 32,768 кГц (RM0008, раздел 7.2).
После сброса STM32F1 работает от HSI. Чтобы получить 72 МГц от кварца 8 МГц, включают HSE (бит HSEON) и ждут HSERDY, выбирают HSE источником PLL с множителем 9, включают PLL и ждут PLLRDY, ставят задержку флеш-памяти в FLASH_ACR и делитель APB1 на 2 — шина APB1 работает не быстрее 36 МГц, — и только потом переключают SW на PLL. Частота PLL не должна превышать 72 МГц.
Каждый периферийный блок включается своим битом в RCC_AHBENR, RCC_APB2ENR или RCC_APB1ENR: пока бит не установлен, блок не тактируется и запись в его регистры не действует. Биты регистров RSTR удерживают блок в сбросе. У STM32F105/107 есть ещё PLL2, PLL3 и делители PREDIV1 и PREDIV2 в регистре RCC_CFGR2 — их описывает отдельная глава RM0008 (раздел 8.3).
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| RCC | 0x4002 1000 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| RCC_CR | 0x00 | Управление генераторами и PLL | 0x0000 XX83 (X — не определено) |
| RCC_CFGR | 0x04 | Выбор SYSCLK, делители шин, выход MCO | 0x0000 0000 |
| RCC_CIR | 0x08 | Прерывания готовности генераторов | 0x0000 0000 |
| RCC_APB2RSTR | 0x0C | Сброс периферии шины APB2 | 0x00000 0000 |
| RCC_APB1RSTR | 0x10 | Сброс периферии шины APB1 | 0x0000 0000 |
| RCC_AHBENR | 0x14 | Тактирование периферии шины AHB | 0x0000 0014 |
| RCC_APB2ENR | 0x18 | Тактирование периферии шины APB2 | 0x0000 0000 |
| RCC_APB1ENR | 0x1C | Тактирование периферии шины APB1 | 0x0000 0000 |
| RCC_BDCR | 0x20 | Резервный домен: LSE и часы RTC | 0x0000 0000 (сбрасывается сбросом домена резервного питания) |
| RCC_CSR | 0x24 | Генератор LSI и флаги причины сброса | 0x0C00 0000 (сбрасывается системным сбросом, флаги сброса — только при включении питания) |
| RCC_AHBRSTR | 0x28 | Сброс периферии шины AHB | 0x0000 0000 |
| RCC_CFGR2 | 0x2C | PLL2, PLL3 и делители PREDIV у connectivity line | 0x0000 0000 |
Конструктор значения
Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.
Значение: 0x00000083
0000 0000 0000 0000 0000 0000 1000 0011
RCC->CR = 0x00000083;RCC_CR — управление генераторами и PLL
Смещение 0x00, адрес 0x4002 1000, 32 бит, после сброса 0x0000 XX83 (X — не определено). В коде: RCC->CR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | PLL3RDY | PLL3ON | PLL2RDY | PLL2ON | PLLRDY | PLLON | — | CSSON | HSEBYP | HSERDY | HSEON | ||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| HSICAL | HSITRIM | — | HSIRDY | HSION | |||||||||||
- PLL3RDY (бит 29) — Флаг захвата PLL3 (устанавливается аппаратно) (только у STM32F105, STM32F107).
- PLL3ON (бит 28) — Включение PLL3 (только у STM32F105, STM32F107).
- PLL2RDY (бит 27) — Флаг захвата PLL2 (устанавливается аппаратно) (только у STM32F105, STM32F107).
- PLL2ON (бит 26) — Включение PLL2 (только у STM32F105, STM32F107).
- PLLRDY (бит 25) — Флаг захвата PLL (устанавливается аппаратно).
- PLLON (бит 24) — Включение PLL.
- CSSON (бит 19) — Включение системы контроля тактирования CSS: при отказе HSE — прерывание NMI и переход SYSCLK на HSI.
- HSEBYP (бит 18) — Обход генератора HSE: на OSC_IN подаётся готовый тактовый сигнал вместо кварца.
- HSERDY (бит 17) — Флаг готовности HSE (устанавливается аппаратно).
- HSEON (бит 16) — Включение генератора HSE.
- HSICAL (биты 15:8) — Заводская калибровка HSI (только чтение).
- HSITRIM (биты 7:3) — Подстройка частоты HSI, добавляется к заводской калибровке.
- HSIRDY (бит 1) — Флаг готовности HSI (устанавливается аппаратно).
- HSION (бит 0) — Включение внутреннего генератора HSI.
RCC_CFGR — выбор SYSCLK, делители шин, выход MCO
Смещение 0x04, адрес 0x4002 1004, 32 бит, после сброса 0x0000 0000. В коде: RCC->CFGR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | MCO | — | USBPRE | PLLMULL | PLLXTPRE | PLLSRC | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ADCPRE | PPRE2 | PPRE1 | HPRE | SWS | SW | ||||||||||
- MCO (биты 27:24) — Сигнал на выходе MCO (вывод PA8) (только у STM32F105, STM32F107).
MCO Значение Макрос CMSIS 0000 Нет сигнала RCC_CFGR_MCO_NOCLOCK 0100 SYSCLK RCC_CFGR_MCO_SYSCLK 0101 HSI RCC_CFGR_MCO_HSI 0110 HSE RCC_CFGR_MCO_HSE 0111 PLL / 2 RCC_CFGR_MCO_PLLCLK_DIV2 1000 PLL2 RCC_CFGR_MCO_PLL2CLK 1001 PLL3 / 2 RCC_CFGR_MCO_PLL3CLK_DIV2 1010 XT1 — генератор 3–25 МГц (для Ethernet) RCC_CFGR_MCO_EXT_HSE 1011 PLL3 (для Ethernet) RCC_CFGR_MCO_PLL3CLK - MCO (биты 26:24) — Сигнал на выходе MCO (вывод PA8) (только у STM32F101, STM32F102, STM32F103).
MCO Значение Макрос CMSIS 000 Нет сигнала RCC_CFGR_MCO_NOCLOCK 100 SYSCLK RCC_CFGR_MCO_SYSCLK 101 HSI RCC_CFGR_MCO_HSI 110 HSE RCC_CFGR_MCO_HSE 111 PLL / 2 RCC_CFGR_MCO_PLLCLK_DIV2 - USBPRE (бит 22) — Делитель частоты PLL для USB: должен получиться 48 МГц (только у STM32F102, STM32F103).
USBPRE Значение 0 PLL / 1,5 (PLL на 72 МГц) 1 PLL без деления (PLL на 48 МГц) - OTGFSPRE (бит 22) — Делитель VCO PLL для USB OTG FS: должен получиться 48 МГц (только у STM32F105, STM32F107).
OTGFSPRE Значение 0 VCO PLL / 3 (PLL на 72 МГц) 1 VCO PLL / 2 (PLL на 48 МГц) - PLLMULL (биты 21:18) — Множитель PLL.
PLLMULL Значение Макрос CMSIS 0000 ×2 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL2 0001 ×3 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL3 0010 ×4 RCC_CFGR_PLLMULL4 0011 ×5 RCC_CFGR_PLLMULL5 0100 ×6 RCC_CFGR_PLLMULL6 0101 ×7 RCC_CFGR_PLLMULL7 0110 ×8 RCC_CFGR_PLLMULL8 0111 ×9 RCC_CFGR_PLLMULL9 1000 ×10 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL10 1001 ×11 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL11 1010 ×12 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL12 1011 ×13 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL13 1100 ×14 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL14 1101 ×15 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL15 1101 ×6,5 (только у STM32F105, STM32F107) RCC_CFGR_PLLMULL6_5 1110 ×16 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLMULL16 - PLLXTPRE (бит 17) — Деление HSE на 2 перед PLL (у connectivity line — младший бит PREDIV1).
PLLXTPRE Значение Макрос CMSIS 0 HSE без деления (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLXTPRE_HSE 0 PREDIV1 без деления (только у STM32F105, STM32F107) RCC_CFGR_PLLXTPRE_PREDIV1 1 HSE / 2 (только у STM32F101, STM32F102, STM32F103) RCC_CFGR_PLLXTPRE_HSE_DIV2 1 PREDIV1 / 2 (только у STM32F105, STM32F107) RCC_CFGR_PLLXTPRE_PREDIV1_DIV2 - PLLSRC (бит 16) — Источник PLL: HSI / 2 или HSE (у connectivity line — выход PREDIV1).
PLLSRC Значение 0 HSI / 2 1 HSE (у connectivity line — выход PREDIV1) - ADCPRE (биты 15:14) — Делитель тактирования АЦП от PCLK2; частота АЦП — не выше 14 МГц.
ADCPRE Значение Макрос CMSIS 00 Деление на 2 RCC_CFGR_ADCPRE_DIV2 01 Деление на 4 RCC_CFGR_ADCPRE_DIV4 10 Деление на 6 RCC_CFGR_ADCPRE_DIV6 11 Деление на 8 RCC_CFGR_ADCPRE_DIV8 - PPRE2 (биты 13:11) — Делитель шины APB2: PCLK2 = HCLK / делитель.
PPRE2 Значение Макрос CMSIS 000 Без деления RCC_CFGR_PPRE2_DIV1 100 Деление на 2 RCC_CFGR_PPRE2_DIV2 101 Деление на 4 RCC_CFGR_PPRE2_DIV4 110 Деление на 8 RCC_CFGR_PPRE2_DIV8 111 Деление на 16 RCC_CFGR_PPRE2_DIV16 - PPRE1 (биты 10:8) — Делитель шины APB1: PCLK1 = HCLK / делитель.
PPRE1 Значение Макрос CMSIS 000 Без деления RCC_CFGR_PPRE1_DIV1 100 Деление на 2 RCC_CFGR_PPRE1_DIV2 101 Деление на 4 RCC_CFGR_PPRE1_DIV4 110 Деление на 8 RCC_CFGR_PPRE1_DIV8 111 Деление на 16 RCC_CFGR_PPRE1_DIV16 - HPRE (биты 7:4) — Делитель шины AHB: HCLK = SYSCLK / делитель.
HPRE Значение Макрос CMSIS 0000 Без деления RCC_CFGR_HPRE_DIV1 1000 Деление на 2 RCC_CFGR_HPRE_DIV2 1001 Деление на 4 RCC_CFGR_HPRE_DIV4 1010 Деление на 8 RCC_CFGR_HPRE_DIV8 1011 Деление на 16 RCC_CFGR_HPRE_DIV16 1100 Деление на 64 RCC_CFGR_HPRE_DIV64 1101 Деление на 128 RCC_CFGR_HPRE_DIV128 1110 Деление на 256 RCC_CFGR_HPRE_DIV256 1111 Деление на 512 RCC_CFGR_HPRE_DIV512 - SWS (биты 3:2) — Источник SYSCLK в данный момент (только чтение).
SWS Значение Макрос CMSIS 00 HSI RCC_CFGR_SWS_HSI 01 HSE RCC_CFGR_SWS_HSE 10 PLL RCC_CFGR_SWS_PLL - SW (биты 1:0) — Источник системной частоты SYSCLK.
SW Значение Макрос CMSIS 00 HSI RCC_CFGR_SW_HSI 01 HSE RCC_CFGR_SW_HSE 10 PLL RCC_CFGR_SW_PLL
RCC_CIR — прерывания готовности генераторов
Смещение 0x08, адрес 0x4002 1008, 32 бит, после сброса 0x0000 0000. В коде: RCC->CIR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | CSSC | PLL3RDYC | PLL2RDYC | PLLRDYC | HSERDYC | HSIRDYC | LSERDYC | LSIRDYC | |||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | PLL3RDYIE | PLL2RDYIE | PLLRDYIE | HSERDYIE | HSIRDYIE | LSERDYIE | LSIRDYIE | CSSF | PLL3RDYF | PLL2RDYF | PLLRDYF | HSERDYF | HSIRDYF | LSERDYF | LSIRDYF |
- CSSC (бит 23) — Сброс флага CSSF: запись 1.
- PLL3RDYC (бит 22) — Сброс флага прерывания готовности PLL3: запись 1 (только у STM32F105, STM32F107).
- PLL2RDYC (бит 21) — Сброс флага прерывания готовности PLL2: запись 1 (только у STM32F105, STM32F107).
- PLLRDYC (бит 20) — Сброс флага прерывания готовности PLL: запись 1.
- HSERDYC (бит 19) — Сброс флага прерывания готовности HSE: запись 1.
- HSIRDYC (бит 18) — Сброс флага прерывания готовности HSI: запись 1.
- LSERDYC (бит 17) — Сброс флага прерывания готовности LSE: запись 1.
- LSIRDYC (бит 16) — Сброс флага прерывания готовности LSI: запись 1.
- PLL3RDYIE (бит 14) — Разрешение прерывания по готовности PLL3 (только у STM32F105, STM32F107).
- PLL2RDYIE (бит 13) — Разрешение прерывания по готовности PLL2 (только у STM32F105, STM32F107).
- PLLRDYIE (бит 12) — Разрешение прерывания по готовности PLL.
- HSERDYIE (бит 11) — Разрешение прерывания по готовности HSE.
- HSIRDYIE (бит 10) — Разрешение прерывания по готовности HSI.
- LSERDYIE (бит 9) — Разрешение прерывания по готовности LSE.
- LSIRDYIE (бит 8) — Разрешение прерывания по готовности LSI.
- CSSF (бит 7) — Флаг прерывания системы CSS: отказ HSE.
- PLL3RDYF (бит 6) — Флаг прерывания: PLL3 готов (только у STM32F105, STM32F107).
- PLL2RDYF (бит 5) — Флаг прерывания: PLL2 готов (только у STM32F105, STM32F107).
- PLLRDYF (бит 4) — Флаг прерывания: PLL готов.
- HSERDYF (бит 3) — Флаг прерывания: HSE готов.
- HSIRDYF (бит 2) — Флаг прерывания: HSI готов.
- LSERDYF (бит 1) — Флаг прерывания: LSE готов.
- LSIRDYF (бит 0) — Флаг прерывания: LSI готов.
RCC_APB2RSTR — сброс периферии шины APB2
Смещение 0x0C, адрес 0x4002 100C, 32 бит, после сброса 0x00000 0000. В коде: RCC->APB2RSTR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | TIM11RST | TIM10RST | TIM9RST | — | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ADC3RST | USART1RST | TIM8RST | SPI1RST | TIM1RST | ADC2RST | ADC1RST | IOPGRST | IOPFRST | IOPERST | IOPDRST | IOPCRST | IOPBRST | IOPARST | — | AFIORST |
- TIM11RST (бит 21) — Сброс таймера TIM11: 1 — блок удерживается в сбросе (только у STM32F101xG, STM32F103xG).
- TIM10RST (бит 20) — Сброс таймера TIM10: 1 — блок удерживается в сбросе (только у STM32F101xG, STM32F103xG).
- TIM9RST (бит 19) — Сброс таймера TIM9: 1 — блок удерживается в сбросе (только у STM32F101xG, STM32F103xG).
- ADC3RST (бит 15) — Сброс АЦП3: 1 — блок удерживается в сбросе (только у STM32F103xE/xG).
- USART1RST (бит 14) — Сброс USART1: 1 — блок удерживается в сбросе.
- TIM8RST (бит 13) — Сброс таймера TIM8: 1 — блок удерживается в сбросе (только у STM32F103xE/xG).
- SPI1RST (бит 12) — Сброс SPI1: 1 — блок удерживается в сбросе.
- TIM1RST (бит 11) — Сброс таймера TIM1: 1 — блок удерживается в сбросе.
- ADC2RST (бит 10) — Сброс АЦП2: 1 — блок удерживается в сбросе (только у STM32F103, STM32F105, STM32F107).
- ADC1RST (бит 9) — Сброс АЦП1: 1 — блок удерживается в сбросе.
- IOPGRST (бит 8) — Сброс порта G: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG).
- IOPFRST (бит 7) — Сброс порта F: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG).
- IOPERST (бит 6) — Сброс порта E: 1 — блок удерживается в сбросе (только у STM32F101xB/xE/xG, STM32F103xB/xE/xG, STM32F105, STM32F107).
- IOPDRST (бит 5) — Сброс порта D: 1 — блок удерживается в сбросе.
- IOPCRST (бит 4) — Сброс порта C: 1 — блок удерживается в сбросе.
- IOPBRST (бит 3) — Сброс порта B: 1 — блок удерживается в сбросе.
- IOPARST (бит 2) — Сброс порта A: 1 — блок удерживается в сбросе.
- AFIORST (бит 0) — Сброс AFIO: 1 — блок удерживается в сбросе.
RCC_APB1RSTR — сброс периферии шины APB1
Смещение 0x10, адрес 0x4002 1010, 32 бит, после сброса 0x0000 0000. В коде: RCC->APB1RSTR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | DACRST | PWRRST | BKPRST | CAN2RST | CAN1RST | — | USBRST | I2C2RST | I2C1RST | UART5RST | UART4RST | USART3RST | USART2RST | — | |
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SPI3RST | SPI2RST | — | WWDGRST | — | TIM14RST | TIM13RST | TIM12RST | TIM7RST | TIM6RST | TIM5RST | TIM4RST | TIM3RST | TIM2RST | ||
- DACRST (бит 29) — Сброс ЦАП: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- PWRRST (бит 28) — Сброс интерфейса управления питанием PWR: 1 — блок удерживается в сбросе.
- BKPRST (бит 27) — Сброс резервных регистров BKP: 1 — блок удерживается в сбросе.
- CAN2RST (бит 26) — Сброс CAN2: 1 — блок удерживается в сбросе (только у STM32F105, STM32F107).
- CAN1RST (бит 25) — Сброс CAN1: 1 — блок удерживается в сбросе (только у STM32F103, STM32F105, STM32F107).
- USBRST (бит 23) — Сброс USB: 1 — блок удерживается в сбросе (только у STM32F102, STM32F103).
- I2C2RST (бит 22) — Сброс I2C2: 1 — блок удерживается в сбросе (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- I2C1RST (бит 21) — Сброс I2C1: 1 — блок удерживается в сбросе.
- UART5RST (бит 20) — Сброс UART5: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- UART4RST (бит 19) — Сброс UART4: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- USART3RST (бит 18) — Сброс USART3: 1 — блок удерживается в сбросе (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- USART2RST (бит 17) — Сброс USART2: 1 — блок удерживается в сбросе.
- SPI3RST (бит 15) — Сброс SPI3: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- SPI2RST (бит 14) — Сброс SPI2: 1 — блок удерживается в сбросе (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- WWDGRST (бит 11) — Сброс оконного сторожевого таймера WWDG: 1 — блок удерживается в сбросе.
- TIM14RST (бит 8) — Сброс таймера TIM14: 1 — блок удерживается в сбросе (только у STM32F101xG, STM32F103xG).
- TIM13RST (бит 7) — Сброс таймера TIM13: 1 — блок удерживается в сбросе (только у STM32F101xG, STM32F103xG).
- TIM12RST (бит 6) — Сброс таймера TIM12: 1 — блок удерживается в сбросе (только у STM32F101xG, STM32F103xG).
- TIM7RST (бит 5) — Сброс таймера TIM7: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- TIM6RST (бит 4) — Сброс таймера TIM6: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- TIM5RST (бит 3) — Сброс таймера TIM5: 1 — блок удерживается в сбросе (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- TIM4RST (бит 2) — Сброс таймера TIM4: 1 — блок удерживается в сбросе (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- TIM3RST (бит 1) — Сброс таймера TIM3: 1 — блок удерживается в сбросе.
- TIM2RST (бит 0) — Сброс таймера TIM2: 1 — блок удерживается в сбросе.
RCC_AHBENR — тактирование периферии шины AHB
Смещение 0x14, адрес 0x4002 1014, 32 бит, после сброса 0x0000 0014. В коде: RCC->AHBENR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | ETHMACRXEN | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ETHMACTXEN | ETHMACEN | — | OTGFSEN | — | SDIOEN | — | FSMCEN | — | CRCEN | — | FLITFEN | — | SRAMEN | DMA2EN | DMA1EN |
- ETHMACRXEN (бит 16) — Тактирование приёмника Ethernet MAC (только у STM32F107).
- ETHMACTXEN (бит 15) — Тактирование передатчика Ethernet MAC (только у STM32F107).
- ETHMACEN (бит 14) — Тактирование Ethernet MAC (только у STM32F107).
- OTGFSEN (бит 12) — Тактирование USB OTG FS (только у STM32F105, STM32F107).
- SDIOEN (бит 10) — Тактирование SDIO (только у STM32F103xE/xG).
- FSMCEN (бит 8) — Тактирование FSMC (только у STM32F101xE/xG, STM32F103xE/xG).
- CRCEN (бит 6) — Тактирование блока CRC.
- FLITFEN (бит 4) — Тактирование интерфейса флеш-памяти в режиме сна.
- SRAMEN (бит 2) — Тактирование SRAM в режиме сна.
- DMA2EN (бит 1) — Тактирование DMA2 (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- DMA1EN (бит 0) — Тактирование DMA1.
RCC_APB2ENR — тактирование периферии шины APB2
Смещение 0x18, адрес 0x4002 1018, 32 бит, после сброса 0x0000 0000. В коде: RCC->APB2ENR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | TIM11EN | TIM10EN | TIM9EN | — | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ADC3EN | USART1EN | TIM8EN | SPI1EN | TIM1EN | ADC2EN | ADC1EN | IOPGEN | IOPFEN | IOPEEN | IOPDEN | IOPCEN | IOPBEN | IOPAEN | — | AFIOEN |
- TIM11EN (бит 21) — Тактирование таймера TIM11 (только у STM32F101xG, STM32F103xG).
- TIM10EN (бит 20) — Тактирование таймера TIM10 (только у STM32F101xG, STM32F103xG).
- TIM9EN (бит 19) — Тактирование таймера TIM9 (только у STM32F101xG, STM32F103xG).
- ADC3EN (бит 15) — Тактирование АЦП3 (только у STM32F103xE/xG).
- USART1EN (бит 14) — Тактирование USART1.
- TIM8EN (бит 13) — Тактирование таймера TIM8 (только у STM32F103xE/xG).
- SPI1EN (бит 12) — Тактирование SPI1.
- TIM1EN (бит 11) — Тактирование таймера TIM1.
- ADC2EN (бит 10) — Тактирование АЦП2 (только у STM32F103, STM32F105, STM32F107).
- ADC1EN (бит 9) — Тактирование АЦП1.
- IOPGEN (бит 8) — Тактирование порта G (только у STM32F101xE/xG, STM32F103xE/xG).
- IOPFEN (бит 7) — Тактирование порта F (только у STM32F101xE/xG, STM32F103xE/xG).
- IOPEEN (бит 6) — Тактирование порта E (только у STM32F101xB/xE/xG, STM32F103xB/xE/xG, STM32F105, STM32F107).
- IOPDEN (бит 5) — Тактирование порта D.
- IOPCEN (бит 4) — Тактирование порта C.
- IOPBEN (бит 3) — Тактирование порта B.
- IOPAEN (бит 2) — Тактирование порта A.
- AFIOEN (бит 0) — Тактирование AFIO.
RCC_APB1ENR — тактирование периферии шины APB1
Смещение 0x1C, адрес 0x4002 101C, 32 бит, после сброса 0x0000 0000. В коде: RCC->APB1ENR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | DACEN | PWREN | BKPEN | CAN2EN | CAN1EN | — | USBEN | I2C2EN | I2C1EN | UART5EN | UART4EN | USART3EN | USART2EN | — | |
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SPI3EN | SPI2EN | — | WWDGEN | — | TIM14EN | TIM13EN | TIM12EN | TIM7EN | TIM6EN | TIM5EN | TIM4EN | TIM3EN | TIM2EN | ||
- DACEN (бит 29) — Тактирование ЦАП (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- PWREN (бит 28) — Тактирование интерфейса управления питанием PWR.
- BKPEN (бит 27) — Тактирование резервных регистров BKP.
- CAN2EN (бит 26) — Тактирование CAN2 (только у STM32F105, STM32F107).
- CAN1EN (бит 25) — Тактирование CAN1 (только у STM32F103, STM32F105, STM32F107).
- USBEN (бит 23) — Тактирование USB (только у STM32F102, STM32F103).
- I2C2EN (бит 22) — Тактирование I2C2 (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- I2C1EN (бит 21) — Тактирование I2C1.
- UART5EN (бит 20) — Тактирование UART5 (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- UART4EN (бит 19) — Тактирование UART4 (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- USART3EN (бит 18) — Тактирование USART3 (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- USART2EN (бит 17) — Тактирование USART2.
- SPI3EN (бит 15) — Тактирование SPI3 (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- SPI2EN (бит 14) — Тактирование SPI2 (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- WWDGEN (бит 11) — Тактирование оконного сторожевого таймера WWDG.
- TIM14EN (бит 8) — Тактирование таймера TIM14 (только у STM32F101xG, STM32F103xG).
- TIM13EN (бит 7) — Тактирование таймера TIM13 (только у STM32F101xG, STM32F103xG).
- TIM12EN (бит 6) — Тактирование таймера TIM12 (только у STM32F101xG, STM32F103xG).
- TIM7EN (бит 5) — Тактирование таймера TIM7 (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- TIM6EN (бит 4) — Тактирование таймера TIM6 (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- TIM5EN (бит 3) — Тактирование таймера TIM5 (только у STM32F101xE/xG, STM32F103xE/xG, STM32F105, STM32F107).
- TIM4EN (бит 2) — Тактирование таймера TIM4 (только у STM32F101xB/xE/xG, STM32F102xB, STM32F103xB/xE/xG, STM32F105, STM32F107).
- TIM3EN (бит 1) — Тактирование таймера TIM3.
- TIM2EN (бит 0) — Тактирование таймера TIM2.
RCC_BDCR — резервный домен: LSE и часы RTC
Смещение 0x20, адрес 0x4002 1020, 32 бит, после сброса 0x0000 0000 (сбрасывается сбросом домена резервного питания). В коде: RCC->BDCR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | BDRST | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RTCEN | — | RTCSEL | — | LSEBYP | LSERDY | LSEON | |||||||||
- BDRST (бит 16) — Программный сброс резервного домена.
- RTCEN (бит 15) — Включение часов RTC.
- RTCSEL (биты 9:8) — Источник тактирования часов RTC; меняется только сбросом резервного домена.
RTCSEL Значение Макрос CMSIS 00 Нет тактирования RCC_BDCR_RTCSEL_NOCLOCK 01 LSE RCC_BDCR_RTCSEL_LSE 10 LSI RCC_BDCR_RTCSEL_LSI 11 HSE / 128 RCC_BDCR_RTCSEL_HSE - LSEBYP (бит 2) — Обход генератора LSE: внешний тактовый сигнал вместо кварца.
- LSERDY (бит 1) — Флаг готовности LSE.
- LSEON (бит 0) — Включение часового генератора LSE.
RCC_CSR — генератор LSI и флаги причины сброса
Смещение 0x24, адрес 0x4002 1024, 32 бит, после сброса 0x0C00 0000 (сбрасывается системным сбросом, флаги сброса — только при включении питания). В коде: RCC->CSR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| LPWRRSTF | WWDGRSTF | IWDGRSTF | SFTRSTF | PORRSTF | PINRSTF | — | RMVF | — | |||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | LSIRDY | LSION | |||||||||||||
- LPWRRSTF (бит 31) — Причина сброса: вход в режим пониженного потребления.
- WWDGRSTF (бит 30) — Причина сброса: оконный сторожевой таймер WWDG.
- IWDGRSTF (бит 29) — Причина сброса: независимый сторожевой таймер IWDG.
- SFTRSTF (бит 28) — Причина сброса: программный сброс.
- PORRSTF (бит 27) — Причина сброса: включение питания (POR/PDR).
- PINRSTF (бит 26) — Причина сброса: вывод NRST.
- RMVF (бит 24) — Сброс флагов причины сброса: запись 1.
- LSIRDY (бит 1) — Флаг готовности LSI.
- LSION (бит 0) — Включение внутреннего генератора LSI.
RCC_AHBRSTR — сброс периферии шины AHB
Смещение 0x28, адрес 0x4002 1028, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32F105, STM32F107. В коде: RCC->AHBRSTR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ETHMACRST | — | OTGFSRST | — | |||||||||||
- ETHMACRST (бит 14) — Сброс Ethernet MAC: 1 — блок удерживается в сбросе (только у STM32F107).
- OTGFSRST (бит 12) — Сброс USB OTG FS: 1 — блок удерживается в сбросе.
RCC_CFGR2 — pLL2, PLL3 и делители PREDIV у connectivity line
Смещение 0x2C, адрес 0x4002 102C, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32F105, STM32F107. В коде: RCC->CFGR2.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | I2S3SRC | I2S2SRC | PREDIV1SRC | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PLL3MUL | PLL2MUL | PREDIV2 | PREDIV1 | ||||||||||||
- I2S3SRC (бит 18) — Тактирование I2S3: SYSCLK или VCO PLL3.
I2S3SRC Значение 0 SYSCLK 1 VCO PLL3 (2 × PLL3CLK) - I2S2SRC (бит 17) — Тактирование I2S2: SYSCLK или VCO PLL3.
I2S2SRC Значение 0 SYSCLK 1 VCO PLL3 (2 × PLL3CLK) - PREDIV1SRC (бит 16) — Источник PREDIV1: HSE или PLL2.
PREDIV1SRC Значение Макрос CMSIS 0 HSE RCC_CFGR2_PREDIV1SRC_HSE 1 PLL2 RCC_CFGR2_PREDIV1SRC_PLL2 - PLL3MUL (биты 15:12) — Множитель PLL3.
PLL3MUL Значение Макрос CMSIS 0110 ×8 RCC_CFGR2_PLL3MUL8 0111 ×9 RCC_CFGR2_PLL3MUL9 1000 ×10 RCC_CFGR2_PLL3MUL10 1001 ×11 RCC_CFGR2_PLL3MUL11 1010 ×12 RCC_CFGR2_PLL3MUL12 1011 ×13 RCC_CFGR2_PLL3MUL13 1100 ×14 RCC_CFGR2_PLL3MUL14 1110 ×16 RCC_CFGR2_PLL3MUL16 1111 ×20 RCC_CFGR2_PLL3MUL20 - PLL2MUL (биты 11:8) — Множитель PLL2.
PLL2MUL Значение Макрос CMSIS 0110 ×8 RCC_CFGR2_PLL2MUL8 0111 ×9 RCC_CFGR2_PLL2MUL9 1000 ×10 RCC_CFGR2_PLL2MUL10 1001 ×11 RCC_CFGR2_PLL2MUL11 1010 ×12 RCC_CFGR2_PLL2MUL12 1011 ×13 RCC_CFGR2_PLL2MUL13 1100 ×14 RCC_CFGR2_PLL2MUL14 1110 ×16 RCC_CFGR2_PLL2MUL16 1111 ×20 RCC_CFGR2_PLL2MUL20 - PREDIV2 (биты 7:4) — Делитель PREDIV2 перед PLL2 и PLL3.
PREDIV2 Значение Макрос CMSIS 0000 Без деления RCC_CFGR2_PREDIV2_DIV1 0001 Деление на 2 RCC_CFGR2_PREDIV2_DIV2 0010 Деление на 3 RCC_CFGR2_PREDIV2_DIV3 0011 Деление на 4 RCC_CFGR2_PREDIV2_DIV4 0100 Деление на 5 RCC_CFGR2_PREDIV2_DIV5 0101 Деление на 6 RCC_CFGR2_PREDIV2_DIV6 0110 Деление на 7 RCC_CFGR2_PREDIV2_DIV7 0111 Деление на 8 RCC_CFGR2_PREDIV2_DIV8 1000 Деление на 9 RCC_CFGR2_PREDIV2_DIV9 1001 Деление на 10 RCC_CFGR2_PREDIV2_DIV10 1010 Деление на 11 RCC_CFGR2_PREDIV2_DIV11 1011 Деление на 12 RCC_CFGR2_PREDIV2_DIV12 1100 Деление на 13 RCC_CFGR2_PREDIV2_DIV13 1101 Деление на 14 RCC_CFGR2_PREDIV2_DIV14 1110 Деление на 15 RCC_CFGR2_PREDIV2_DIV15 1111 Деление на 16 RCC_CFGR2_PREDIV2_DIV16 - PREDIV1 (биты 3:0) — Делитель PREDIV1 перед PLL.
PREDIV1 Значение Макрос CMSIS 0000 Без деления RCC_CFGR2_PREDIV1_DIV1 0001 Деление на 2 RCC_CFGR2_PREDIV1_DIV2 0010 Деление на 3 RCC_CFGR2_PREDIV1_DIV3 0011 Деление на 4 RCC_CFGR2_PREDIV1_DIV4 0100 Деление на 5 RCC_CFGR2_PREDIV1_DIV5 0101 Деление на 6 RCC_CFGR2_PREDIV1_DIV6 0110 Деление на 7 RCC_CFGR2_PREDIV1_DIV7 0111 Деление на 8 RCC_CFGR2_PREDIV1_DIV8 1000 Деление на 9 RCC_CFGR2_PREDIV1_DIV9 1001 Деление на 10 RCC_CFGR2_PREDIV1_DIV10 1010 Деление на 11 RCC_CFGR2_PREDIV1_DIV11 1011 Деление на 12 RCC_CFGR2_PREDIV1_DIV12 1100 Деление на 13 RCC_CFGR2_PREDIV1_DIV13 1101 Деление на 14 RCC_CFGR2_PREDIV1_DIV14 1110 Деление на 15 RCC_CFGR2_PREDIV1_DIV15 1111 Деление на 16 RCC_CFGR2_PREDIV1_DIV16
Частые вопросы
Как включить тактирование USART1 в STM32F103?
Установите бит USART1EN в регистре RCC_APB2ENR: RCC->APB2ENR |= RCC_APB2ENR_USART1EN. Выводы USART1 — порт A, поэтому нужен и IOPAEN в том же регистре. USART2 и USART3 тактируются от шины APB1 — их биты в RCC_APB1ENR.
Почему STM32F103 не стартует после переключения на PLL 72 МГц?
Частые причины — не выставлена задержка флеш-памяти (2 такта ожидания в FLASH_ACR для 48–72 МГц), шина APB1 оставлена без делителя и получила 72 МГц вместо допустимых 36, или переключение сделано до установки флага PLLRDY. Порядок и значения удобно проверить в калькуляторе тактирования STM32.
Как узнать причину последнего сброса?
По флагам регистра RCC_CSR: PINRSTF — сброс выводом NRST, PORRSTF — включение питания, SFTRSTF — программный сброс, IWDGRSTF и WWDGRSTF — сторожевые таймеры, LPWRRSTF — сброс при входе в режим пониженного потребления. Флаги сохраняются до записи 1 в бит RMVF.
Источники
- STMicroelectronics. RM0008: Reference manual (Rev 21) — раздел 7.3 (connectivity line — 8.3): описание регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-f1 v4.3.5: заголовки CMSIS stm32f101x6.h, stm32f101xb.h, stm32f101xe.h, stm32f101xg.h, stm32f102x6.h, stm32f102xb.h, stm32f103x6.h, stm32f103xb.h, stm32f103xe.h, stm32f103xg.h, stm32f105xc.h, stm32f107xc.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры STM32F1
- Все регистры STM32F1Блоки периферии и заголовки CMSIS
- GPIO — порты ввода-выводаGPIOx_CRL, GPIOx_CRH, GPIOx_IDR, GPIOx_ODR, GPIOx_BSRR, GPIOx_BRR
- AFIO — переназначение функций и выбор входов EXTIAFIO_EVCR, AFIO_MAPR, AFIO_EXTICR1, AFIO_EXTICR2, AFIO_EXTICR3, AFIO_EXTICR4
- EXTI — контроллер внешних прерываний и событийEXTI_IMR, EXTI_EMR, EXTI_RTSR, EXTI_FTSR, EXTI_SWIER, EXTI_PR
- USART — последовательные порты USART и UARTUSART_SR, USART_DR, USART_BRR, USART_CR1, USART_CR2, USART_CR3
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_DR, I2C_SR1
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- DMA — контроллеры прямого доступа к памятиDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- ADC — аналого-цифровые преобразователиADC_SR, ADC_CR1, ADC_CR2, ADC_SMPR1, ADC_SMPR2, ADC_JOFR1
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — блок вычисления CRCCRC_DR, CRC_IDR, CRC_CR
- DBGMCU — регистры отладкиDBGMCU_IDCODE, DBGMCU_CR