Ankieta: Jaki system operacyjnym preferujesz
Ankieta jest zamknięta.
Windows 60.78% 31 60.78%
Linux 31.37% 16 31.37%
MAC/OS 7.84% 4 7.84%
Inny 0% 0 0%
Razem 51 głosów 100%
*) odpowiedź wybrana przez Ciebie [Wyniki ankiety]

Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie ARM, nauka, środowiska programistyczne IDE
SP5FCS Offline
Adam
*****

Liczba postów: 1,072
Dołączył: 02-02-2009
Post: #64
RE: Programowanie ARM, nauka, środowiska programistyczne IDE
(06-07-2016 13:37)QRP73 napisał(a):  Mam DiscoverySTM32F429I, kwarc 8Mhz. Jak ustawic CoreClock za pomoca funkcji CMSIS na 168Mhz ?

Zadanie Z001 "mruganie diodą"
W najprostszej wersji kodu do tego zadania wystarczy napisać funkcję programowego opóźnienia wait_ms i zmieniać w pętli stany na pinach diod umieszczonych na module disco. Do tego nie musimy mieć aktywnego SysTicka ani przerwań. Diody będą mrugały równo w rytmie pętli opóźnienia.
Gdyby jednak nasz program był bardziej rozbudowany i zawierał jakieś złożone zadania obsługiwane na przerwaniach to wtedy takt mrugania naszych diod będzie nierówny. Opóźnienie programowe będzie zależne od czasu obsługi przerwań.
Rozwiązanie mrugania diodą oparte na przerwaniu od SysTicka jest pozbawione tej wady, diody zawsze będą mrugały równo niezależnie od intensywności i czasu obsługi nawet wielu przerwań. Dlaczego ? Ponieważ ...

Jeśli ktoś ma ochotę pobawić się modułem Discovery_F429 oraz środowiskiem EMBitz to w załączniku jest paczka z projektem do pierwszego zadania. To jest kod Pawła z opisem jak przestawić zegar procesora na 168Mhz. Plik należy rozpakować do katalogu c:\F429\. Wszystkie niezbędne pliki będą w podkatalogu Z001. Poprawki na plikach są już zrobione. Diody mrugają co 500ms.
Debuger jest ustawiony pod J-link, proponuję podmienić oryginalne oprogramowanie ST-linka na Dicovery_F429 na obsługę J-linka.

Opis STLinkReflash

Ustawienie zegara procesora na module Discovery_F429
Zegar procesora STM32F429 zależy od częstotliwości rezonatora kwarcowego (pomijam generatory wewnętrzne) oraz współczynników pętli PLL:

SystemCoreClock = ((Xtal_Clock[HSE] / PLL_M) * PLL_N) / PLL_P

Przykładowe nastawy dla kwarcu 8Mhz:
STM32F429_180mhz, X=8mhz, HSE=8000000, PLL_M=8, PLL_N=360, PLL_P=2
STM32F429_168mhz, X=8mhz, HSE=8000000, PLL_M=8, PLL_N=336, PLL_P=2

STM32F429_168mhz=8000000/8*336/2=168000000Hz

Po wygenerowaniu nowego projektu pod STM32F429 w środowisku EMBitz w plikach startowych jest ustawione kwarc 25Mhz. Fizycznie na module Discovery_F429 mamy kwarc 8mhz dlatego musimy to zmieni. Powyższą "pułapkę" środowiska zlokalizował Paweł SQ8MVY podczas uruchamiania przykładowego kodu mrugania diodą.
Dla zegara 168Mhz musimy:
- 92 linia w pliku stm32f4xx.h - ustawi HSE=8000000 (domyslnie jest 25000000)
- 156 linia w pliku system_stm32f4xx.c - ustawic PLL_M=8 (domyslnie jest 25)

Aby wiedzieć z jaką szybkością są obsługiwane układy peryferyjne przyda się również informacja jak są ustawione dzielniki dla szyn procesora:
szyna AHB = SystemCoreClock / 1
szyna APB1 = SystemCoreClock / 4
szyna APB2 = SystemCoreClock / 2

Przy obsłudze USB musimy ustawić jeszcze dzielnik PLL_Q aby uzyskać 48Mhz.
Wszystkie współczynniki są zdefiniowane w pliku: system_stm32f4xx.c
Znajdziemy tam również tabelkę z domyślnymi nastawami procesara.

Tyle wiem na dziś, jak czegoś brakuje proszę o uzupełnienie.
Jeśli komuś te informacje nie wystarczą zachęcam do symulacji pod STM32Cube.


Załączone pliki
.zip  EMBitz_z001.zip (Rozmiar: 145.8 KB / Pobrań: 794)

73 Adam
07-07-2016 10:35
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Programowanie ARM, nauka, środowiska programistyczne IDE - SP5FCS - 07-07-2016 10:35

Skocz do:


Użytkownicy przeglądający ten wątek: 6 gości