Clock configuration register (RCC_CFGR)

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

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

Reset value: 0x0000'0000

3130292827262524
Reserved MCO[2:0]
---------------rwrwrw
00000000
2322212019181716
Reserved USBPRE PLLMUL[3:0] PLLXTPRE PLLSRC
---rwrwrwrwrwrwrw
00000000


15141312111098
ADCPRE[1:0] PPRE2[2:0] PPRE1[2:0]
rwrwrwrwrwrwrwrw
00000000
76543210
HPRE[3:0] SWS[1:0] SW[1:0]
rwrwrwrwrrrwrw
00000000


Bits 31:27
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса
Bits 26:24
MCO[2:0]
Microcontroller clock output
Выбор сигнала для вывода на ножку MCO микроконтроллера.

Требуется время для стабилизации выходного сигнала после старта или переключения источника тактовой частоты.

При выборе сигнала убедиться, что частота на выходе не более 50 МГц (максимальная частота ввода-вывода).

 0xx : сигнал не выбран.

 100 : выбран сигнал системной тактовой частоты SYSCLK.

 101 : выбран сигнал выхода встороенного генератора HSI.

 110 : выбран сигнал выхода внешнего генератора HSE.

 111 : выбран сигнал выхода умножителя PLL, делённый на два.

Bit 23
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса
Bit 22
USBPRE
USB prescaler
Предделитель USB

Необходим для генерации тактовой частоты USB 48 МГц.

Предделитель должен быть установлен до включения контроллера USB в регистре RCC_APB1ENR. Бит не может быть изменён, если включен контроллер USB.

 0 : коэффициент деления 1.5.

 1 : коэффициент деления 1.0 (нет деления).

Bits 21:18
PLLMUL[3:0]
PLL multiplication factor
Коэффициент умножения модуля PLL

PLL (phase locket loop) – ФАПЧ (фазовая автоподстройка частоты)

Коэффициент умножения может быть изменён только при отключенном модуле PLL. Выходная частота модуля PLL не может превышать 72 МГц.

 0000 :  x 2

 0001 :  x 3

 0010 :  x 4

 0011 :  x 5

 0100 :  x 6

 0101 :  x 7

 0110 :  x 8

 0111 :  x 9

 1000 :  x 10

 1001 :  x 11

 1010 :  x 12

 1011 :  x 13

 1100 :  x 14

 1101 :  x 15

 1110 :  x 16

 1111 :  x 16

Bit 17
PLLXTPRE
HSE divider for PLL entry
Включает делитель частоты внешнего генератора HSE

Делитель может быть изменён только при отключенном модуле PLL.

 0 : делитель отключен.

 1 : включен делитель на 2.

Bit 16
PLLSRC
PLL entry clock source
Источник входного сигнала модуля PLL

Может быть изменён только при отключенном модуле PLL.

 0 : источником является сигнал генератора HSI, делённый на 2.

 1 : источником является сигнал генератора HSE без деления, или делённый на 2.

Bits 15:14
ADCPRE[1:0]
ADC prescaler
Предделитель аналого-цифрового преобразователя (ADC)

 00 : деление на 2.

 01 : деление на 4.

 10 : деление на 8.

 11 : деление на 16.

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

Входной сигнал HCLK, выходной сигнал PCLK2

 0xx : делитель отключен. PCLK2 = HCLK

 100 : деление на 2. PCLK2 = HCLK /2

 101 : деление на 4. PCLK2 = HCLK /4

 110 : деление на 8. PCLK2 = HCLK /8

 111 : деление на 16. PCLK2 = HCLK /16

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

Входной сигнал HCLK, выходной сигнал PCLK1

Частота выходного сигнала PCLK1 не может быть больше 36 МГц.

 0xx : делитель отключен. PCLK1 = HCLK

 100 : деление на 2. PCLK1 = HCLK /2

 101 : деление на 4. PCLK1 = HCLK /4

 110 : деление на 8. PCLK1 = HCLK /8

 111 : деление на 16. PCLK1 = HCLK /16

Bits 7:4
HPRE[3:0]
AHB prescaler
Предделитель расширенной высокопроизводительной шины AHB

