RCC clock configuration register (RCC_CFGR)

Регистр настройки тактовой частоты STM32F446

Смещение (Address offset): 0x08

Reset value: 0x0000'0000

3130292827262524
MCO2[1:0] MCO2PRE[2:0] MCO1PRE[2:0]
rwrwrwrwrwrwrwrw
00000000
2322212019181716
Reserved MCO1[1:0] RTCPRE[4:0]
---rwrwrwrwrwrwrw
00000000


15141312111098
PPRE2[2:0] PPRE1[2:0] Reserved
---rwrwrwrwrw------
00000000
76543210
HPRE[3:0] SWS[1:0] SW[1:0]
rwrwrwrwrrrwrw
00000000


Bits 31:30
MCO2[1:0]
Microcontroller clock output 2
Выбор источника сигнала для второго выхода контроля тактовых частот.

Переключение источника сигнала во время работы микроконтроллера может привести к сбоям в работе MCO. Рекомендуется выбирать источник сразу после сброса до включения внешнего генератора и блока PLL.

 00 :  SYSCLK - системная тактовая частота

 01 :  PLLI2S

 10 :  HSE

 11 :  PLL

Bits 29:27
MCO2PRE[2:0]
MCO2 prescaler
Предделитель сигнала для второго выхода контроля тактовых частот.

Изменение значения предделителя сигнала во время работы микроконтроллера может привести к сбоям в работе MCO. Рекомендуется выбирать делитель сразу после сброса до включения внешнего генератора и блока PLL.

 0xx :  предделитель отключен

 100 :  деление на 2

 101 :  деление на 3

 110 :  деление на 4

 111 :  деление на 5

Bits 26:24
MCO1PRE[2:0]
MCO1 prescaler
Предделитель сигнала для первого выхода контроля тактовых частот.

Изменение значения предделителя сигнала во время работы микроконтроллера может привести к сбоям в работе MCO. Рекомендуется выбирать делитель сразу после сброса до включения внешнего генератора и блока PLL.

 0xx :  предделитель отключен

 100 :  деление на 2

 101 :  деление на 3

 110 :  деление на 4

 111 :  деление на 5

Bit 23
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса
Bits 22:21
MCO1[1:0]
Microcontroller clock output 1
Выбор источника сигнала для первого выхода контроля тактовых частот.

Переключение источника сигнала во время работы микроконтроллера может привести к сбоям в работе MCO. Рекомендуется выбирать источник сразу после сброса до включения внешнего генератора и блока PLL.

 00 :  HSI

 01 :  LSE

 10 :  HSE

 11 :  PLL

Bits 20:16
RTCPRE[4:0]
HSE division factor for RTC clock
Коэффициент деления HSE для частов реального времени

Выбирается таким, чтобы входная частота блока часов реального времени была 1 МГц.

Устанавливается до выбора источника тактового сигнала RTC

 00000 :  тактирование отключено

 00001 :  тактирование отключено

 00010 :  HSE/2

 00011 :  HSE/3

 00100 :  HSE/4

 ...

 11110 :  HSE/30

 11111 :  HSE/31

Bits 15:13
PPRE2[2:0]
APB high-speed prescaler (APB2)
Предделитель высокоскоростной периферийной шины APB2

Максимальная частота шины APB2 не должна превышать 90 МГц.

Время ожидания после установки делителя: от 1 до 16 тактов шины AHB

 0xx :  нет деления частоты AHB

 100 :  AHB/2

 101 :  AHB/4

 110 :  AHB/8

 111 :  AHB/16

Bits 12:10
PPRE1[2:0]
APB Low speed prescaler (APB1)
Предделитель низкоскоростной периферийной шины APB1

Максимальная частота шины APB2 не должна превышать 45 МГц.

Время ожидания после установки делителя: от 1 до 16 тактов шины AHB

 0xx :  нет деления частоты AHB

 100 :  AHB/2

 101 :  AHB/4

 110 :  AHB/8

 111 :  AHB/16

Bits 9:8
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса
Bits 7:4
HPRE[3:0]
AHB prescaler
Предделитель шины AHB

