Показать сообщение отдельно
Старый 15.12.2016, 09:42   #600
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 47
Сообщений: 3,794
Вес репутации: 6357/147
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32 для чайников

jammer, общие, так сказать принципы, где искать и что читать
Начинаем читать...

RM0090 Rev13. Ищем Clock tree.
Читаем параграф 7.2 Clocks, а именно
Цитата:
All peripheral clocks are derived from the system clock (SYSCLK) except for:
The USB OTG FS clock (48 MHz), the random analog generator (RNG) clock
(≤48 MHz) and the SDIO clock (≤ 48 MHz) which are coming from a specific output of
PLL (PLL48CLK)
Вся периферия тактируется от SYSCLK за исключением USB OTG FS,RNG,SDIO.
Источником тактовой для них служит PLL48CLK.

Ищем сие на картинко Clock tree . См. аттач .

Читаем о PLL48 и о PLL вообще:
Цитата:
7.2.3 PLL configuration
The STM32F4xx devices feature two PLLs:
• A main PLL (PLL) clocked by the HSE or HSI oscillator and featuring two different
output clocks:
– The first output is used to generate the high speed system clock (up to 168 MHz)
– The second output is used to generate the clock for the USB OTG FS (48 MHz),
the random analog generator (≤48 MHz) and the SDIO (≤ 48 MHz).
Основной PLL тактируется от HSE или HSI и имеет два различных выхода тактовой:
- Первый для системной тактовой (вплоть до 168МГц)
-Второй , как выше и писано, для USB OTG FS,RNG,SDIO

Цитата:
Since the main-PLL configuration parameters cannot be changed once PLL is enabled, it is
recommended to configure PLL before enabling it (selection of the HSI or HSE oscillator as
PLL clock source, and configuration of division factors M, N, P, and Q).
Параметры PLL не могут быть изменены если PLL включена,
рекомендуется конфигурировать PLL до его включения( выбор HSI или HSE как источников
тактирование PLL и конфигурации делителей M, N, P, и Q)



Далее, идем в параграф 7.3.1 RCC clock control register (RCC_CR)

Здесь читаем о битах включения PLL и его готовности :
Цитата:
Bit 25 PLLRDY: Main PLL (PLL) clock ready flag
Set by hardware to indicate that PLL is locked.
0: PLL unlocked
1: PLL locked
Bit 24 PLLON: Main PLL (PLL) enable
Set and cleared by software to enable PLL.
Cleared by hardware when entering Stop or Standby mode. This bit cannot be reset if PLL
clock is used as the system clock.
0: PLL OFF
1: PLL ON

Идем в параграф 7.3.2 RCC PLL configuration register (RCC_PLLCFGR)
и заодно смотрим ранее озвученную картинко.
Читаем:
Цитата:
This register is used to configure the PLL clock outputs according to the formulas:
• f(VCO clock) = f(PLL clock input) × (PLLN / PLLM)
• f(PLL general clock output) = f(VCO clock) / PLLP
• f(USB OTG FS, SDIO, RNG clock output) = f(VCO clock) / PLLQ
Сей регистр служит для конфигурации выхлопа тактовой PLL исходя из формулы.

Цитата:
f(VCO clock) = f(PLL clock input) × (PLLN / PLLM)
Здесь определяется внутренняя тактовая PLL.
Где
VCO выход внутреннего делителя.
PLL clock input вход PLL
PLLN множитель VCO
PLLM делитель тактовой от HSI или HSE

Далее делитель для PLL48CK, для USB OTG FS, SDIO, RNG
Цитата:
• f(USB OTG FS, SDIO, RNG clock output) = f(VCO clock) / PLLQ
Ну и делитель для системной тактовой
Цитата:
• f(PLL general clock output) = f(VCO clock) / PLLP

Читаем о PLLQ
Цитата:
Bits 27:24 PLLQ: Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator
clocks
Set and cleared by software to control the frequency of USB OTG FS clock, the random
number generator clock and the SDIO clock. These bits should be written only if PLL is
disabled.
Caution: The USB OTG FS requires a 48 MHz clock to work correctly. The SDIO and the
random number generator need a frequency lower than or equal to 48 MHz to work
correctly.
USB OTG FS clock frequency = VCO frequency / PLLQ with 2 ≤PLLQ ≤15
0000: PLLQ = 0, wrong configuration
0001: PLLQ = 1, wrong configuration
0010: PLLQ = 2
0011: PLLQ = 3
0100: PLLQ = 4
...
1111: PLLQ = 15

Главное
Цитата:
Caution: The USB OTG FS requires a 48 MHz clock to work correctly.
Внимание: USB OTG FS требует 48МГц для корректной работы.

Читаем о выборе источника тактирования PLL
Цитата:
Bit 22 PLLSRC: Main PLL(PLL) and audio PLL (PLLI2S) entry clock source
Set and cleared by software to select PLL and PLLI2S clock source. This bit can be written
only when PLL and PLLI2S are disabled.
0: HSI clock selected as PLL and PLLI2S clock entry
1: HSE oscillator clock selected as PLL and PLLI2S clock entry



Теперь у нас есть все что необходимо для конфигурирации PLL.

1) Определяемся с чего бум тактировать - либо HSI (16МГц ) либо HSE( смотрим на кварц)

Вычисляем делители PLL исходя из выше озвученных частот, того что для USB нужно 48МГц
и желаемом системной частоты .
2) Кофигурируем PLL - делители и источник .
3) Ждем готовности PLL.


Это только начало - далее нужно конфигурить шины AHB, APBx латентность флеша и т.д.
Не забываем что камень стартует от HSI.

Как видим надо читать и читать много. Для облегчения страдания нубам могу порекомендовать тулзу
STM32F4xx_Clock_Configuration_V1.1.0.
Она сгенерит system_stm32f4xx.c , в нем увидите все те телодвижения что выше описаны и
визуально натыкаете все необходимое. Скрин в аттаче.

Pridnya, Дим че пристал. Он со смарта поди.
Миниатюры
PLL48.png   USB.png  
dosikus вне форума   Ответить с цитированием