RCC PLL configuration register (RCC_PLLCFGR)
Регистр настройки умножителей PLL
Смещение (Address offset): 0x04
Reset value: 0x2400'3010
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
Reserved | PLLR[2:0] | PLLQ[3:0] | |||||
--- | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
Reserved | PLLSRC | Reserved | PLLP[1:0] | ||||
--- | rw | --- | --- | --- | --- | rw | rw |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
Reserved | PLLN[8:0] | ||||||
--- | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
PLLN[8:0] | HSITRIM[4:0] | ||||||
rw | rw | rw | rw | rw | rw | rw | rw |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
fPLL clock input - входная частота блока Main PLL. Выбирается битом PLLSRC: HSI или HSE.
fVCO = fPLL clock input *(PLLN / PLLM) - выходная частота умножителя блока Main PLL. Получается делением входной частоты fPLL clock input на коэффициент PLLM и последующим умножением на коэффициент PLLN.
fPLLP = fVCO / PLLP - частота тактовых импульсов на выходе блока Main PLL, используемая для формирования системной тактовой частоты SYSCLK.
fUSB OTG FS = fVCO / PLLQ - частота тактовых импульсов для USB OTG FS.
fPLLR = fVCO / PLLR - частота тактовых импульсов для аудио-периферии.
Доступен для записи только при отключенном PLL.
fPLLR = fVCO / PLLR (где 2 ≤ PLLR ≤ 7)
000 : PLLR = 0, недопустимая конфигурация
001 : PLLR = 1, недопустимая конфигурация
010 : PLLR = 2
011 : PLLR = 3
...
111 : PLLR = 7
Доступен для записи только при отключенном PLL.
fUSB OTG FS = fVCO / PLLQ (где 2 ≤ PLLQ ≤ 15)
Для правильной работы USB OTG FS требуется частота 48 МГц. Для правильной работы STUDIO требуется частота ниже или равная 48 МГц
0000 : PLLQ = 0, недопустимая конфигурация
0001 : PLLQ = 1, недопустимая конфигурация
0010 : PLLQ = 2
0011 : PLLQ = 3
...
1111 : PLLQ = 15
Доступен для записи только при отключенном PLL.
0 : HSI - как источник сигнала для блоков PLL
1 : HSE - как источник сигнала для блоков PLL
Доступен для записи только при отключенном PLL.
fPLLP = fVCO / PLLP
00 : PLLP = 2
01 : PLLP = 4
10 : PLLP = 6
11 : PLLP = 8
Доступен для записи только при отключенном PLL. Доступ для записи только 16-битный (half-word) или 32-битный (word).
Работает совместно с коэффициентом деления PLLM.
fVCO = fVCO input * PLLN, (где 50 ≤ PLLN ≤ 432).
100 МГц ≤ fVCO ≤ 432 МГц.
При низких тактовых частотах необходимо следить, чтобы связка коэффициентов умножения PLLN и деления PLLM обеспечивали минимальную частоту блока Main PLL не ниже 100 МГц.
000000000 : PLLN = 0, недопустимая конфигурация
000000001 : PLLN = 1, недопустимая конфигурация
...
000110010 : PLLN = 50
000110011 : PLLN = 51
...
001100011 : PLLN = 99
001100100 : PLLN = 100
...
110110000 : PLLN = 432
110110001 : PLLQ = 433, недопустимая конфигурация
...
111111111 : PLLQ = 511, недопустимая конфигурация
Доступен для записи только при отключенном PLL.
fVCO input = fPLL clock input / PLLM, (где 2 ≤ PLLM ≤ 63).
Входная частота умножителя fVCO input должна быть в диапазоне от 1 до 2 МГц. Рекомендуемое значение 2 МГц.
000000 : PLLM = 0, недопустимая конфигурация
000001 : PLLM = 1, недопустимая конфигурация
000010 : PLLM = 2
000011 : PLLM = 3
...
111111 : PLLM = 63
//- stm32f446xx.h
/******************** Bit definition for RCC_PLLCFGR register ***************/
#define RCC_PLLCFGR_PLLM_Pos (0U)
#define RCC_PLLCFGR_PLLM_Msk (0x3FUL << RCC_PLLCFGR_PLLM_Pos) /* 0x0000003F */
#define RCC_PLLCFGR_PLLM RCC_PLLCFGR_PLLM_Msk
#define RCC_PLLCFGR_PLLM_0 (0x01UL << RCC_PLLCFGR_PLLM_Pos) /* 0x00000001 */
#define RCC_PLLCFGR_PLLM_1 (0x02UL << RCC_PLLCFGR_PLLM_Pos) /* 0x00000002 */
#define RCC_PLLCFGR_PLLM_2 (0x04UL << RCC_PLLCFGR_PLLM_Pos) /* 0x00000004 */
#define RCC_PLLCFGR_PLLM_3 (0x08UL << RCC_PLLCFGR_PLLM_Pos) /* 0x00000008 */
#define RCC_PLLCFGR_PLLM_4 (0x10UL << RCC_PLLCFGR_PLLM_Pos) /* 0x00000010 */
#define RCC_PLLCFGR_PLLM_5 (0x20UL << RCC_PLLCFGR_PLLM_Pos) /* 0x00000020 */
#define RCC_PLLCFGR_PLLN_Pos (6U)
#define RCC_PLLCFGR_PLLN_Msk (0x1FFUL << RCC_PLLCFGR_PLLN_Pos) /* 0x00007FC0 */
#define RCC_PLLCFGR_PLLN RCC_PLLCFGR_PLLN_Msk
#define RCC_PLLCFGR_PLLN_0 (0x001UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00000040 */
#define RCC_PLLCFGR_PLLN_1 (0x002UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00000080 */
#define RCC_PLLCFGR_PLLN_2 (0x004UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00000100 */
#define RCC_PLLCFGR_PLLN_3 (0x008UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00000200 */
#define RCC_PLLCFGR_PLLN_4 (0x010UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00000400 */
#define RCC_PLLCFGR_PLLN_5 (0x020UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00000800 */
#define RCC_PLLCFGR_PLLN_6 (0x040UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00001000 */
#define RCC_PLLCFGR_PLLN_7 (0x080UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00002000 */
#define RCC_PLLCFGR_PLLN_8 (0x100UL << RCC_PLLCFGR_PLLN_Pos) /* 0x00004000 */
#define RCC_PLLCFGR_PLLP_Pos (16U)
#define RCC_PLLCFGR_PLLP_Msk (0x3UL << RCC_PLLCFGR_PLLP_Pos) /* 0x00030000 */
#define RCC_PLLCFGR_PLLP RCC_PLLCFGR_PLLP_Msk
#define RCC_PLLCFGR_PLLP_0 (0x1UL << RCC_PLLCFGR_PLLP_Pos) /* 0x00010000 */
#define RCC_PLLCFGR_PLLP_1 (0x2UL << RCC_PLLCFGR_PLLP_Pos) /* 0x00020000 */
#define RCC_PLLCFGR_PLLSRC_Pos (22U)
#define RCC_PLLCFGR_PLLSRC_Msk (0x1UL << RCC_PLLCFGR_PLLSRC_Pos) /* 0x00400000 */
#define RCC_PLLCFGR_PLLSRC RCC_PLLCFGR_PLLSRC_Msk
#define RCC_PLLCFGR_PLLSRC_HSE_Pos (22U)
#define RCC_PLLCFGR_PLLSRC_HSE_Msk (0x1UL << RCC_PLLCFGR_PLLSRC_HSE_Pos) /* 0x00400000 */
#define RCC_PLLCFGR_PLLSRC_HSE RCC_PLLCFGR_PLLSRC_HSE_Msk
#define RCC_PLLCFGR_PLLSRC_HSI 0x00000000U
#define RCC_PLLCFGR_PLLQ_Pos (24U)
#define RCC_PLLCFGR_PLLQ_Msk (0xFUL << RCC_PLLCFGR_PLLQ_Pos) /* 0x0F000000 */
#define RCC_PLLCFGR_PLLQ RCC_PLLCFGR_PLLQ_Msk
#define RCC_PLLCFGR_PLLQ_0 (0x1UL << RCC_PLLCFGR_PLLQ_Pos) /* 0x01000000 */
#define RCC_PLLCFGR_PLLQ_1 (0x2UL << RCC_PLLCFGR_PLLQ_Pos) /* 0x02000000 */
#define RCC_PLLCFGR_PLLQ_2 (0x4UL << RCC_PLLCFGR_PLLQ_Pos) /* 0x04000000 */
#define RCC_PLLCFGR_PLLQ_3 (0x8UL << RCC_PLLCFGR_PLLQ_Pos) /* 0x08000000 */
#define RCC_PLLR_SYSCLK_SUPPORT /*!< Support PLLR as system clock */
#define RCC_PLLR_I2S_CLKSOURCE_SUPPORT /*!< Support PLLR clock as I2S clock source */
#define RCC_PLLCFGR_PLLR_Pos (28U)
#define RCC_PLLCFGR_PLLR_Msk (0x7UL << RCC_PLLCFGR_PLLR_Pos) /* 0x70000000 */
#define RCC_PLLCFGR_PLLR RCC_PLLCFGR_PLLR_Msk
#define RCC_PLLCFGR_PLLR_0 (0x1UL << RCC_PLLCFGR_PLLR_Pos) /* 0x10000000 */
#define RCC_PLLCFGR_PLLR_1 (0x2UL << RCC_PLLCFGR_PLLR_Pos) /* 0x20000000 */
#define RCC_PLLCFGR_PLLR_2 (0x4UL << RCC_PLLCFGR_PLLR_Pos) /* 0x40000000 */