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 : деление на 6
11 : деление на 8
Входной сигнал 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 */