STM32Butterfly2: obsługa kart SD w trybie SPI
Podczas wykonywania funkcji mmcHwInit() ustawiany jest odpowiedni stan linii CS oraz przeprowadzana jest konfiguracja kontrolera SPI do pracy w trybie full duplex, jako master z 8 bitami danych. Za konfigurację tą odpowiada funkcja spi_cfg, która jako parametr przyjmuje dzielnik zegara taktującego kontroler SPI.
Po skonfigurowaniu linii realizowana jest inicjalizacja karty poprzez wysyłanie odpowiednich komend oraz reagowanie na zwracane odpowiedzi.
Po zakończeniu inicjalizacji karty SD, wywoływana jest funkcja printp, która wyświetla informacje o rodzaju karty. W rzeczywistości jest to definicja, pod którą ukrywa się kod przedstawiony poniżej.
#define printp(line,…) do { nlcd_set_position(0,line); tiny_printf(__VA_ARGS__); } while (0)
Przedstawiona definicja, dla początkującego, zapewne wydaje się bardzo skomplikowana. Rozkładając definicje można zauważyć, iż mamy w niej kod pętli do { … } while (0). Pętla ta grupuje oba polecenia, wywoływane w ramach pętli, w całość. Ze względu na zadany warunek pętla wykona się jednokrotnie. Pierwszym działaniem jest ustawienie pozycji kursora na wyświetlaczu, używany jest do tego celu podawany parametr – line. Następnie wywoływana jest funkcja tiny_printf, która przyjmuje jako parametr pozostałe argumenty. Funkcja ta wypisuje sformatowany tekst i dane na wyświetlaczu, wykorzystując do tego celu wcześniej przygotowany wskaźnik na funkcję wypisującą znak na wyświetlaczu.
W przypadku niepowodzenia inicjalizacji karty (zwracana wartość poniżej 0) program przechodzi do nieskończonej pętli blokując dalsze działanie. W przypadku powodzenia inicjalizacji karty SD program wyświetla informacje o pojemności karty SD, wyrażoną w MB. Pojemność uzyskiwana jest dzięki funkcji mmcCapacity().
W kolejnym kroku wywoływana jest funkcja print_partrecord(), która odczytuje pierwszy sektor, zawierającego informacje o partycji, oraz wyświetla informacje: o typie partycji, pierwszym sektorze LBA oraz o rozmiarze sektora.
Po uzupełnieniu wyświetlacza o dodatkowe informacje program przechodzi do oczekiwania na wyjęcie karty z gniazda, realizuje to funkcja card_wait4remove(). Jej działanie sprowadza się do zapętlenia programu do czasu zmiany stanu na odpowiedniej linii na stan wysoki.
Jak można zauważyć, w programie głównym brakuje kodu odpowiedzialnego za konfigurację między innymi zegarów mikrokontrolera. Ta czynność i pozostałe inicjalizujące mikrokontroler do pracy jest wykonywana w ramach obsługi przerwania wywoływanego przez reset mikrokontrolera. Podczas obsługi przerwania wywoływana jest między innymi funkcja main().


Projekty inteligentnych sterowników przetwornic z tranzystorami GaN — część 2: konfiguracja i optymalizacja
PM-3133-CPS – inteligentny trójfazowy licznik energii z CANopen
Czujnik drgań STMicroelectronics z wbudowaną AI alternatywą dla czujników piezoelektrycznych do monitorowania urządzeń przemysłowych 


![https://www.youtube.com/watch?v=gHcP8AajoN4 Szymon Robak oprowadza po katowickim Laboratorium Badań Kompatybilności Elektromagnetycznej w Sieć Badawcza Łukasiewicz - Instytucie Sztucznej Inteligencji i Cyberbezpieczeństwa. Zapraszamy na film! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/06/Szymon-Robak-tytulowe.png)
![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)

