Eclipse + GNU ARM + STM32 - HAL lub SPL

10

Zacznę od opracowania ARM (po 2 latach AVR) i wybrałem płytę STM DISCOVERY z mikroprocesorem stm32f4.

Zdecydowałem się na Eclipse + ARM gcc, ponieważ nie podoba mi się limit kodu na Keil i nie mam pieniędzy, aby uzyskać płatną wersję.

Zgodnie z samouczkami zainstalowałem Eclipse wraz z narzędziami ARM gcc + openocd + make utils itp.

Moje pytanie dotyczy wtyczki „pakietów”. Jak każdy początkujący, jestem zdezorientowany, czy użyć nowego STM HAL, czy starszego SPL.

Rozumiem, że HAL zaimplementował abstrakcję do poziomu, w którym można ją nazwać odpowiednikiem Arduino dla uzbrojenia. Z drugiej strony SPL zapewnia wystarczającą abstrakcję, aby przyspieszyć kodowanie, ale nadal musisz radzić sobie na poziomie układów.

Mając to zrozumienie, chciałbym trzymać się SPL, aby lepiej rozumieć rzeczy, niż używać HAL.

Chciałbym wiedzieć, czy używanie pakietów dla STM domyślnie zmusza mnie do używania HAL? Jeśli tak, to czy ktoś może mi wskazać, jak używać SPL w mojej konfiguracji?

Ankit
źródło
1
„tutoriale” są nieco niejasne, więc nie wiem o „wtyczce” pakietów i nie mam pojęcia, co to jest SPL (biblioteka urządzeń peryferyjnych STM?) lub SPCL. Może po prostu nie kwalifikuję się do tego pytania, ale od ponad dwóch lat praca ze STM32 sprawia, że ​​zastanawiam się ...
Arsenal
2
SPL to standardowa biblioteka peryferyjna , z drugiej strony nie znam też SPCL.
Bence Kaulics,
2
Preferowanym i obsługiwanym przez STM sposobem jest dzisiaj użycie STM32CubeMX, który generuje kod oparty na HAL. I muszę przyznać, że jest to całkiem przydatne, chociaż nie jestem fanem zautomatyzowanych narzędzi, ponieważ ukrywają ważne rzeczy ...
Eugene Sh.
1
Chociaż powinien być w większości kompatybilny z innymi wersjami SPL z procesorem STM32, nie wierzę, że ST ma SPL dla STM32F7.
Tut
Przepraszam za bit SPCL. To był błąd. Wciąż przyzwyczajam się do akronimów. Również dwukrotnie sprawdziłem, a moja płyta jest wariantem STM32F4. Kolejny błąd. Nadal jednak stoją ogólne pytania: jak korzystać ze standardowej biblioteki urządzeń peryferyjnych z zaćmieniem?
Ankit

Odpowiedzi:

6

Jak widzę, SPL nie ma nic wspólnego z używanym IDE. Możesz po prostu dołączyć odpowiednie moduły (np. Stmf4xx_dma.c i stmf4xx_dma.h) do swojego projektu i korzystać z funkcji ujawnionych (i bardzo dobrze opisanych) w plikach .c i .h. W rzeczywistości uczyłem się na jądrze stmf411 z gcc, openocd i SPL, używając tylko wiersza poleceń systemu Windows; bez IDE. Pakiety w środowisku Eclipse prawdopodobnie zmusiłyby cię do korzystania z HAL (ponieważ w pobranym folderze „Packages” do zaćmienia widzę tylko moduły HAL).

Sam HAL IMO wydaje się dużo bardziej warstwowy niż to konieczne. Natomiast bezpośredni dostęp do rejestrów jest męczący i trudny do odczytania. SPL wydaje się w sam raz. clive1, guru na forum st.com, również woli SPL niż HAL. Oto moje pytanie na tym forum ... może być pomocne.

Potrzebujesz pomocy z USART na Nucleo STMF411

