Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 3 marca 2011

Szablon projektu CooCox dla STM32F4xx


Autor: Marek Skalski
Redakcja: Dondu

Do programowania 32-bitowych mikrokontrolerów opartych na rdzeniu ARM Cortex-Mx, można używać kilku środowisk. Jednym z nich jest CooCox, czyli bezpłatne oraz łatwe w konfiguracji i użytkowaniu IDE oparte na Eclipse.

Tworzenie nowego projektu w CooCox wiąże się z mało komfortową sytuacją, ponieważ:
  • plik main.c jest zupełnie pusty,
  • po dodaniu plików startowych, należy wykonać kilka modyfikacji ustawień w plikach, aby umożliwić prawidłową pracę uC.

Każdorazowe wykonywanie tych samych czynności jest stratą czasu. Z tego powodu pojawił się pomysł opracowania szablonu, który już na wstępie prawidłowo konfiguruje podstawowe ustawienia uC i zawiera szablon głównej pętli programu z obsługą cyklicznych przerwań od SysTick.

Do pobraniastm32f4-discovery.zip (kopia)

W powyższym pliku znajdują się:

main.c – plik z szablonem pętli głównej

cmsis_boot – folder zawierający:
  • stm32f4xx.h – plik opisujący strukturę wewnętrzną układów STM32F4xx,
  • stm32f4xx_conf.h – plik zawierający ustawienia konfiguracyjne projektu,
  • folder startup i plik startup_stm32f4xx.c – zawierający kluczowe ustawienia i realizujący start systemu od resetu do wejścia w funkcję main();
  • stm32f4xx_it.h – plik zawierający definicje funkcji obsługi wyjątków oraz przerwań,
  • stm32f4xx_it.c – plik zawierający funkcje obsługi wyjątków, przerwań oraz funkcje pomocnicze,
  • board_stm32f4discovery.h – plik zawierający definicje sprzętowej struktury systemu rozwojowego,
  • board.c_stm32f4discovery – plik zawierający funkcje obsługi sprzętowej systemu (konfiguracja portów I/O, inicjalizacja peryferiów, sterowniki odwołujące się do rejestrów, itp.)
  • ponadto istnieją jeszcze 2 fantomy (puste pliki) o nazwach system_stm32f4xx.h, system_stm32f4xx.c. Ich obecność może być konieczna, aby uniknąć błędu podczas dodawania plików z Repozytorium. IDE zapamiętuje ilość i nazwy plików w poszczególnych folderach Repozytorium, przy pierwszej próbie tworzenia nowego projektu dla wybranego uC. Puste pliki można usunąć z drzewa i folderu projektu po ich załadowaniu z Repozytorium.

Warunkiem korzystania z szablonu przeznaczonego dla uC z rodziny STM32F4xx jest posiadanie poprawnie zainstalowanego IDE CooCox w wersji 1.7.x. W dniu pisania opisu aktualna była wersja 1.7.6.

Wymagane foldery:
  • 54_M4 CMSIS Core
  • 500_CMSIS BOOT

Aktualnie wersja 1.7.6 nie posiada pełnego repozytorium dla uC STM32F417IG oraz STM32F417VG.
Rozwiązaniem jest przygotowanie nowego projektu dla np.STM32F407IG, a następnie zmiana układu.

Plik main.c należy umieścić w folderze: ...\CooCox\CoIDE\Library\example (zastąpić istniejący main.c)

Folder cmsis_boot należy umieścić w folderze: ...\CooCox\CoIDE\repo\Components\500_CMSIS BOOT\src (usunąć istniejący i wkleić dołączony do szablonu)

Tworząc nowy projekt, należy:
  • wybrać lokalizaję oraz wpisać nazwę projektu,
  • wybrać wariant CHIP,
  • wybrać uC z rodziny ST, a następnie STM32F4xx, następnie np. STM32F407VG,
  • zatwierdzić wybór przez kliknięcie Finish,
  • w Repozytorium (Step 3) kliknąć CMSIS BOOT w obszarze BOOT, co spowoduje dodanie do projektu folderu cmsis_boot,
  • automatycznie zostanie zaznaczona linia M4 CMSIS CORE w obszarze COMMON i do projektu zostanie dodany folder cmsis.
W tym momencie projekt jest gotowy do dalszej edycji.

Kompilacja szablonu za pomocą gcc-arm-none-eabi-4_8-131204  nie może generować żadnych błędów ani ostrzeżeń

Zużycie pamięci w zależności od poziomu optymalizacji powinno wynosić:


text data bss hex filename
Program Size @O0: 2228 4 2068 4300 Template.elf
Program Size @O1: 1748 4 2068 3820 Template.elf
Program Size @O2: 1708 4 2068 3780 Template.elf
Program Size @O3: 2672 4 2068 4744 Template.elf
Program Size @Os: 1620 4 2068 3692 Template.elf



Informacje dodatkowe

Szablon nie korzysta z SPL.
Warunkiem poprawnej pracy jest jedynie dołączenie bibliotek cmsis (obecne w CooCox) oraz pliku definicji stm32f4xx.h (zawarty w szablonie).

Wielkość stosu ustala się w 71. linii pliku startup_stm32f4xx.c:
#define STACK_SIZE

Częstotliwość kwarcu podłączonego do HSE ustala się w 86. linii pliku stm32f4xx_conf.c:
#define HSE_VALUE
HSE_VALUE zachowano ze względu na zgodność z innymi funkcjami i/lub programami, w których mogą wystąpić odwołania do tej wartości.

