-
1. Data: 2016-12-23 16:15:03
Temat: STM32F4, problem z PLL (asm)
Od: Marcin Kulas <h...@k...net>
Witam.
Odzywam się bardzo rzadko, bo czasu coraz mniej na hobby,
ale tym razem muszę, bo zaraz nie będę miał czego rwać z głowy.
Do tej pory grzebałem w 8-bitowych AVR-ach i je rozumiałem.
Postanowiłem liznąć ARM-a. Padło na Cortex M4, konkretnie
płytkę Discovery z STM32F429ZI. Interesuje mnie wyłącznie
assembler i od tej strony się do tego zabrałem, chcąc poznać
rdzeń i dostępne peryferia.
Problem:
Podczas inicjacji MCU chcę ustawić SYSCLK=168MHz.
Konfiguruję PLL następująco:
wejście = HSE, kwarc 8MHz
PLL_M = 4
PLL_N = 168
PLL_P = 2
PLL_Q = 7
Na razie rdzeń zasilam prosto z HSE, a na MCO1 i MCO2 wypluwam
sobie wyjście PLL/4 oraz (dla porównania) SYSCLK/4.
SYSCLK wynosi 8MHz, co nie budzi wątpliwości, natomiast PLL
nie potrafię zmusić, by zachowywała się zgodnie z dokumentacją.
Przy powyższych dzielnikach mam za nią ok. 46.4MHz:
http://hit.kropka.net/adhoc/ST32F4_halp/PLL_4_168_2_
7.png
Co dziwniejsze, jeśli ustawię PLL_M=8 i PLL_N=336, na wyjściu
powinienem mieć taką samą częstotliwość, a nie mam:
http://hit.kropka.net/adhoc/ST32F4_halp/PLL_8_336_2_
7.png
Takie same rezultaty mam na STM32F446ZE, więc błąd jest
po mojej stronie, nie układu. Od tygodnia go szukam i nie
mogę zrozumieć, co robię źle. Prośba o wskazanie, jeśli komuś
się będzie bardzo nudziło. Powoli zaczynam w siebie wątpić.
Źródła, na których się męczę:
http://hit.kropka.net/adhoc/ST32F4_halp/
Oczywiście Datasheet, Erratę, Reference Manual i Programming Manual
zajmują u mnie cały drugi monitor. Zwykle takie podejście działało.
Tym razem poległem i nie wiem nawet na czym. Będe wdzięczny za pomoc.
--
[ ,,Bądź uczynny, pomagaj innym - a wtedy wszyscy wokół pomyślą, ]
[ że to co dla nich robisz, jest twoim zasranym obowiązkiem." ]