Входной сигнал SYSCLK, выходной сигнал HCLK

 0xxx : HCLK = SYSCLK. делитель отключен

 1000 : HCLK = SYSCLK /2

 1001 : HCLK = SYSCLK /4

 1010 : HCLK = SYSCLK /8

 1011 : HCLK = SYSCLK /16

 1100 : HCLK = SYSCLK /64

 1101 : HCLK = SYSCLK /128

 1110 : HCLK = SYSCLK /256

 1111 : HCLK = SYSCLK /512

Bits 3:2
SWS[1:0]
System clock switch status
Статус источника сигнала в качестве системной тактовой частоты SYSCLK

Только для чтения. Изменяется аппаратно и показывает текущий источник сигнала для SYSCLK

 00 : HSI генератор выбран источником SYSCLK.

 01 : HSE генератор выбран источником SYSCLK.

 10 : модуль PLL выбран источником SYSCLK.

 11 : не используется.

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

При выходе из режимов Stop и Standby аппаратно источником выбирается HSI.

При сбое генератора HSE, если включена защита системной такстовой частоты CSS, аппаратно источником выбирается HSI.

 00 : HSI генератор выбран источником SYSCLK.

 01 : HSE генератор выбран источником SYSCLK.

 10 : модуль PLL выбран источником SYSCLK.

 11 : недопустимо.



/*******************  Bit definition for RCC_CFGR register  *******************/
/* SW configuration */
#define  RCC_CFGR_SW                         ((uint32_t)0x00000003)        /* SW[1:0] bits (System clock Switch) */
#define  RCC_CFGR_SW_0                       ((uint32_t)0x00000001)        /* Bit 0 */
#define  RCC_CFGR_SW_1                       ((uint32_t)0x00000002)        /* Bit 1 */

#define  RCC_CFGR_SW_HSI                     ((uint32_t)0x00000000)        /* HSI selected as system clock */
#define  RCC_CFGR_SW_HSE                     ((uint32_t)0x00000001)        /* HSE selected as system clock */
#define  RCC_CFGR_SW_PLL                     ((uint32_t)0x00000002)        /* PLL selected as system clock */

/* SWS configuration */
#define  RCC_CFGR_SWS                        ((uint32_t)0x0000000C)        /* SWS[1:0] bits (System Clock Switch Status) */
#define  RCC_CFGR_SWS_0                      ((uint32_t)0x00000004)        /* Bit 0 */
#define  RCC_CFGR_SWS_1                      ((uint32_t)0x00000008)        /* Bit 1 */

#define  RCC_CFGR_SWS_HSI                    ((uint32_t)0x00000000)        /* HSI oscillator used as system clock */
#define  RCC_CFGR_SWS_HSE                    ((uint32_t)0x00000004)        /* HSE oscillator used as system clock */
#define  RCC_CFGR_SWS_PLL                    ((uint32_t)0x00000008)        /* PLL used as system clock */

/* HPRE configuration */
#define  RCC_CFGR_HPRE                       ((uint32_t)0x000000F0)        /* HPRE[3:0] bits (AHB prescaler) */
#define  RCC_CFGR_HPRE_0                     ((uint32_t)0x00000010)        /* Bit 0 */
#define  RCC_CFGR_HPRE_1                     ((uint32_t)0x00000020)        /* Bit 1 */
#define  RCC_CFGR_HPRE_2                     ((uint32_t)0x00000040)        /* Bit 2 */
#define  RCC_CFGR_HPRE_3                     ((uint32_t)0x00000080)        /* Bit 3 */

