Wpis z mikrobloga

@zarowka12: Przez CMSIS rozumiem biblioteki, stworzone przez producenta, które implementują CMSIS.
Ogólnie przeskakuje z avr na arm i mam wrażenie, że jest dużo podejść do tworzenia softu na tą architekturę. Kiedy zaczynałem pracę przy avr to mam wrażenie, że ilekroć czegoś poszukiwałem to zazwyczaj w materiałach, które znajdowałem podejście do tworzenia oprogramowania było podobne. Tutaj jak widzę można korzystać z wielu różnych bibliotek, na różnym poziomie abstrakcji. Póki co wyeliminowałem opcję
via Wykop Mobilny (Android)
  • 1
@bielu000: cmisis to malutka warstwa abstrakcji do rzeczy związanych z rdzeniem ARM, więc dużo do nauki tu nie ma. Ledwie jeden timer, kontroler przerwań itp.
Cała reszta (gpio, timery, uarty, USB, spi, i2c) jest już zależna od producent i w cmisis nic z tym związanego nie znajdziesz.
@bielu000: pytałem, bo CMSIS obejmuje różne rzeczy, np. warstwę abstrakcji dla systemu operacyjnego. Jeśli kod będzie z tego korzystał zamiast odwoływać się bezpośrednio do funkcji systemu operacyjnego, to będzie można w projekcie łatwo podmienić system operacyjny (np. FreeRTOS) na jakiś inny bez orania całej aplikacji.

Natomiast jak najbardziej CMSIS to też biblioteki dające dostęp do peryferiów i dobrze rozumiesz :) Dzięki nim programowanie jest bardzo zbliżone do tego na AVR. Mikrokontrolery
@zarowka12: Dziękuję bo dużo mi wyjaśniłeś w tym wpisie. Tym bardziej utwierdzam się w w przekonaniu że póki co nie dotykam STM32Cube, czy SPL bo zdecydowanie bardziej odpowiada mi podejście operowania bezpośrednio na makrach i definicjach struktur zawartych w CMSIS. Czy masz jakieś wskazówki lub porady odnośnie tworzenia oprogramowania na tą architekturę dla osób dopiero ja poznających? Czy było dla Ciebie coś szczególnie trudnego kiedy poznawałeś ARM?
@bielu000: chyba nie było jednej takiej rzeczy. Przez 10 lat napotkałem wiele problemów ale nie było jakiegoś takiego jednego wielkiego. Jeśli masz doświadczenie z AVR, to to są dobre podstawy. Co do wskazówek/porad, to trudno tak na szybko zebrać. Na razie do głowy przychodzą mi:
- AMR to architektura von Neumanna, więc wszystko jest w jednej przestrzeni adresowej. AVR to architektura harwardzka, gdzie Flash i RAM były w odrębnych przestrzeniach adresowych.
@zarowka12: Dzięki za tak dużą ilość wartościowyych wskazówek. Mam natomiast pytanie co do tego: 'AMR to architektura von Neumanna'. Przeglądając tego pdfa klik trafiłem na taką informację: The CM3(Cortex M-3) core has a Harvard architecture. To jak w końcu jest?
@bielu000: to zależy :) ARM to szeroka rodzina mikrokontrolerów, w obrębie której występują różne rdzenie, np. z rodziny Cortex. Niektóre z nowszych Corteksów (M3, M4, M7, M33, M33P) mają architekturę harwardzką w tym sensie, że mają oddzielne szyny do pobierania instrukcji oraz danych. Dzięki temu są szybsze. Natomiast mają charakterystyczną dla von Neumanna pojedynczą przestrzeń adresową. Mówimy wtedy, że jest to tzw. Zmodyfikowana architektura harwardzka.
Tak więc moja wypowiedź była uproszczeniem,
@zarowka12: Doba mam kilka pytań.

Pobrałem sobie klik

Lecąc po katalogach:
- Device/Include/stm32f10x.h -> definicje struktur, adresy itp
- Device/Include/systemstm32f10x.h -> deklaracje funkcji SystemInit...
- Device/Source/ARM/startup
stm32f10x_md.s -> jeden z wielu plików w tym katalogu, który służy do konfiguracji runtime przed skokiem do main, i tutaj pierwszy zgrzyt, bo podczas kompilacji mojego kodu mam problem tego typu: klik. Wygląda na to, że ten kod asm w tych plikach *.s
@bielu000: potrzebujesz:
- stm32f10x.h
- systemstm32f10x.h
- core
cm3.h (być może też jakieś inne pliki z katalogu Include odnoszące się do rdzenia, ja po prostu dodaję cały katalog do listy ścieżek dołączanych)
- systemstm32f10x.c
- startup
- skrypt linkera
- plik z kodem źródłowym funkcji main()
Czyli większość już masz i to są pliki z CMSIS. Nie wiem czy masz zainstalowane STM32Cube, ale zainstaluj i zaciągnij biblioteki dla F1.
@zarowka12: Dzięki Mirku za informacje. W międzyczasie pobrałem jakąś wersję Eclipse przygotowaną do programowania MCU. Wygenerowałem sobie jakiś projekt z migającą diodą i traceami i wszystko działało pięknie, natomiast coś się popsuło. Nie dotykałem żadnych połączeń, po prostu po pracy uruchomiłem lapka i spróbowałem wgrać nowy kod. Niestety dostaję taki błąd: "Can not attach to CPU. Trying connect under reset.
STM32: Connecting to CPU via connect under reset failed." Co się
@bielu000: zwykle jest błąd podłączenia programatora do płytki. Chyba, że masz korzystasz z jakiegoś Nucleo i masz wszystko razem. Drugi powód to wyłączane SWD w kodzie. Kiedyś jak tworzyłem projekt w STM32Cube to przypadkiem to włączyłem i spędziłem wiele godzin zastanawiając się co się dzieje.
Co do write protected to mogłeś przypadkiem włączyć blokadę zapisu przestawiając option bytes. Ewentualnie coś jest z podłączenie i programator głupieje.
Dobrym narzędziem diagnostycznym jest ST-Link
@zarowka12: Hmm próbowałem czyścić flash takim narzędziem SEGGER J-Link Unlock tool for STM32 devices
niestety nie działa.
Po wybraniu urządzenia dostaje na konsolę:
Please select the correct device family: 2
Connecting to J-Link via USB...O.K.
Using SWD as target interface.
Target interface speed: 1000 kHz.
VTarget = 3.313V
Reset target...O.K.

I nic więcej się nie dzieje, a z tego co znalazłem to zaraz po tym "Reset target.." powinny być następne komunikaty.