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.

Link to post
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 to post
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 to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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