#define  RCC_CFGR_HPRE_DIV1                  ((uint32_t)0x00000000)        /* SYSCLK not divided */
#define  RCC_CFGR_HPRE_DIV2                  ((uint32_t)0x00000080)        /* SYSCLK divided by 2 */
#define  RCC_CFGR_HPRE_DIV4                  ((uint32_t)0x00000090)        /* SYSCLK divided by 4 */
#define  RCC_CFGR_HPRE_DIV8                  ((uint32_t)0x000000A0)        /* SYSCLK divided by 8 */
#define  RCC_CFGR_HPRE_DIV16                 ((uint32_t)0x000000B0)        /* SYSCLK divided by 16 */
#define  RCC_CFGR_HPRE_DIV64                 ((uint32_t)0x000000C0)        /* SYSCLK divided by 64 */
#define  RCC_CFGR_HPRE_DIV128                ((uint32_t)0x000000D0)        /* SYSCLK divided by 128 */
#define  RCC_CFGR_HPRE_DIV256                ((uint32_t)0x000000E0)        /* SYSCLK divided by 256 */
#define  RCC_CFGR_HPRE_DIV512                ((uint32_t)0x000000F0)        /* SYSCLK divided by 512 */

/* PPRE1 configuration */
#define  RCC_CFGR_PPRE1                      ((uint32_t)0x00000700)        /* PRE1[2:0] bits (APB1 prescaler) */
#define  RCC_CFGR_PPRE1_0                    ((uint32_t)0x00000100)        /* Bit 0 */
#define  RCC_CFGR_PPRE1_1                    ((uint32_t)0x00000200)        /* Bit 1 */
#define  RCC_CFGR_PPRE1_2                    ((uint32_t)0x00000400)        /* Bit 2 */

#define  RCC_CFGR_PPRE1_DIV1                 ((uint32_t)0x00000000)        /* HCLK not divided */
#define  RCC_CFGR_PPRE1_DIV2                 ((uint32_t)0x00000400)        /* HCLK divided by 2 */
#define  RCC_CFGR_PPRE1_DIV4                 ((uint32_t)0x00000500)        /* HCLK divided by 4 */
#define  RCC_CFGR_PPRE1_DIV8                 ((uint32_t)0x00000600)        /* HCLK divided by 8 */
#define  RCC_CFGR_PPRE1_DIV16                ((uint32_t)0x00000700)        /* HCLK divided by 16 */

/* PPRE2 configuration */
#define  RCC_CFGR_PPRE2                      ((uint32_t)0x00003800)        /* PRE2[2:0] bits (APB2 prescaler) */
#define  RCC_CFGR_PPRE2_0                    ((uint32_t)0x00000800)        /* Bit 0 */
#define  RCC_CFGR_PPRE2_1                    ((uint32_t)0x00001000)        /* Bit 1 */
#define  RCC_CFGR_PPRE2_2                    ((uint32_t)0x00002000)        /* Bit 2 */

#define  RCC_CFGR_PPRE2_DIV1                 ((uint32_t)0x00000000)        /* HCLK not divided */
#define  RCC_CFGR_PPRE2_DIV2                 ((uint32_t)0x00002000)        /* HCLK divided by 2 */
#define  RCC_CFGR_PPRE2_DIV4                 ((uint32_t)0x00002800)        /* HCLK divided by 4 */
#define  RCC_CFGR_PPRE2_DIV8                 ((uint32_t)0x00003000)        /* HCLK divided by 8 */
#define  RCC_CFGR_PPRE2_DIV16                ((uint32_t)0x00003800)        /* HCLK divided by 16 */

/* ADCPPRE configuration */
#define  RCC_CFGR_ADCPRE                     ((uint32_t)0x0000C000)        /* ADCPRE[1:0] bits (ADC prescaler) */
#define  RCC_CFGR_ADCPRE_0                   ((uint32_t)0x00004000)        /* Bit 0 */
#define  RCC_CFGR_ADCPRE_1                   ((uint32_t)0x00008000)        /* Bit 1 */

#define  RCC_CFGR_ADCPRE_DIV2                ((uint32_t)0x00000000)        /* PCLK2 divided by 2 */
#define  RCC_CFGR_ADCPRE_DIV4                ((uint32_t)0x00004000)        /* PCLK2 divided by 4 */
#define  RCC_CFGR_ADCPRE_DIV6                ((uint32_t)0x00008000)        /* PCLK2 divided by 6 */
#define  RCC_CFGR_ADCPRE_DIV8                ((uint32_t)0x0000C000)        /* PCLK2 divided by 8 */