Sohail
źródło
1
Całkowicie się z tym zgadzam. Wydaje się, że HAL przesadził z całą koncepcją abstrakcji. Chociaż dzięki niemu można by szybciej opracowywać programy, tak naprawdę nie dowiedziałbyś się, co dokładnie się dzieje, co moim zdaniem jest niezbędne do nauki i bycia na przyszłość. Jako test stworzyłem projekt w wersji uvision i wybrałem starszą obsługę zamiast pakietów oprogramowania i wydaje się, że zawiera pliki SPL. Dziękujemy również za link!
Ankit
1

Nie mam żadnych doświadczeń z HAL, ale wiele razy używałem SPL do oszczędzania czasu. Moim zdaniem Społeczność docelowa tego procesora osadzonego to 2 grupy: pierwsza grupa, która nie jest zainteresowana zaangażowaniem się w warstwy sprzętowe. Programistów, zwykłych hobbystów i wyznawców Arduino, malin. jeśli jesteś w tej grupie, wydaje się, że HAL jest dla ciebie dobrym wyborem. Sekundy, które pochodzą od społeczności elektronicznej i sprzętowej, którzy wolą

GPIO_A->PIN &= ~(1 << 15);

do

LED_On(1)

za włączanie diody LED i chcą wiedzieć, co robią w zasadzie. to jeśli masz w tej grupie i masz wystarczająco dużo czasu na przeczytanie podręcznika referencyjnego i podręcznika programowania MCU, może programowanie na poziomie rejestru jest kolejnym wyborem. ale jeśli chcesz wybierać pomiędzy opcją tylko powyżej 2: HAL ma lepszą przyszłość dzięki obsłudze ST ', ale SPL jest łatwiejszym sposobem zrozumienia dla nowego startera. Może to może pomóc http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/

Mahmoud Hosseinipour
źródło
1
Dzięki za link, ciekawa lektura! Masz rację, dla początkujących SPL wydaje się lepszym sposobem na naukę (i tak też wybrałem). Btw w twojej odpowiedzi powinno brzmieć LED_Off
Ankit
1

Zdobądź IDE: System Workbench dla STM32 - jest bezpłatny, oparty na Eclipse i zawiera zarówno arm-gcc, jak i openocd w jednym pakiecie.

A o bibliotekach: oprócz SPL i HAL istnieje teraz LL. Każdy ma pewne zalety i wady i musisz wybrać to, czego potrzebujesz. I jak rozumiem , wszystkie mają status eksperymentalny dla ST. Poniżej moich ocen do każdego z nich:

  • SPL: stary, nieporęczny, bez dodatkowego użycia pamięci RAM, elastyczny
  • HAL: faktyczne, uciążliwe, dodatkowe użycie pamięci RAM, nie jest elastyczne
  • LL: faktyczny, lekki, bez dodatkowego użycia pamięci RAM, elastyczny

Krótki opis moich ocen:

  • kłopotliwe - duże użycie pamięci flash, „super” uniwersalne funkcje do pracy na peryferiach
  • dodatkowe użycie pamięci RAM - dotyczy HAL, ma kopię stanu peryferyjnego w strukturach zlokalizowanych pamięci RAM i używa go wszędzie i za każdym razem
  • nie elastyczny - i znowu o HAL, ma wiele funkcji dla różnych przypadków, ale! większość z nich nie nadaje się do użycia na prawdziwych urządzeniach (ludzie próbują ponownie zainicjować HAL, aby odbierać bajt bajt z usart >_<, wszystkie funkcje dla TIM + DMA są zaimplementowane do przepisywania rejestru TIM i żadnych innych ...)

Dla małej rehabilitacji HAL: ma jedną wielką zaletę dla początkujących - jest obsługiwany przez STMCubeMX.

EDYTOWAĆ:

Zapomniałem o libopencm3 - to alternatywna biblioteka. Nie użyłem tego.

kupiec
źródło