Powrót do świat wbudowanego
Witajcie!
Jakiś czas temu pisałem o moich problemach związanych z kompilacją pod mikrokontroler z serii STM32F103.
Wspomniałem tam o kilku rzeczach, ale największą uwagę zwróciłem na skrypt linkera oraz plik startowy, jednakże nie był to jedyny problem.
Okazało się, że moja płytka za 7 zł z Temu to nie to samo co Nucleo i nie bazuje ona na rdzeniu Cortex-M4, a na Cortex-M3, co diametralnie zmienia postać rzeczy.
Dlatego właśnie, czytając manuale obu wersji rdzeni, odkryłem, że największą różnicą jest szyna komunikacyjna.
Cortex-M4 korzysta z osobnych ścieżek, takich jak AHB1 oraz AHB2, natomiast Cortex-M3 posiada szynę komunikacyjną APB2, do której podłączone są porty GPIO oraz powiązany z nimi kontroler RCC.
W implementacji architektury Cortex-M3 należy również uwzględnić sposób deklarowania wyjść GPIO.
Okazuje się, że nie używamy w tym przypadku rejestru MODER do określenia sposobu działania naszego wyjścia, lecz rejestrów CRL/CRH.
Zaraz po sukcesie związanym z zamigotaniem diody, przeszedłem do próby napisania własnych driverów.
Dzięki takiemu rozwiązaniu mogę rozbudowywać projekt, dodając nowe pliki konfigurujące dodatkowe funkcje.
Pierwszy z nich to oczywiście ten obsługujący porty GPIO, lecz w planach mam podział na sterowniki komunikacyjne obsługujące UART, I2C itp. oraz funkcyjne, które pozwolą mi obsłużyć chociażby konwersję ADC bądź generator stabilnego sygnału PWM.
Cały kod źródłowy zamieszczam na GitHubie(też dopiero uczę się go używać dlatego będę wdzięczny za wsparcie.)
Jeżeli podobają Wam się moje posty, będę bardzo wdzięczny za wyrażenie opinii, wskazówki bądź zaobserwowanie mnie. Z góry dziękuję, gdyż bardzo pomaga mi to rozwijać się oraz poznawać nowe obszary tego pięknego świata systemów wbudowanych.