#define  RCC_CFGR_PLLSRC                     ((uint32_t)0x00010000)        /* PLL entry clock source */

#define  RCC_CFGR_PLLXTPRE                   ((uint32_t)0x00020000)        /* HSE divider for PLL entry */

/* PLLMUL configuration */
#define  RCC_CFGR_PLLMULL                    ((uint32_t)0x003C0000)        /* PLLMUL[3:0] bits (PLL multiplication factor) */
#define  RCC_CFGR_PLLMULL_0                  ((uint32_t)0x00040000)        /* Bit 0 */
#define  RCC_CFGR_PLLMULL_1                  ((uint32_t)0x00080000)        /* Bit 1 */
#define  RCC_CFGR_PLLMULL_2                  ((uint32_t)0x00100000)        /* Bit 2 */
#define  RCC_CFGR_PLLMULL_3                  ((uint32_t)0x00200000)        /* Bit 3 */

#ifdef STM32F10X_CL
 #define  RCC_CFGR_PLLSRC_HSI_Div2           ((uint32_t)0x00000000)        /* HSI clock divided by 2 selected as PLL entry clock source */
 #define  RCC_CFGR_PLLSRC_PREDIV1            ((uint32_t)0x00010000)        /* PREDIV1 clock selected as PLL entry clock source */

 #define  RCC_CFGR_PLLXTPRE_PREDIV1          ((uint32_t)0x00000000)        /* PREDIV1 clock not divided for PLL entry */
 #define  RCC_CFGR_PLLXTPRE_PREDIV1_Div2     ((uint32_t)0x00020000)        /* PREDIV1 clock divided by 2 for PLL entry */

 #define  RCC_CFGR_PLLMULL4                  ((uint32_t)0x00080000)        /* PLL input clock * 4 */
 #define  RCC_CFGR_PLLMULL5                  ((uint32_t)0x000C0000)        /* PLL input clock * 5 */
 #define  RCC_CFGR_PLLMULL6                  ((uint32_t)0x00100000)        /* PLL input clock * 6 */
 #define  RCC_CFGR_PLLMULL7                  ((uint32_t)0x00140000)        /* PLL input clock * 7 */
 #define  RCC_CFGR_PLLMULL8                  ((uint32_t)0x00180000)        /* PLL input clock * 8 */
 #define  RCC_CFGR_PLLMULL9                  ((uint32_t)0x001C0000)        /* PLL input clock * 9 */
 #define  RCC_CFGR_PLLMULL6_5                ((uint32_t)0x00340000)        /* PLL input clock * 6.5 */
 
 #define  RCC_CFGR_OTGFSPRE                  ((uint32_t)0x00400000)        /* USB OTG FS prescaler */
 