При использовании Ethernet частота шины AHB должна быть не менее 25 МГц.

Время ожидания после установки делителя: от 1 до 16 тактов шины AHB

 0xxx :  нет деления системной частоты SYSCLK

 1000 :  SYSCLK / 2

 1001 :  SYSCLK / 4

 1010 :  SYSCLK / 8

 1011 :  SYSCLK / 16

 1100 :  SYSCLK / 64

 1101 :  SYSCLK / 128

 1110 :  SYSCLK / 256

 1111 :  SYSCLK / 512

Bits 1:0
SW[1:0]
System clock switch
Источник системной тактовой частоты SYSCLK

Настраивается программно. Аппаратно устанавливает HSI при выходе из режимов Stop или Standby или при ошибке HSE.

 00 :  HSI

 01 :  HSE

 10 :  PLL_P

 11 :  PLL_R



//-  stm32f446xx.h

/********************  Bit definition for RCC_CFGR register  ******************/
/*!< SW configuration */
#define RCC_CFGR_SW_Pos                    (0U)                                
#define RCC_CFGR_SW_Msk                    (0x3UL << RCC_CFGR_SW_Pos)           /*!< 0x00000003 */
#define RCC_CFGR_SW                        RCC_CFGR_SW_Msk                     /*!< SW[1:0] bits (System clock Switch) */
#define RCC_CFGR_SW_0                      (0x1UL << RCC_CFGR_SW_Pos)           /*!< 0x00000001 */
#define RCC_CFGR_SW_1                      (0x2UL << RCC_CFGR_SW_Pos)           /*!< 0x00000002 */

#define RCC_CFGR_SW_HSI                    0x00000000U                         /*!< HSI selected as system clock */
#define RCC_CFGR_SW_HSE                    0x00000001U                         /*!< HSE selected as system clock */
#define RCC_CFGR_SW_PLL                    0x00000002U                         /*!< PLL selected as system clock */
#define RCC_CFGR_SW_PLLR                   0x00000003U                         /*!< PLL/PLLR selected as system clock */

/*!< SWS configuration */
#define RCC_CFGR_SWS_Pos                   (2U)                                
#define RCC_CFGR_SWS_Msk                   (0x3UL << RCC_CFGR_SWS_Pos)          /*!< 0x0000000C */
#define RCC_CFGR_SWS                       RCC_CFGR_SWS_Msk                    /*!< SWS[1:0] bits (System Clock Switch Status) */
#define RCC_CFGR_SWS_0                     (0x1UL << RCC_CFGR_SWS_Pos)          /*!< 0x00000004 */
#define RCC_CFGR_SWS_1                     (0x2UL << RCC_CFGR_SWS_Pos)          /*!< 0x00000008 */

#define RCC_CFGR_SWS_HSI                   0x00000000U                         /*!< HSI oscillator used as system clock        */
#define RCC_CFGR_SWS_HSE                   0x00000004U                         /*!< HSE oscillator used as system clock        */
#define RCC_CFGR_SWS_PLL                   0x00000008U                         /*!< PLL used as system clock                   */
#define RCC_CFGR_SWS_PLLR                  0x0000000CU                         /*!< PLL/PLLR used as system clock       */

/*!< HPRE configuration */
#define RCC_CFGR_HPRE_Pos                  (4U)                                
#define RCC_CFGR_HPRE_Msk                  (0xFUL << RCC_CFGR_HPRE_Pos)         /*!< 0x000000F0 */
#define RCC_CFGR_HPRE                      RCC_CFGR_HPRE_Msk                   /*!< HPRE[3:0] bits (AHB prescaler) */
#define RCC_CFGR_HPRE_0                    (0x1UL << RCC_CFGR_HPRE_Pos)         /*!< 0x00000010 */
#define RCC_CFGR_HPRE_1                    (0x2UL << RCC_CFGR_HPRE_Pos)         /*!< 0x00000020 */
#define RCC_CFGR_HPRE_2                    (0x4UL << RCC_CFGR_HPRE_Pos)         /*!< 0x00000040 */
#define RCC_CFGR_HPRE_3                    (0x8UL << RCC_CFGR_HPRE_Pos)         /*!< 0x00000080 */

