Clock configuration register (RCC_CFGR)
Регистр настройки тактовой частоты
Смещение (Address offset): 0x04
Reset value: 0x0000'0000
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
Reserved | MCO[2:0] | ||||||
--- | --- | --- | --- | --- | rw | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
Reserved | USBPRE | PLLMUL[3:0] | PLLXTPRE | PLLSRC | |||
--- | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
ADCPRE[1:0] | PPRE2[2:0] | PPRE1[2:0] | |||||
rw | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
HPRE[3:0] | SWS[1:0] | SW[1:0] | |||||
rw | rw | rw | rw | r | r | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Требуется время для стабилизации выходного сигнала после старта или переключения источника тактовой частоты.
При выборе сигнала убедиться, что частота на выходе не более 50 МГц (максимальная частота ввода-вывода).
0xx : сигнал не выбран.
100 : выбран сигнал системной тактовой частоты SYSCLK.
101 : выбран сигнал выхода встороенного генератора HSI.
110 : выбран сигнал выхода внешнего генератора HSE.
111 : выбран сигнал выхода умножителя PLL, делённый на два.
Необходим для генерации тактовой частоты USB 48 МГц.
Предделитель должен быть установлен до включения контроллера USB в регистре RCC_APB1ENR. Бит не может быть изменён, если включен контроллер USB.
0 : коэффициент деления 1.5.
1 : коэффициент деления 1.0 (нет деления).
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
Делитель может быть изменён только при отключенном модуле PLL.
0 : делитель отключен.
1 : включен делитель на 2.
Может быть изменён только при отключенном модуле PLL.
0 : источником является сигнал генератора HSI, делённый на 2.
1 : источником является сигнал генератора HSE без деления, или делённый на 2.
00 : деление на 2.
01 : деление на 4.
10 : деление на 8.
11 : деление на 16.
Входной сигнал 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
Входной сигнал 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
Входной сигнал 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
Только для чтения. Изменяется аппаратно и показывает текущий источник сигнала для SYSCLK
00 : HSI генератор выбран источником SYSCLK.
01 : HSE генератор выбран источником SYSCLK.
10 : модуль PLL выбран источником SYSCLK.
11 : не используется.
При выходе из режимов 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 */