/* MCO configuration */
 #define  RCC_CFGR_MCO                       ((uint32_t)0x0F000000)        /* MCO[3:0] bits (Microcontroller Clock Output) */
 #define  RCC_CFGR_MCO_0                     ((uint32_t)0x01000000)        /* Bit 0 */
 #define  RCC_CFGR_MCO_1                     ((uint32_t)0x02000000)        /* Bit 1 */
 #define  RCC_CFGR_MCO_2                     ((uint32_t)0x04000000)        /* Bit 2 */
 #define  RCC_CFGR_MCO_3                     ((uint32_t)0x08000000)        /* Bit 3 */

 #define  RCC_CFGR_MCO_NOCLOCK               ((uint32_t)0x00000000)        /* No clock */
 #define  RCC_CFGR_MCO_SYSCLK                ((uint32_t)0x04000000)        /* System clock selected as MCO source */
 #define  RCC_CFGR_MCO_HSI                   ((uint32_t)0x05000000)        /* HSI clock selected as MCO source */
 #define  RCC_CFGR_MCO_HSE                   ((uint32_t)0x06000000)        /* HSE clock selected as MCO source */
 #define  RCC_CFGR_MCO_PLLCLK_Div2           ((uint32_t)0x07000000)        /* PLL clock divided by 2 selected as MCO source */
 #define  RCC_CFGR_MCO_PLL2CLK               ((uint32_t)0x08000000)        /* PLL2 clock selected as MCO source*/
 #define  RCC_CFGR_MCO_PLL3CLK_Div2          ((uint32_t)0x09000000)        /* PLL3 clock divided by 2 selected as MCO source*/
 #define  RCC_CFGR_MCO_Ext_HSE               ((uint32_t)0x0A000000)        /* XT1 external 3-25 MHz oscillator clock selected as MCO source */
 #define  RCC_CFGR_MCO_PLL3CLK               ((uint32_t)0x0B000000)        /* PLL3 clock selected as MCO source */
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
 #define  RCC_CFGR_PLLSRC_HSI_Div2           ((uint32_t)0x00000000)        /* HSI clock divided by 2 selected as PLL entry clock source */
 #define  RCC_CFGR_PLLSRC_PREDIV1            ((uint32_t)0x00010000)        /* PREDIV1 clock selected as PLL entry clock source */

 #define  RCC_CFGR_PLLXTPRE_PREDIV1          ((uint32_t)0x00000000)        /* PREDIV1 clock not divided for PLL entry */
 #define  RCC_CFGR_PLLXTPRE_PREDIV1_Div2     ((uint32_t)0x00020000)        /* PREDIV1 clock divided by 2 for PLL entry */

 #define  RCC_CFGR_PLLMULL2                  ((uint32_t)0x00000000)        /* PLL input clock*2 */
 #define  RCC_CFGR_PLLMULL3                  ((uint32_t)0x00040000)        /* PLL input clock*3 */
 #define  RCC_CFGR_PLLMULL4                  ((uint32_t)0x00080000)        /* PLL input clock*4 */
 #define  RCC_CFGR_PLLMULL5                  ((uint32_t)0x000C0000)        /* PLL input clock*5 */
 #define  RCC_CFGR_PLLMULL6                  ((uint32_t)0x00100000)        /* PLL input clock*6 */
 #define  RCC_CFGR_PLLMULL7                  ((uint32_t)0x00140000)        /* PLL input clock*7 */
 #define  RCC_CFGR_PLLMULL8                  ((uint32_t)0x00180000)        /* PLL input clock*8 */
 #define  RCC_CFGR_PLLMULL9                  ((uint32_t)0x001C0000)        /* PLL input clock*9 */
 #define  RCC_CFGR_PLLMULL10                 ((uint32_t)0x00200000)        /* PLL input clock10 */
 #define  RCC_CFGR_PLLMULL11                 ((uint32_t)0x00240000)        /* PLL input clock*11 */
 #define  RCC_CFGR_PLLMULL12                 ((uint32_t)0x00280000)        /* PLL input clock*12 */
 #define  RCC_CFGR_PLLMULL13                 ((uint32_t)0x002C0000)        /* PLL input clock*13 */
 #define  RCC_CFGR_PLLMULL14                 ((uint32_t)0x00300000)        /* PLL input clock*14 */
 #define  RCC_CFGR_PLLMULL15                 ((uint32_t)0x00340000)        /* PLL input clock*15 */
 #define  RCC_CFGR_PLLMULL16                 ((uint32_t)0x00380000)        /* PLL input clock*16 */

/* MCO configuration */
 #define  RCC_CFGR_MCO                       ((uint32_t)0x07000000)        /* MCO[2:0] bits (Microcontroller Clock Output) */
 #define  RCC_CFGR_MCO_0                     ((uint32_t)0x01000000)        /* Bit 0 */
 #define  RCC_CFGR_MCO_1                     ((uint32_t)0x02000000)        /* Bit 1 */
 #define  RCC_CFGR_MCO_2                     ((uint32_t)0x04000000)        /* Bit 2 */

 #define  RCC_CFGR_MCO_NOCLOCK               ((uint32_t)0x00000000)        /* No clock */
 #define  RCC_CFGR_MCO_SYSCLK                ((uint32_t)0x04000000)        /* System clock selected as MCO source */
 #define  RCC_CFGR_MCO_HSI                   ((uint32_t)0x05000000)        /* HSI clock selected as MCO source */
 #define  RCC_CFGR_MCO_HSE                   ((uint32_t)0x06000000)        /* HSE clock selected as MCO source  */
 #define  RCC_CFGR_MCO_PLL                   ((uint32_t)0x07000000)        /* PLL clock divided by 2 selected as MCO source */