#define RCC_CFGR_HPRE_DIV1                 0x00000000U                         /*!< SYSCLK not divided    */
#define RCC_CFGR_HPRE_DIV2                 0x00000080U                         /*!< SYSCLK divided by 2   */
#define RCC_CFGR_HPRE_DIV4                 0x00000090U                         /*!< SYSCLK divided by 4   */
#define RCC_CFGR_HPRE_DIV8                 0x000000A0U                         /*!< SYSCLK divided by 8   */
#define RCC_CFGR_HPRE_DIV16                0x000000B0U                         /*!< SYSCLK divided by 16  */
#define RCC_CFGR_HPRE_DIV64                0x000000C0U                         /*!< SYSCLK divided by 64  */
#define RCC_CFGR_HPRE_DIV128               0x000000D0U                         /*!< SYSCLK divided by 128 */
#define RCC_CFGR_HPRE_DIV256               0x000000E0U                         /*!< SYSCLK divided by 256 */
#define RCC_CFGR_HPRE_DIV512               0x000000F0U                         /*!< SYSCLK divided by 512 */

/*!< PPRE1 configuration */
#define RCC_CFGR_PPRE1_Pos                 (10U)                               
#define RCC_CFGR_PPRE1_Msk                 (0x7UL << RCC_CFGR_PPRE1_Pos)        /*!< 0x00001C00 */
#define RCC_CFGR_PPRE1                     RCC_CFGR_PPRE1_Msk                  /*!< PRE1[2:0] bits (APB1 prescaler) */
#define RCC_CFGR_PPRE1_0                   (0x1UL << RCC_CFGR_PPRE1_Pos)        /*!< 0x00000400 */
#define RCC_CFGR_PPRE1_1                   (0x2UL << RCC_CFGR_PPRE1_Pos)        /*!< 0x00000800 */
#define RCC_CFGR_PPRE1_2                   (0x4UL << RCC_CFGR_PPRE1_Pos)        /*!< 0x00001000 */

#define RCC_CFGR_PPRE1_DIV1                0x00000000U                         /*!< HCLK not divided   */
#define RCC_CFGR_PPRE1_DIV2                0x00001000U                         /*!< HCLK divided by 2  */
#define RCC_CFGR_PPRE1_DIV4                0x00001400U                         /*!< HCLK divided by 4  */
#define RCC_CFGR_PPRE1_DIV8                0x00001800U                         /*!< HCLK divided by 8  */
#define RCC_CFGR_PPRE1_DIV16               0x00001C00U                         /*!< HCLK divided by 16 */

/*!< PPRE2 configuration */
#define RCC_CFGR_PPRE2_Pos                 (13U)                               
#define RCC_CFGR_PPRE2_Msk                 (0x7UL << RCC_CFGR_PPRE2_Pos)        /*!< 0x0000E000 */
#define RCC_CFGR_PPRE2                     RCC_CFGR_PPRE2_Msk                  /*!< PRE2[2:0] bits (APB2 prescaler) */
#define RCC_CFGR_PPRE2_0                   (0x1UL << RCC_CFGR_PPRE2_Pos)        /*!< 0x00002000 */
#define RCC_CFGR_PPRE2_1                   (0x2UL << RCC_CFGR_PPRE2_Pos)        /*!< 0x00004000 */
#define RCC_CFGR_PPRE2_2                   (0x4UL << RCC_CFGR_PPRE2_Pos)        /*!< 0x00008000 */

#define RCC_CFGR_PPRE2_DIV1                0x00000000U                         /*!< HCLK not divided   */
#define RCC_CFGR_PPRE2_DIV2                0x00008000U                         /*!< HCLK divided by 2  */
#define RCC_CFGR_PPRE2_DIV4                0x0000A000U                         /*!< HCLK divided by 4  */
#define RCC_CFGR_PPRE2_DIV8                0x0000C000U                         /*!< HCLK divided by 8  */
#define RCC_CFGR_PPRE2_DIV16               0x0000E000U                         /*!< HCLK divided by 16 */

