Skocz do zawartości

Sygnały zegarowe i procedura startowa STM32


Mellon

Pomocna odpowiedź

Co prawda podczas debugowania po wywołaniu HAL_Init zmienna SystemCoreClock miała wartość 8MHz, pomimo że nie ustawiłem jej na prawidłową wartość. Ustawia ją SystemCoreClockUpdate(). Lecz nie wiem w którym momencie jest wywoływana tj. czy przed pierwszym użyciem tej zmiennej.

Link do komentarza
Share on other sites

Problem polega na tym, że domyślna implementacja SystemInit nie wywołuje SystemCoreClockUpdate. Inna sprawa, że skoro znamy częstotliwość zegara, to po co marnować czas na jej obliczanie? Moim zdaniem poprawne rozwiązanie to zmiana pliku system_stm32f1xx.c i przypisanie domyślnie do zmiennej SystemCoreClock wartości 8000000. Jeśli później ktoś zmieni taktowanie, to niech się sam martwi i odpowiednio dba o wartość zmiennej.

W nowszych modelach stm32 ten błąd został już poprawiony. Przykładowo we wspomnianym stm32f030 w pliku system_stm32f0xx.c domyślnie przypisywana jest poprawna wartość, czyli 8000000.

Domyślam się, że kod dla F1 nie został poprawiony, bo teraz są nowsze modele i nikt nie miał czasu... A testy były robione na 72MHz i "u mnie działało" 🙂

Pisząc kurs nie zdecydowałem się na modygikacje w system_stm32f1xx.c, bo tworząc każdy projekt trzeba byłoby o tym pamiętać. Po prostu łatwiej było umieścić zmiany w pliku źródłowym przykładów. Inna sprawa, że trochę naiwnie liczyłem że ST poprawi bibliotekę HAL i kłopot sam zniknie.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wtedy prościej utworzyć bibliotekę statyczną z poprawioną wartością tej zmiennej, ustawieniami zegarów (HSE), itp. i wydzielić do katalogu z którego wszystkie projekty dot. tej rodziny STM32 będą korzystać.

Dnia 26.10.2018 o 14:22, Elvis napisał:

W tym kursie podjęliśmy decyzję zostania tylko przy wbudowanym generatorze RC, więc jeśli już to i tak ten brakujący odcinek byłby o uzyskaniu 64MHz za pomocą PLL.

Wbudowany generator RC w pełnym zakresie temperatur ma wahania częstotliwości rzędu kilku procent. Natomiast rezonatory kwarcowe/ceramiczne mają wahania częstotliwości rzędu 15-30 ppm ((parts per million). Koszt takiego to ok 2 zł. A taki rezonator mamy w Nucleo jeśli nie odłamiemy programatora.

W przypadku wykorzystania do komunikacji, synchronizacji z innymi urządzeniami wymagany jest stabilny sygnał zegarowy. Dlaczego by nie skorzystać z niego.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.