Wpis z mikrobloga

Prbóbuję walczyć z #stm32 Nucleo ale nie jestem w stanie nawet zapalić LED, o ile z mbed było łatwo, to z HAL nie moge sobie poradzić. Jest w tym kodzie jakiś błąd? Bazowałem go na poradniku z Forbota. IDE ciągle mi pokazuje że jest jakiś błąd (na zrzucie)

#include "stm32f3xx.h"
int main(void){
SystemCoreClock = 8000000;
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef gpio;
gpio.Pin = GPIO_PIN_3;
gpio.Mode = GPIO_MODE_OUTPUT_PP;
gpio.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &gpio);
while (1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
}
}
#elektronika #programowanie #pytanie
AlcoMatt - Prbóbuję walczyć z #stm32 Nucleo ale nie jestem w stanie nawet zapalić LED...

źródło: comment_AQd4DMHaWJitV1ZOajb3CxelFQ2fjv3F.jpg

Pobierz
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@AlcoMatt: zarzuć treść makra.

HAL to syf, niech żyje LL! O ile łatwo migać diodą, to HAL strasznie utrudnia niektóre proste, aczkolwiek niestandardowe czynności.

BTW. polecam TrueStudio do takich rzeczy, od 8 wersji jest darmowy i na Linuksa. Łatwiej tam dojść do tego, czemu coś się nie kompiluje lub czemu się sypie (analizator rejestrów błędów)
  • Odpowiedz
@Razi91: Na dole zrzutu jest treść znacznika. Dopiero zaczynam swoją przygodę z STM i w sumie nie wiem za co się zabrać, o ile mbed po prostu działa, to jest w sumie skrajnie łopatologiczne jak Arduino moim zdaniem, mi zależy aby mieć trochę więcej kontroli, szczególnie że zależy mi też na aplikacjach low power. Wszędzie gdzie nie spojrzałem wszyscy polecają HALa lecz jak widać coś nie che ze mną współpracować.
  • Odpowiedz
@AlcoMatt: Daj spokój z tym Atomem, serio. Instaluj TrueStudio, projekty generuj w STM32CubeMX, najszybciej, najmniej pieprzenia się z pierdołami i przede wszystkim cywilizowany debuger.

Normalnie byś przytrzymał myszkę nad tym makrem i byś wiedział co jest w środku, albo kliknął trzymając ctrl i by podkreślił co jest nie tak, a tak to musisz się teraz bawić w szukanie tego. Problem jest w rozwinięciu tego makra, czyli prawdopodobnie Liby źle skonfigurowane,
  • Odpowiedz
@Razi91: Też nie lubię HAL, ale ST tak mocno go forsuje, że aż ciężko uciec. Kiedyś był jeszcze przyjaźniejszy STDPeriph, ale robią wszystko, żeby go głęboko pogrzebać. Wyrosłem na Atmelach i ręcznym grzebaniu w rejestrach (i to lubię), ale STM32 są już takimi gigantami, że naprawdę można się pogubić w tej dokumentacji, która w porównaniu do Atmelowskiej wygląda jak wygenerowana Doxygenem.

HAL jest faktycznie dobry jak zaczynasz bawić się w peryferia
  • Odpowiedz
@DrDevil: Już udało mi się rozwiązać swój problem, potrzebna była funkcja poniżej, chociaż wciąż pokazuje mi błąd, ale się kompiluje i wgrywa. Oczywiście tego leda to tylko do zabawy chciałem odpalić aby załapać co i jak. Docelowo mam zamiar bawić się na magistralach i przetwarzaniu danych.

void SysTick_Handler(void){
HAL_IncTick();
}
Próbowałem CubeMx, ogólnie bardzo na plus, ale kod generowany wydawał mi się strasznie nieczytelny i niezbyt wygodny do użycia w
  • Odpowiedz
@AlcoMatt: Nieczytelny jest przez te komentarze. Jeżeli nie odczuwasz potrzeby ponownej konfiguracji projektu, to chyba można je wyłączyć, albo po prostu wykasować. Trzeba przywyknąć, zawsze to jest inaczej gdy samemu zaczyna się kod od jednego main.c, a gdy wszystko wygeneruje Ci program.
  • Odpowiedz
  • 0
@DrDevil zdecydowanie, zawsze to jakieś ułatwienie. Tak zapytam, programujesz hobbystycznie czy zawodowo? Bo w sumie jestem ciekawy co właściwie preferują pracodawcy jeżeli chodzi o programowanie STM (chociaż pewnie najbardziej uniwersalne będzie cmsis jeśli mówimy o ARM różnych producentów).
  • Odpowiedz
  • 0
@DrDevil jeszcze zapytam, jak wygląda sprawa z robieniem wstawek, np. czegoś nie jestem w stanie ogarnąć HALem to dopisze używając cmsis, będzie to działać czy raczej bywa problematyczne?
  • Odpowiedz
@AlcoMatt: U nas w firmie (ale nie STM a NXP MKE02) mamy wlasne biblioteki do wszystkich peryferiow (i2cdll, spidll, uart_dll, timers itp) dla hardware access a nad tym piszesz juz sobie swoje application layer specyficzne dla danego projektu. Hardware layer sa wspoldzielone dla wszystkich projektow/updatowane/naprawiane a app.layer oddzielnie robione. W ten sposob znasz kazdy bit bibliotek i nie powinno byc zadnych tropow w szafie:). Jedyny plik z NXP
  • Odpowiedz
@AlcoMatt:

jak wygląda sprawa z robieniem wstawek, np. czegoś nie jestem w stanie ogarnąć HALem to dopisze używając cmsis, będzie to działać czy raczej bywa problematyczne?


Jak się nie pomylisz, to będzie działać. Operowanie bezpośrednio na rejestrach nie koliduje z użyciem HAL.
Na początku drogi szybciej uzyskasz efekt na HAL niż na rejestrach - ale to oczywiście zależy od doświadczenia.
  • Odpowiedz
@AlcoMatt:

Próbowałem CubeMx, ogólnie bardzo na plus, ale kod generowany wydawał mi się strasznie nieczytelny


W opcjach można włączyć rozbijanie generowanego projektu na wiele plików (Settings->Code generator->Generate peripheral initialization as a pair...), dzięki temu przynajmniej nie tworzy jednego gigantycznego pliku ze wszystkim.
  • Odpowiedz