/*!< RTCPRE configuration */
#define RCC_CFGR_RTCPRE_Pos                (16U)                               
#define RCC_CFGR_RTCPRE_Msk                (0x1FUL << RCC_CFGR_RTCPRE_Pos)      /*!< 0x001F0000 */
#define RCC_CFGR_RTCPRE                    RCC_CFGR_RTCPRE_Msk                 
#define RCC_CFGR_RTCPRE_0                  (0x01UL << RCC_CFGR_RTCPRE_Pos)      /*!< 0x00010000 */
#define RCC_CFGR_RTCPRE_1                  (0x02UL << RCC_CFGR_RTCPRE_Pos)      /*!< 0x00020000 */
#define RCC_CFGR_RTCPRE_2                  (0x04UL << RCC_CFGR_RTCPRE_Pos)      /*!< 0x00040000 */
#define RCC_CFGR_RTCPRE_3                  (0x08UL << RCC_CFGR_RTCPRE_Pos)      /*!< 0x00080000 */
#define RCC_CFGR_RTCPRE_4                  (0x10UL << RCC_CFGR_RTCPRE_Pos)      /*!< 0x00100000 */

/*!< MCO1 configuration */
#define RCC_CFGR_MCO1_Pos                  (21U)                               
#define RCC_CFGR_MCO1_Msk                  (0x3UL << RCC_CFGR_MCO1_Pos)         /*!< 0x00600000 */
#define RCC_CFGR_MCO1                      RCC_CFGR_MCO1_Msk                   
#define RCC_CFGR_MCO1_0                    (0x1UL << RCC_CFGR_MCO1_Pos)         /*!< 0x00200000 */
#define RCC_CFGR_MCO1_1                    (0x2UL << RCC_CFGR_MCO1_Pos)         /*!< 0x00400000 */

#define RCC_CFGR_MCO1PRE_Pos               (24U)                               
#define RCC_CFGR_MCO1PRE_Msk               (0x7UL << RCC_CFGR_MCO1PRE_Pos)      /*!< 0x07000000 */
#define RCC_CFGR_MCO1PRE                   RCC_CFGR_MCO1PRE_Msk                
#define RCC_CFGR_MCO1PRE_0                 (0x1UL << RCC_CFGR_MCO1PRE_Pos)      /*!< 0x01000000 */
#define RCC_CFGR_MCO1PRE_1                 (0x2UL << RCC_CFGR_MCO1PRE_Pos)      /*!< 0x02000000 */
#define RCC_CFGR_MCO1PRE_2                 (0x4UL << RCC_CFGR_MCO1PRE_Pos)      /*!< 0x04000000 */

#define RCC_CFGR_MCO2PRE_Pos               (27U)                               
#define RCC_CFGR_MCO2PRE_Msk               (0x7UL << RCC_CFGR_MCO2PRE_Pos)      /*!< 0x38000000 */
#define RCC_CFGR_MCO2PRE                   RCC_CFGR_MCO2PRE_Msk                
#define RCC_CFGR_MCO2PRE_0                 (0x1UL << RCC_CFGR_MCO2PRE_Pos)      /*!< 0x08000000 */
#define RCC_CFGR_MCO2PRE_1                 (0x2UL << RCC_CFGR_MCO2PRE_Pos)      /*!< 0x10000000 */
#define RCC_CFGR_MCO2PRE_2                 (0x4UL << RCC_CFGR_MCO2PRE_Pos)      /*!< 0x20000000 */

#define RCC_CFGR_MCO2_Pos                  (30U)                               
#define RCC_CFGR_MCO2_Msk                  (0x3UL << RCC_CFGR_MCO2_Pos)         /*!< 0xC0000000 */
#define RCC_CFGR_MCO2                      RCC_CFGR_MCO2_Msk                   
#define RCC_CFGR_MCO2_0                    (0x1UL << RCC_CFGR_MCO2_Pos)         /*!< 0x40000000 */
#define RCC_CFGR_MCO2_1                    (0x2UL << RCC_CFGR_MCO2_Pos)         /*!< 0x80000000 */