Częstotliwość taktowania rdzenia ustala się w 90. linii pliku stm32f4xx_conf.c:
#define FREQUENCY
Nazwa przyjęta arbitralnie.

Po skonfigurowaniu zegarów, zmienna SystemCoreClock jest inicjowana wartością odpowiadającą częstotliwości taktowania rdzenia mikrokontrolera, typowo 168 000 000.

Konfiguracja Wait States dla pamięci programu jest wywoływana w 456. linii pliku startup_stm32f4xx.c.
Konfiguracja systemu zegarów dla uC jest wywoływana w 457. linii pliku startup_stm32f4xx.c.


Struktura odwołań między plikami szablonu.

Rys.1. Struktura odwołań między plikami szablonu.



board.h  plik nagłówkowy zawierający programowy opis platformy sprzętowej (PCB)
stm32f4xx.h  zmodyfikowany plik nagłówkowy zawierający programowy opis uC z rodziny STM32F4xx
stm32f4xx_conf.h zmodyfikowany plik nagłówkowy zawierający ustawienia projektu i sprzętu
stm32f4xx_it.h zmodyfikowany plik nagłówkowy zawierający szablon obsługi przerwań i wyjątków
startup_stm32f4xx.c zmodyfikowany plik zawierający ustawienia oraz funkcje uruchamiane po resecie, a przed wywołaniem funkcji main()
board.c plik zawierający funkcje obsługi platformy sprzętowej
main.c plik zawierający funkcję główną oraz funkcje dodatkowe programu
stm32f4xx_it.c plik zawierający funkcje obsługi przerwań i wyjątków


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

11 komentarzy:

  1. Będzie więcej takich artykułów o STM32f4?

    OdpowiedzUsuń
  2. Dzięki za artykuł.
    Jak wynalazłeś, które foldery w repo są podpięte właśnie do tego procka/płytki w Coocoxie?

    OdpowiedzUsuń
  3. Mogę napisać trochę więcej na temat STM32F4xx, ale musimy określić jakiś kierunek. Przepisywanie RM czy SPL'a nie generuje wartości dodanej, a pisanie kolejnego poradnika jak skonfigurować zegary albo włączyć przerwanie od TIMx to chyba nie dla mnie ;)
    Czekam na propozycje? Może zrobimy ankietę?
    Foldery przeszukałem na okoliczność występowania plików opisu uC (stm32f4xx.h) oraz cmsis. Później było już z górki: wyciąłem wszystko co dotyczyło SPL'a i nieużywanych funkcji, przyjąłem strukturę plików jak w projektach MCP dla dsPIC33 i tak już zostało. Na własny użytek mam już nieco lepszą wersję szablonu, ale jest na płytkę Waveshare Open 407-IC, a do tego jest pozbawiona komentarzy. Z tego powodu zdecydowałem się opublikować tylko starszą wersję, która z założenia jest przygotowana dla płytek Discovery, które są bardziej popularne, więc też dla Was większy pożytek z takiego pakietu. Z drugiej strony, plik opisu warstwy sprzętowej pozwala łatwo dopasować szablon do dowolnej platformy.
    Pozdrawiam,
    Marek

    OdpowiedzUsuń
  4. Myślę, że od takich prostych rzeczy też warto zacząć bo manual jest mało przejrzysty.

    OdpowiedzUsuń
  5. Jeśli jesteś w stanie to napisz proszę o nowszej serii np. STM32F429 opisując szczegółowo control clock dla tej rodziny, bo bez rozumienia tego tematu trudno konfigurować zegary dla poszczególnych peryferii ....i konfigurować pliki startowe. Jak ktoś dopiero zaczyna to jest jeden z większych koszmarów. Generalnie najlepiej by było gdyby w ogóle napisać jak taki mikroprocesor wstaje po resecie i co po kolei ładuje i jak to konfigurować , bo doczytać to z manuali od ST i zrozumieć jest trudno jeśli ktoś jeszcze w ARMach nie grzebał ...

    OdpowiedzUsuń
  6. Witaj Anonimowy,
    Konfiguracja zegarów w STM32F4xx nie jest szczególnie prosta, ale w oparciu o schemat dystrybucji zegarów z RM0090 (rev.7), można to dość szybko opanować. Jak już proponowałem wcześniej, spróbujmy określić bazę sprzętową i kierunek, w którym miałby taki kurs prowadzić. Mogę przygotować szablon z pełnym opisem dla STM32F429, który jest na płytce DISCO, ale co dalej? Nawet nie wiem czy ktoś korzysta z zamieszczonego tutaj szablonu i jakie są uwagi. Jeżeli nie wiesz jak ustawić zegary, to pisz na Forum. Jest wiele osób, które wiedzą co i jak. Ja też pomogę jak zobaczę temat.
    Aktualnie zajmuję się usb audio na kilka kanałów, ale to chyba nikogo nie interesuje.
    Pozdrawiam, Marek

    OdpowiedzUsuń
  7. Ten komentarz został usunięty przez administratora bloga.

    OdpowiedzUsuń
    Odpowiedzi
    1. Przekazałem pytanie autorowi artykułu.

      Usuń
    2. ... komentarz usunąłem, bo był w nim adres email.

      Usuń
  8. Ten komentarz został usunięty przez administratora bloga.

    OdpowiedzUsuń
    Odpowiedzi
    1. Komentarz usunąłem, bo był w nim adres email. Z autorem tego artykułu można się skontaktować na Elektrodzie pod nickiem: Marek_Skalski

      Usuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.