STM32F4, problem z PLL (asm)

Dec 23, 2016 10 Replies

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:

formatting link
Co dziwniejsze, jeśli ustawię PLL_M=8 i PLL_N=336, na wyjściu powinienem mieć taką samą częstotliwość, a nie mam:
formatting link
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ę:

formatting link
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.


Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required