piątek, 16 grudnia 2022

STM32G0 - Bare Metal - Przekierowanie printf() na UART.

W artykule pokażę jak przekierować dane wysłane ze standardowej bibliotecznej funkcji printf() na UART. Może mieć to zastosowanie zarówno w przypadku debugowania programu jak i poza debugowaniem do wysyłania komunikatów. Warto tu wspomnieć, że STM32 ma takie usługi jak SWV (Serial Wire Viewer) czy semihosting  ale poza trybem "debugu" to nam nie zadziała a dodatkowo STM32 z rdzeniami M0 i M0+ są wykastrowane z SWV. Ja mam zamiar wykorzystać opisany w artykule mechanizm do współpracy z modułem sieciowym Ethernet W5500 . Będę obrazował komunikaty sieciowe na UART i odczytywał je w terminalu na PC



Moja baza sprzętowa to :

- płytka developerska z STM32G071KBT6 mojej własnej roboty rzecz jasna,
- programator J-LINK EDU Mini,
- analizator stanów logicznych .
- konwerter USB / UART CP210x


Moja baza "software" :

STM32 CUBE IDE

Do testów wykorzystam UART3 i pin PA5 (TX). RX jest tutaj zbędne bo będziemy tylko wysyłać komunikaty. Przejdźmy zatem sobie przez konfigurację sprzętową tak aby docelowo uruchomić UART3 na pinie PA5.

Jakąkolwiek konfigurację zawsze zaczynam od włączenia zegarów dla peryferiów. 


Kolejnym krokiem jest konfiguracja pinu PA5 do współpracy z UART3 , fragment który nas interesuje zaznaczony jest poniżej :


Pozostałe elementy konfiguracji jakie widać na zdjęciu dotyczą innych rzeczy nie związanych z tym artykułem.

Teraz konfiguracja modułu UART3 :


Piszemy podstawowe funkcje narzędziowe do obsługi modułu UART, nas interesuje tylko jedna funkcja przesyłająca do modułu jeden bajt - usart3_sendByte():


Funkcję wysyłającą jeden bajt wstawiamy w definicję funkcji __io_putchar(). Jest to funkcja "systemowa" , którą obsługuje plik syscalls.c . Plik ten jest generowany automatycznie przy tworzeniu nowego projektu dla STM32. Obraz pliku syscalls.c poniżej :



Od tej chwili każde użycie funkcji printf() spowoduje przekierowanie strumienia danych na UART3 .
Aby się o tym przekonać napiszmy sobie prosty program jak poniżej :


Podłączam konwerter USB/UART od strony USB mam PC a od strony UART mam UART3 na pinie PA5 . Instaluję na PC terminal np. RealTerm i cieszę się podglądem wysyłanego komunikatu :



Pozdrawiam

PICmajster
picmajster.blog@gmail.com



Brak komentarzy:

Prześlij komentarz