Skocz do zawartości

Sygnały zegarowe i procedura startowa STM32


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.

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.

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.

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