#else
 #define  RCC_CFGR_PLLSRC_HSI_Div2           ((uint32_t)0x00000000)        /* HSI clock divided by 2 selected as PLL entry clock source */
 #define  RCC_CFGR_PLLSRC_HSE                ((uint32_t)0x00010000)        /* HSE clock selected as PLL entry clock source */

 #define  RCC_CFGR_PLLXTPRE_HSE              ((uint32_t)0x00000000)        /* HSE clock not divided for PLL entry */
 #define  RCC_CFGR_PLLXTPRE_HSE_Div2         ((uint32_t)0x00020000)        /* HSE clock divided by 2 for PLL entry */

 #define  RCC_CFGR_PLLMULL2                  ((uint32_t)0x00000000)        /* PLL input clock*2 */
 #define  RCC_CFGR_PLLMULL3                  ((uint32_t)0x00040000)        /* PLL input clock*3 */
 #define  RCC_CFGR_PLLMULL4                  ((uint32_t)0x00080000)        /* PLL input clock*4 */
 #define  RCC_CFGR_PLLMULL5                  ((uint32_t)0x000C0000)        /* PLL input clock*5 */
 #define  RCC_CFGR_PLLMULL6                  ((uint32_t)0x00100000)        /* PLL input clock*6 */
 #define  RCC_CFGR_PLLMULL7                  ((uint32_t)0x00140000)        /* PLL input clock*7 */
 #define  RCC_CFGR_PLLMULL8                  ((uint32_t)0x00180000)        /* PLL input clock*8 */
 #define  RCC_CFGR_PLLMULL9                  ((uint32_t)0x001C0000)        /* PLL input clock*9 */
 #define  RCC_CFGR_PLLMULL10                 ((uint32_t)0x00200000)        /* PLL input clock10 */
 #define  RCC_CFGR_PLLMULL11                 ((uint32_t)0x00240000)        /* PLL input clock*11 */
 #define  RCC_CFGR_PLLMULL12                 ((uint32_t)0x00280000)        /* PLL input clock*12 */
 #define  RCC_CFGR_PLLMULL13                 ((uint32_t)0x002C0000)        /* PLL input clock*13 */
 #define  RCC_CFGR_PLLMULL14                 ((uint32_t)0x00300000)        /* PLL input clock*14 */
 #define  RCC_CFGR_PLLMULL15                 ((uint32_t)0x00340000)        /* PLL input clock*15 */
 #define  RCC_CFGR_PLLMULL16                 ((uint32_t)0x00380000)        /* PLL input clock*16 */
 #define  RCC_CFGR_USBPRE                    ((uint32_t)0x00400000)        /* USB Device prescaler */

/* MCO configuration */
 #define  RCC_CFGR_MCO                       ((uint32_t)0x07000000)        /* MCO[2:0] bits (Microcontroller Clock Output) */
 #define  RCC_CFGR_MCO_0                     ((uint32_t)0x01000000)        /* Bit 0 */
 #define  RCC_CFGR_MCO_1                     ((uint32_t)0x02000000)        /* Bit 1 */
 #define  RCC_CFGR_MCO_2                     ((uint32_t)0x04000000)        /* Bit 2 */

 #define  RCC_CFGR_MCO_NOCLOCK               ((uint32_t)0x00000000)        /* No clock */
 #define  RCC_CFGR_MCO_SYSCLK                ((uint32_t)0x04000000)        /* System clock selected as MCO source */
 #define  RCC_CFGR_MCO_HSI                   ((uint32_t)0x05000000)        /* HSI clock selected as MCO source */
 #define  RCC_CFGR_MCO_HSE                   ((uint32_t)0x06000000)        /* HSE clock selected as MCO source  */
 #define  RCC_CFGR_MCO_PLL                   ((uint32_t)0x07000000)        /* PLL clock divided by 2 selected as MCO source */
#endif /* STM32F10X_CL */