HOLTEK HT32 MCU UART Nota aplikacyjna Instrukcja obsługi
Uwaga aplikacyjna HOLTEK HT32 MCU UART

Wstęp

Universal Asynchronous Receiver/Transmitter – UART to szeroko stosowany interfejs transmisji szeregowej, który zapewnia elastyczną asynchroniczną transmisję danych w trybie pełnego dupleksu. Kod aplikacji „Module_UART” przedstawiony w tej nocie aplikacyjnej wykorzystuje przerwania TX/RX z programowymi buforami pierścieniowymi do implementacji prostych funkcji nadawania/odbioru UART za pośrednictwem interfejsów API, których powiązane funkcje opisano poniżej. Uprości to cały proces transmisji danych i pozwoli użytkownikom szybko zrozumieć i wdrożyć aplikacje komunikacyjne UART.

  • Funkcje nadawania/odbioru: odczyt bajtu, zapis bajtu, odczyt bufora, zapis bufora itp.
  • Funkcje stanu: uzyskaj długość bufora, status TX itp.

Ten dokument najpierw przedstawi protokół komunikacyjny UART, który pomoże użytkownikom lepiej zrozumieć komunikację UART od zasady do zastosowania. Następnie następuje pobranie i przygotowanie zasobów wymaganych do kodu aplikacji, w tym biblioteki oprogramowania układowego, pobranie kodu aplikacji, file i konfiguracji katalogu, a także wprowadzenie do narzędzia oprogramowania terminala użytego w nocie aplikacyjnej. W rozdziale Opis funkcjonalny zostanie przedstawiona struktura katalogów kodu aplikacji, ustawienia parametrów oraz opis API. Wykorzystanie interfejsu API zostanie opisane przy użyciu kodu aplikacji „Module_UART”, a zużycie zasobów Flash/RAM wymagane przez interfejsy API również zostanie wymienione. Rozdział Instrukcje użytkowania przeprowadzi użytkownika przez etapy przygotowania środowiska, kompilacji i testowania, aby potwierdzić, że kod aplikacji będzie działał poprawnie. Następnie zapewni instrukcje wyjaśniające, jak zintegrować interfejsy API z projektami użytkownika, a na koniec zapewni odniesienie do modyfikacji i typowych problemów, które mogą napotkać.

Użyte skróty: 

  • UART: Uniwersalny asynchroniczny odbiornik/nadajnik
  • API: Interfejs programowania aplikacji
  • LSB: Najmniej znaczący bit
  • MSB: Najbardziej znaczący bit
  • Komputer: Komputer osobisty
  • SK: Zestaw startowy, płytka rozwojowa HT32
  • Środowisko programistyczne: Zintegrowane środowisko programistyczne

Protokół komunikacyjny UART

UART to interfejs komunikacji szeregowej, który realizuje konwersję danych równoległych do szeregowych w swoim nadajniku, a następnie komunikuje się szeregowo z podobnym odbiornikiem. Następnie odbiornik wykonuje konwersję danych szeregowo-równoległych po odebraniu danych. Rysunek 1 przedstawia schematyczny diagram komunikacji szeregowej pokazujący, w jaki sposób dane są przesyłane w kolejności bitowej. Dlatego do dwukierunkowej komunikacji między nadajnikiem a odbiornikiem potrzebne są tylko dwa przewody, TX i RX, do szeregowego przesyłania danych między sobą. TX to pin, na którym UART przesyła dane szeregowe i jest podłączony do pinu RX odbiornika. Dlatego urządzenia nadajnika i odbiornika muszą połączyć swoje piny TX i RX, aby zapewnić dwukierunkową komunikację UART, jak pokazano na Postać 2.

Rysunek 1. Schemat komunikacji szeregowej
Schemat komunikacji szeregowej

Rysunek 2. Schemat obwodu UART
Schemat obwodu UART

Podczas komunikacji szeregowej UART transmisja danych jest asynchroniczna. Oznacza to, że między nadajnikiem a odbiornikiem nie ma zegara ani innego sygnału synchronizującego. W tym przypadku używana jest szybkość transmisji, która jest szybkością transmisji/odbioru danych szeregowych i która jest ustawiana przez obie strony przed transferem danych. Ponadto na początku i końcu pakietu danych dodawane są specjalne bity, takie jak bity startu i stopu, w celu utworzenia kompletnego pakietu danych UART. Rysunek 3 przedstawia strukturę pakietu danych UART, podczas gdy rysunek 4 przedstawia 8-bitowy pakiet danych UART bez bitu parzystości.
Rysunek 3. Struktura pakietu danych UART
Struktura pakietu danych UART

Rysunek 4. 8-bitowy format pakietu danych UART
Format pakietu danych
Każda część pakietu danych UART jest przedstawiona w poniższej kolejności.

  • Początek bitu: Wskazuje początek pakietu danych. Pin UART TX zwykle pozostaje na wysokim poziomie logicznym przed rozpoczęciem transmisji. Jeśli rozpocznie się transmisja danych, nadajnik UART przestawi pin TX z stanu wysokiego na niski, tj. z 1 na 0, a następnie przetrzyma go tam przez jeden cykl zegara. Odbiornik UART rozpocznie odczytywanie danych po wykryciu przejścia z wysokiego na niski na pinie RX.
  • Dane: Są to rzeczywiste przesyłane dane o długości 7, 8 lub 9 bitów. Dane są zwykle przesyłane najpierw za pomocą LSB.
  • Bit parzystości: Numer logiczny „1” w danych służy do określenia, czy jakiekolwiek dane uległy zmianie podczas transmisji. Dla parzystości całkowita liczba logicznych „1” w danych powinna być liczbą parzystą, i odwrotnie, całkowita liczba logicznych „1” w danych powinna być liczbą nieparzystą dla parzystości nieparzystej.
  • Zatrzymaj bit: Oznacza to koniec pakietu danych, w którym nadajnik UART przestawi pin TX z niskiego na wysoki, tj. z 0 na 1, a następnie przetrzyma go tam przez 1 lub 2 bity.

Jak wspomniano wcześniej, ponieważ w obwodzie UART nie ma sygnału zegara, ta sama prędkość transmisji/odbioru danych szeregowych, znana jako szybkość transmisji, musi zostać zdefiniowana między nadajnikiem a odbiornikiem, aby zapewnić bezbłędną transmisję. Szybkość transmisji jest określona przez liczbę bitów przesyłanych na sekundę, w bps (bitach na sekundę). Niektóre standardowe i powszechnie stosowane szybkości transmisji to 4800bps, 9600bps, 19200bps, 115200bps itd. Odpowiedni czas potrzebny do przesłania pojedynczego bitu danych pokazano poniżej.
Tabela 1. Szybkość transmisji a czas transmisji 1-bitowej 

Szybkość transmisji Transmisja 1-bitowa Czas
4800bps 208.33µs
9600bps 104.16µs
19200bps 52.08µs
115200bps 8.68µs

Pobieranie i przygotowywanie zasobów

Ten rozdział przedstawi kod aplikacji i używane narzędzie programowe, a także sposób konfiguracji katalogu i file ścieżka.

Biblioteka oprogramowania układowego 

Najpierw upewnij się, że biblioteka oprogramowania układowego Holtek HT32 została pobrana przed użyciem kodu aplikacji. Link do pobrania jest pokazany poniżej. Tutaj są dwie opcje, HT32_M0p_Vyyyymmdd.zip dla serii HT32F5xxxx i HT32_M3_Vyyyymmdd.zip dla serii HT32F1xxxx. Pobierz i rozpakuj żądany file.

Zamek błyskawiczny file zawiera kilka folderów, które można sklasyfikować jako Document, Firmware Library, Tools i inne elementy, których ścieżka umieszczenia jest pokazana na rysunku 5. Zip biblioteki firmware HT32 file z file nazwa HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip znajduje się w folderze Firmware_Library.

Rysunek 5. Zawartość pliku HT32_M0p_Vyyyymmdd.zip
Zawartość

Kod aplikacji
Pobierz kod aplikacji z poniższego łącza. Kod aplikacji jest spakowany w pliku ZIP file z file nazwa HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Widzieć Rysunek 6 dla file konwencje nazw.

Rysunek 6. Kod aplikacji File Wprowadzenie nazwy 

Link do pobrania: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/ Kod aplikacji

File i Konfiguracja katalogu
Ponieważ kod aplikacji nie zawiera biblioteki oprogramowania układowego HT32 files, rozpakowany kod aplikacji i biblioteka oprogramowania układowego files należy umieścić we właściwej ścieżce przed rozpoczęciem kompilacji. Kod aplikacji zip file zwykle zawiera jeden lub więcej folderów, takich jak aplikacja i biblioteka, jak pokazano na rysunku 7. Umieść folder aplikacji w katalogu głównym biblioteki oprogramowania układowego HT32, aby zakończyć file konfiguracji ścieżki, jak pokazano na rysunku 8. Alternatywnie rozpakuj kod aplikacji i bibliotekę oprogramowania układowego HT32 jednocześnie do tej samej ścieżki, aby uzyskać te same wyniki konfiguracji.

Rysunek 7. HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip Zawartość
Zawartość

Rysunek 8. Ścieżka dekompresyjna
Ścieżka dekompresyjna

Oprogramowanie terminala
Kod aplikacji może przesyłać komunikaty przez port COM w celu realizacji wyboru funkcji lub wyświetlania statusu. Wymaga to wcześniejszej instalacji oprogramowania terminala po stronie hosta. Użytkownicy mogą wybrać odpowiednie oprogramowanie połączeniowe lub skorzystać z bezpłatnego licencjonowanego oprogramowania, takiego jak Tera Term. W kodzie aplikacji kanał UART jest skonfigurowany z długością słowa 8 bitów, bez parzystości, 1 bitem stopu i szybkością transmisji 115200bps.

Opis funkcjonalny

Ten rozdział zawiera opis funkcjonalny kodu aplikacji, w tym informacje o strukturze katalogów, architekturze API, opisie ustawień itp

Struktura katalogów
Kod aplikacji file zawiera folder aplikacji. Następną warstwą jest folder „Module_UART”, który zawiera dwa programy użytkowe: „UART_Module_Example” i „UART_Bridge”. Istotny files są wymienione i opisane poniżej.
Tabela 2. Struktura katalogu kodu aplikacji

Teczka / File Nazwa Opis
\\aplikacja\Moduł_UART\UART_Module_Example*1
_UtwórzProjekt.bat Skrypty wsadowe do tworzenia projektu files
_ProjectSource.ini Inicjalizacja file do dodawania kodu źródłowego do projektów
ht32_board_config.h Organizować coś file związane z przydziałem wejść/wyjść urządzeń peryferyjnych IC
ht32fxxxxx_01_it.c Przerwij program obsługi file
główny c Kod źródłowy programu głównego
\\aplikacja\Module_UART\UART_Bridge*2
_UtwórzProjekt.bat Skrypty wsadowe do tworzenia projektu files
_ProjectSource.ini Inicjalizacja file do dodawania kodu źródłowego do projektów
ht32_board_config.h Organizować coś file związane z przydziałem wejść/wyjść urządzeń peryferyjnych IC
ht32fxxxxx_01_it.c Przerwij program obsługi file
główny c Kod źródłowy programu głównego
uart_bridge.h uart_bridge.c Nagłówek mostka UART file i kod źródłowy file
\\narzędzia\oprogramowanie pośrednie
moduł_uart.h*3 uart_module.c*3 Nagłówek interfejsu API file i kod źródłowy file
\\narzędzia\wspólne
bufor_pierścienia.h bufor_pierścienia.c Nagłówek bufora pierścieniowego oprogramowania file i kod źródłowy file

Notatka: 

  1. W pliku „UART_Module_Example” kod aplikacji, operacje odczytu i zapisu API są wykonywane w pętli zwrotnej, patrz „API Usage Examples”, aby uzyskać więcej informacji.
  2.  W kodzie aplikacji „UART_Bridge” aktywowane są dwa kanały UART, UART CH0 i UART CH1, a między dwoma urządzeniami UART zaimplementowany jest niestandardowy protokół komunikacyjny poprzez struktury COMMAND. Aby uzyskać więcej informacji, zapoznaj się z częścią „Wykorzystanie interfejsu API npamples”.
  3. Kod aplikacji musi korzystać z pliku uart_module.c/h files, które mają wymagania dotyczące wersji biblioteki oprogramowania układowego. Wymagania mogą się zmieniać od czasu do czasu w zależności od aktualizacji. Aby potwierdzić wymagania dotyczące bieżącej wersji biblioteki oprogramowania układowego, zapoznaj się z treścią sprawdzania zależności, wyszukując słowo kluczowe „Kontrola zależności” w pliku main.c file. Jeśli wersja biblioteki oprogramowania układowego nie spełnia wymagań, pobierz najnowszą wersję, korzystając z łącza podanego w sekcji „Biblioteka oprogramowania sprzętowego”.

Architektura API
Każde API posiada ważny parametr CH, którym jest Kanał UART. To określa, który kanał UART ma być kontrolowany. Obecnie obsługiwane są do czterech kanałów UART i dlatego cztery stałe symbole są zdefiniowane w następujący sposób. Są one używane jako parametr CH zapewniający interfejsom API podstawę kontroli.

  • UARTM_CH0: parametr wejściowy – steruj lub konfiguruj UART CH0
  • UARTM_CH1: parametr wejściowy – steruj lub konfiguruj UART CH1
  • UARTM_CH2: parametr wejściowy – steruj lub konfiguruj UART CH2
  • UARTM_CH3: parametr wejściowy – steruj lub konfiguruj UART CH3

Przestrzeń pamięci nie zostanie zmarnowana, jeśli używany jest tylko jeden kanał UART. Dzieje się tak, ponieważ można ustawić liczbę obsługiwanych kanałów UART, a nieużywany kod kanału UART zostanie usunięty przez preprocesor w celu zwiększenia dostępnej pamięci. Architektura API jest pokazana w Rysunek 9.

Rysunek 9. Diagram blokowy architektury API
Schemat blokowy architektury

Każdy interfejs API składa się z czterech grup ustawień lub elementów sterujących związanych z kanałem UART, dzięki czemu użytkownicy muszą jedynie wprowadzić żądany parametr CH. Do skonfigurowania odpowiedniego API wymagane jest jedynie posiadanie dodatkowej tabeli podstawowych parametrów konfiguracyjnych UART o postaci struktury USART_InitTypeDef. API zaimplementuje podstawową konfigurację UART zgodnie z zawartością parametrów w tabeli. Zapoznaj się z sekcją „Opis interfejsu API”, aby zapoznać się z tabelą podstawowej struktury konfiguracji UART.

Moduł uart_module.c/.h files zawierają tylko przerwania (CHx_IRQ) ​​i tablicę stanu (CHx Status) każdego kanału UART, podczas gdy wszystkie ustawienia wymagane do komunikacji UART są dostarczane przez ht32_board_config.h. Parametry istotne dla sprzętu w pliku ht32_board_config.h file przedstawiono w tabeli poniżej. Więcej szczegółów znajduje się w sekcji „Opis ustawień”.

Parametry istotne dla sprzętu w pliku ht32_board_config.h obejmują ustawienia wejścia/wyjścia i ustawienia fizycznego portu UART w następujący sposób.

Tabela 3. Symbole definicji w ht32_board_config.h

Symbol Opis
HTCFG_UARTM_CH0 Fizyczna nazwa portu UART; Byłyampplik: UART0, UART1…
HTCFG_UARTM0_TX_GPIO_PORT Definiuje nazwę portu TX dla kanału CH0; Byłyample: A, B, C…
HTCFG_UARTM0_TX_GPIO_PIN Definiuje numer pinu TX dla kanału CH0; Byłyample: 0~15
HTCFG_UARTM0_RX_GPIO_PORT Definiuje nazwę portu RX dla kanału CH0; Byłyample: A, B, C…
HTCFG_UARTM0_RX_GPIO_PIN Definiuje numer pinu TX dla kanału CH0; Byłyample: 0~15
HTCFG_UARTM0_TX_BUFFER_SIZE Definiuje rozmiar bufora TX dla CH0; Byłyample: 128
HTCFG_UARTM0_RX_BUFFER_SIZE Definiuje rozmiar bufora RX dla CH0; Byłyample: 128

Aby zmodyfikować konfigurację AFIO kanału UART, zapoznaj się z odpowiednim arkuszem danych urządzenia. Obecnie działają tylko definicje we/wy dla UART CH0, ponieważ tylko UART CH0 został skonfigurowany w ht32_board_config.h. Aby dodać UART CH1~3, ich definicje wejść/wyjść należy uzupełnić, odwołując się do definicji UART CH0 lub odwołując się do sekcji „Modyfikacja ustawień i często zadawane pytania”.

Istnieją trzy główne cechy architektury API: 

  1. Obsługiwane są do czterech kanałów UART. Ich parametry wejściowe to UARTM_CH0, UARTM_CH1, UARTM_CH2 i UARTM_CH3.
  2.  Liczbę kanałów UART można ustawić, a niewykorzystane kanały nie zmniejszą dostępnej pamięci.
  3. Wszystkie ustawienia UART i definicje wejść/wyjść są całkowicie oddzielone od interfejsów API. Zwiększa to wygodę zarządzania ustawianiem wartości i zmniejsza możliwość nieprawidłowych lub brakujących ustawień.

Opis ustawienia 

Ta sekcja przedstawi ustawienia parametrów w plikach ht32_board_config.hi uart_module.h files.

  1. ht32_board_config.h: To file jest używany do definicji pinów i ustawień odpowiednich dla płyty rozwojowej, które obejmują kanał IP UART (UART0, UART1, USART0…) używany przez zestaw startowy (SK), odpowiednie lokalizacje pinów TX/RX i rozmiar bufora TX/RX. Rysunek 10 przedstawia zawartość ustawień zestawu startowego HT32F52352. W zależności od funkcjonalnej integracji rozwoju, użytkownicy mogą zapoznać się z sekcją „Przypisanie pinów” w arkuszu danych używanego urządzenia, aby zaimplementować definicje pinów. Więcej szczegółów na temat modyfikacji ustawień zostanie opisanych w sekcji „Modyfikacja ustawień i najczęściej zadawane pytania”.
    Rysunek 10. Ustawienia ht32_board_config.h (HT32F52352)
    Ustawienia
  2. uart_module.h: To jest nagłówek API file używane przez kod aplikacji, który zawiera odpowiednie ustawienia domyślne, definicje funkcji itp. Jak pokazano na rysunku 11, zawartość ustawień domyślnych może zostać zastąpiona przez zewnętrzne konfiguracje, takie jak ustawienia w ht32_board_config.h file.
    Rysunek 11. Ustawienia domyślne w uart_module.h
    Ustawienia domyślne
Opis interfejsu API
  1. Opis typu danych kodu aplikacji.
    • USART_InitTypeDef
      Jest to podstawowa struktura konfiguracji UART, która składa się z konfiguracji BaudRate, WordLength, StopBits, Parity i Mode, jak pokazano poniżej.
      Zmienny Nazwa Typ Opis
      USART_Szybkość transmisji u32 Szybkość transmisji komunikacji UART
      USART_Długość słowa u16 Długość słowa komunikacji UART: 7, 8 lub 9 bitów
      USART_Bity stopu u16 Długość bitu stopu komunikacji UART: 1 lub 2 bity
      USART_Parytet u16 Parzystość komunikacji UART: parzysta, nieparzysta, znak, spacja lub brak parzystości
      Tryb USART u16 Tryb komunikacji UART; interfejsy API obsługują tylko tryb normalny
  2. Przed użyciem funkcji API należy przeprowadzić podstawową konfigurację UART w programie głównym. Podstawowa konfiguracja UART dla tego kodu aplikacji jest pokazana na rysunku 12. Tutaj szybkość transmisji wynosi 115200 bps, długość słowa to 8 bitów, długość bitu stopu to 1 bit i nie ma parzystości.
    Rysunek 12. Podstawowa konfiguracja UART
    Podstawowa konfiguracja
  3. Rysunek 13 przedstawia funkcje API zadeklarowane w pliku uart_module.h file. Poniższe tabele wyjaśniają funkcje, parametry wejściowe i użycie funkcji API.
    Rysunek 13. Deklaracje funkcji API w uart_module.h 
    Deklaracje funkcji API
Nazwa void UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue)
Funkcjonować Inicjalizacja modułu UART
  Wejście CH kanał UART
pUART_Init Wskaźnik struktury podstawowej konfiguracji UART
 uRxTimeOutValue Wartość limitu czasu UART RX FIFO. Gdy RX FIFO otrzyma nowe dane, licznik zresetuje się i uruchomi ponownie. Gdy licznik osiągnie ustawioną wartość limitu czasu i odpowiednie przerwanie czasu zostanie włączone, zostanie wygenerowane przerwanie czasu.
 Stosowanie UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Uruchom podstawową konfigurację UART//Patrz rysunek 12, aby zapoznać się z konfiguracją USART_InitStructure
Nazwa u32 UARTM_WriteByte(u32 CH, u8 uData)
Funkcjonować Operacja zapisu bajtu modułu UART (TX)
Wejście CH kanał UART
uDane Dane do zapisania
Wyjście SUKCES Udany
BŁĄD Przegrany
Stosowanie UARTM_WriteByte(UARTM_CH0, 'A'); //UART zapisuje 1 bajt – „A”
Nazwa u32 UARTM_Write(u32 CH, u8 *pBufor, u32 uLength)
Funkcjonować Operacja zapisu modułu UART (TX)
 Wejście CH kanał UART
pBufor Wskaźnik bufora
uDługość Długość danych do zapisania
Wyjście SUKCES Udany
BŁĄD Przegrany
 Stosowanie u8 Test[] = „To jest test!\r\n”; UARTM_Write(UARTM_CH0, Test, sizeof(Test) -1); //UART zapisuje dane pBuffer
Nazwa u32 UARTM_ReadByte(u32 CH, u8 *pData)
Funkcjonować Operacja odczytu bajtu modułu UART (RX)
Wejście CH kanał UART
pDane Adres do umieszczenia odczytanych danych
Wyjście SUKCES Udany
BŁĄD Błąd (brak danych)
   Stosowanie u8 Dane tymczasowe; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//Jeśli UARTM_ReadByte() zwróci SUKCES, to UART zapisuje ten bajt danych
Nazwa u32 UARTM_Read(u32 CH, u8 *pBufor, u32 uLength)
Funkcjonować Operacja odczytu modułu UART (RX)
 Wejście CH kanał UART
pBufor Wskaźnik bufora
uDługość Długość danych do odczytania
Wyjście Przeczytaj liczbę Długość danych została odczytana
     Stosowanie u8 Test2[10]; u32 Len; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() odczytuje 5 bajtów danych i zapisuje je w Test2 i przypisuje odczytaną liczbę bajtów do Len//Zapisz dane pochodzące z Test2
Nazwa u32 UARTM_GetReadBufferLength(u32 CH)
Funkcjonować Uzyskaj długość bufora odczytu (RX)
Wejście CH kanał UART
Wyjście uDługość Odczyt długości bufora
  Stosowanie UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //Inicjalizacja modułu UART while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Poczekaj, aż UARTM_ReadBuffer otrzyma 5 bajtów danych
Nazwa u32 UARTM_GetWriteBufferLength(u32 CH)
Funkcjonować Uzyskaj długość bufora zapisu (TX)
Wejście CH kanał UART
Wyjście uDługość Długość bufora zapisu
Nazwa u8 UARTM_IsTxZakończono(u32 CH)
Funkcjonować Uzyskaj status TX
Wejście CH kanał UART
Wyjście PRAWDA Status TX: zakończony
FAŁSZ Stan TX: niezakończony
      Stosowanie UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // „uart_module.c” SVN >= 525 wymaganewhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //Tego API można użyć do sprawdzenia statusu TX, jak pokazano powyżej; poczekaj, aż API UARTM_WriteByte() zakończy działanie, tzn. status TX będzie miał wartość TRUE, a następnie kontynuuj kolejne działania.//Dodano ograniczenie, ponieważ ta funkcja nie została dodana, dopóki numer wersji SVN w uart_module.c nie wynosi 525.
Nazwa próżnia UARTM_DiscardReadBuffer(u32 CH)
Funkcjonować Odrzuć dane w buforze odczytu
Wejście CH kanał UART

Użycie interfejsu API Npamples 

Ta sekcja zademonstruje zapis i odczyt interfejsu API npamppliki kodu aplikacji „Module_UART” przy użyciu procesu inicjalizacji i „UART_Module_Example” proces kodu aplikacji. Przed użyciem interfejsów API użytkownicy muszą dołączyć nagłówek interfejsu API file do głównego kodu źródłowego programu file (#include „middleware/uart_module.h”).

Jak pokazano na rysunku 14, wchodząc w proces inicjalizacji, najpierw zdefiniuj podstawową strukturę konfiguracji UART. Następnie skonfiguruj podstawowe elementy struktury konfiguracji UART, w tym BaudRate, WordLength, StopBits, Parity i Mode. Na koniec wywołaj funkcję inicjalizacji API, której zakończenie oznacza koniec procesu inicjalizacji. Po tym użytkownicy mogą kontynuować operacje zapisu i odczytu w oparciu o wstępnie ustawioną podstawową konfigurację UART.

Rysunek 14. Schemat blokowy inicjalizacji
Schemat blokowy inicjalizacji

Plik „UART_Module_Example” demonstruje operacje odczytu i zapisu interfejsu API w sposób pętli zwrotnej. Schemat blokowy tego pokazano na rysunku 15. Zastosowane funkcje API obejmują UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() i UARTM_GetReadBufferLength(). Ich opis znajduje się w sekcji „Opis API”.

Rysunek 15. Schemat blokowy zapisu i odczytu Npamples
Schemat blokowy zapisu i odczytu Npamples

Istnieje inny kod aplikacji „UART_Bridge” w folderze „Module_UART”, z którym jest powiązany file opis znajduje się w sekcji „Struktura katalogów”. Kod aplikacji „UART_Bridge” aktywuje dwa kanały UART, UART CH0 i UART CH1, a następnie dostosowuje protokół komunikacyjny między dwoma urządzeniami UART poprzez struktury COMMAND, gCMD1 i gCMD2. Są one zdefiniowane w uart_bridge.c, jak pokazano poniżej. UARTBridge_CMD1TypeDef gCMD1:

Zmienny Nazwa Typ Opis
uNagłówek u8 Chodnikowiec
uCmd u8 Rozkaz
uDane[3] u8 Dane

UARTBridge_CMD2TypeDef gCMD2:

Zmienny Nazwa Typ Opis
uNagłówek u8 Chodnikowiec
uCmdA u8 Polecenie A
uCmdB u8 Polecenie B
uDane[3] u8 Dane

W kodzie aplikacji „UART_Bridge” użyj gCMD1, aby otrzymać dane jako pakiet poleceń, a następnie przeanalizuj je. Następnie zgodnie z dostosowanym protokołem komunikacyjnym ustaw gCMD2 jako pakiet odpowiedzi i wyślij go. Poniżej jest byłyampplik pakietu poleceń gCMD1) i pakiet odpowiedzi (gCMD2). Pakiet poleceń (UARTBridge_CMD1TypeDef gCMD1):

Bajt 0 Bajt 1 Bajt 2 ~ Bajt 4
uNagłówek uCmd uDane [3]
"A" „1” „x, y, z”

Pakiet odpowiedzi (UARTBridge_CMD2TypeDef gCMD2):

Bajt 0 Bajt 1 Bajt 2 Bajt 3 ~ Bajt 5
uNagłówek uCmdA uCmdB uDane [3]
"B" "A" „1” „x, y, z”

Zajęcie zasobów
Biorąc HT32F52352 jako example poniżej przedstawiono zasoby zajmowane przez moduł UART.

HT32F52352
Rozmiar ROM 946 bajty
Rozmiar pamięci RAM 40*1 + 256*2 Bajty

Notatka:

  1. Zmienne globalne, w tym flagi i statusy dla pojedynczego kanału zajmują 40 bajtów pamięci RAM.
  2.  Dotyczy to warunków, w których używany jest pojedynczy kanał, a rozmiar bufora TX/RX wynosi 128/128 bajtów. Rozmiar bufora można ustawić zgodnie z wymaganiami aplikacji.

Tabela 4. Zajęcie zasobu kodu aplikacji 

  • Środowisko kompilacji: MDK-Arm V5.36, ARMCC V5.06 aktualizacja 7 (kompilacja 960)
  • Opcja optymalizacji: Poziom 2 (-O2)

Instrukcja użytkowania

Ten rozdział przedstawi przygotowanie środowiska dla kodu aplikacji „Module_UART”, a także etapy kompilacji i testowania.

Przygotowanie środowiska
Sprzęt i oprogramowanie wymagane dla kodu aplikacji „Module_UART” wymieniono poniżej.
Tabela 5. Przygotowanie środowiska sprzętu/oprogramowania 

Sprzęt/Oprogramowanie Liczyć Notatka
Zestaw startowy 1 Ta nota aplikacyjna wykorzystuje zestaw startowy HT32F52352 jako example
Kabel USB 1 Micro USB, podłączony do komputera
Kod aplikacji Ścieżka pobierania, file i konfiguracja katalogu są opisane w sekcji „Pobieranie i przygotowywanie zasobów”. Ścieżka: „\\application\Module_UART\UART_Module_Examp„
Termin Tera Patrz sekcja „Oprogramowanie terminala”.
Keil IDE Keil uVision V5.xx

Najpierw użyj zestawu startowego HT32F52352 w połączeniu z funkcją wirtualnego portu COM (VCP) e-Link32 Lite do wprowadzenia aplikacji UART. Wymaga to wdrożenia następujących przygotowań środowiskowych:

  1. Na płytce znajdują się dwa interfejsy USB. Użyj kabla USB, aby połączyć komputer PC z interfejsem eLink32 Lite na płycie, jak pokazano na rysunku 16-(a).
  2. Ponieważ kod aplikacji musi korzystać z funkcji e-Link32 Lite Virtual COM Port (VCP), upewnij się, że PAx*2 i DAP_Tx zworki UART Jumper-J2*1 zostały zwarte za pomocą zworki. Lokalizacja J2 jest wskazana na rysunku 16-(b).

Notatka

  1. J2 w zestawie startowym ma dwie opcje, zwarte PAx i DAP_Tx lub zwarte PAx i RS232_Tx. Szczegółowe informacje o funkcjach ustawień można znaleźć w instrukcji obsługi zestawu startowego.
  2. Położenie pinów MCU UART RX w różnych zestawach startowych jest różne. ten byłyample używa PAx do wskazania pinu RX.

Rysunek 16. Schemat blokowy zestawu startowego HT32
Schemat blokowy zestawu

Teraz użyj tablicy docelowej użytkownika w połączeniu z funkcją wirtualnego portu COM (VCP) e-Link32 Pro do wprowadzenia aplikacji UART. Wymaga to wdrożenia następujących przygotowań środowiskowych:

  1. Jedna strona e-Link32 Pro jest podłączona do komputera za pomocą kabla Mini USB, a druga strona jest podłączona do docelowej płyty użytkownika za pomocą 10-bitowego szarego kabla. Połączenie między interfejsami SWD kabla i płytki docelowej jest realizowane za pomocą linii Dupont, jak pokazano na rysunku 17-(a).
  2. Styki komunikacji szeregowej e-Link32 Pro to Pin#7 VCOM_RXD i Pin#8-VCOM_TXD. Powinny być one podłączone do styków TX i RX płytki docelowej użytkownika, jak pokazano na rysunku 17-(b).
    Rysunek 17. Schemat blokowy e-Link32 Pro + tablicy docelowej użytkownika
    Tablica docelowa użytkownika

Kompilacja i testowanie
Ta sekcja zajmie „application\Module_UART\UART_Module_Example” jako byłyample wprowadzić procesy kompilacji i testowania. Wcześniej należy upewnić się, że wszystkie przygotowania opisane w poprzednim rozdziale zostały wykonane oraz że zostało pobrane oprogramowanie terminala Tera Term.

Szczegółowe kroki operacji podsumowano poniżej.
Krok 1. Test włączenia

Skonfiguruj środowisko sprzętowe zgodnie z opisem w poprzedniej sekcji. Po włączeniu zaświeci się dioda LED zasilania D9 w lewym dolnym rogu zestawu startowego. Dioda LED USB D1 na urządzeniu e-Link32 Lite w prawym górnym rogu zaświeci się po zakończeniu wyliczania USB. Jeśli dioda D1 nie świeci się po dłuższym czasie, sprawdź, czy kabel USB może się komunikować. Jeśli nie, wyjmij go i włóż ponownie.

Krok 2. Wygeneruj projekt
Otwórz aplikację\Module_UART\UART_Module_Exampplik, kliknij plik _CreateProject.bat file aby wygenerować projekt, jak pokazano na rysunku 18. Ponieważ ta nota aplikacyjna używa zestawu startowego HT32F52352, otwórz projekt Keil IDE „Project_52352.uvprojx” znajdujący się w folderze MDK_ARMv5.

Rysunek 18. Wykonaj _CreateProject.bat, aby wygenerować projekt
Wygeneruj projekt

Krok 3. Skompiluj i zaprogramuj
Po otwarciu projektu najpierw kliknij „Buduj” (lub użyj skrótu „F7”), a następnie kliknij „Pobierz” (lub użyj skrótu „F8”). Następnie wyniki kompilacji i pobierania zostaną wyświetlone w oknie Build Output. Zobacz Ryc. 19.

Rysunek 19. Wyniki budowania i pobierania
Kompiluj i pobieraj wyniki

Krok 4. Otwórz oprogramowanie Tera Term i skonfiguruj port szeregowy
Otwórz oprogramowanie Tera Term i port COM. Zwróć uwagę, czy numer portu COM wygenerowany przez Zestaw Startowy jest poprawny, czy nie. Następnie kliknij „Setup >> Serial Port”, aby wejść do interfejsu konfiguracyjnego. Konfiguracja interfejsu UART kodu aplikacji „Module_UART” została opisana w rozdziale „Oprogramowanie terminala”. Wynik konfiguracji pokazano na rysunku 20.

Rysunek 20. Wynik konfiguracji portu szeregowego Tera Term
Wynik konfiguracji
Krok 5. Zresetuj system i przetestuj
Naciśnij klawisz resetowania SK – B1 Reset. Następnie komunikat „ABCTo jest test!” wiadomość będzie
przesyłane przez API i będą wyświetlane w oknie Tera Term, jak pokazano na Rysunku 21. Odnośnie funkcji odbierania, podczas wprowadzania danych do okna Tera Term, odpowiedni interfejs API będzie używany do określenia długości bufora odbioru. Gdy dane odebrane przez komputer osiągną 5 bajtów, odebrane 5 bajtów danych zostanie wysłanych sekwencyjnie. Jak pokazano na rysunku 22, sekwencyjnie wprowadzane dane to „1, 2, 3, 4, 5”, które są odbierane i określane przez interfejs API. Następnie dane „1, 2, 3, 4, 5” zostaną wydrukowane po pięciu wejściach.

Rysunek 21. Test funkcjonalny kodu aplikacji „Module_UART” – przesyłanie
Test funkcjonalny kodu aplikacji

Rysunek 22. Test funkcjonalny kodu aplikacji „Module_UART” — odbiór
Test funkcjonalny kodu aplikacji

Instrukcja przeszczepu
W tej sekcji przedstawiono sposób integracji interfejsów API z projektami użytkownika.
Krok 1. Dodaj uart_module.c file w projekt. Kliknij prawym przyciskiem myszy folder użytkownika. Wybierz „Dodaj istniejące Files do Group 'User'…”, a następnie wybierz uart_module.c file i kliknij „Dodaj”, jak pokazano na Rysunku 23. Zapoznaj się z sekcją „Struktura katalogów”, aby uzyskać file opis ścieżki.

Rysunek 23. Dodaj moduł uart_module.c File do Projektu
File do Projektu

Krok 2. Dodaj plik ring_buffer.c file w projekt. Kliknij prawym przyciskiem myszy folder użytkownika. Wybierz „Dodaj istniejące Files do Group 'User'…”, a następnie wybierz plik ring_buffer.c file i kliknij „Dodaj”, jak pokazano na Rysunku 24.\ Zapoznaj się z sekcją „Struktura katalogów”, aby uzyskać file opis ścieżki.
Rysunek 24. Dodaj plik ring_buffer.c File do Projektu 
File do Projektu

Krok 3. Dołącz nagłówek API file na początku pliku main.c, jak pokazano na rysunku 25. (Ext: #include „middleware/uart_module.h”)
Rysunek 25. Dołącz nagłówek API File do głównego c
Dołącz nagłówek API File

Krok 4. Zaimplementuj ustawienia wymagane do komunikacji UART za pomocą pliku ht32_board_config.h file. Zostało to szczegółowo opisane w sekcjach „Opis ustawień” oraz „Modyfikacja ustawień i często zadawane pytania”.

Modyfikacja ustawień i często zadawane pytania 

W tej sekcji opisano sposób modyfikowania ustawień UART i wyjaśniono niektóre często zadawane pytania podczas użytkowania.

Zmień przypisanie pinów UART 

  1. Odnosząc się do rozdziału „Przypisanie pinów” arkusza danych HT32F52352, wyszukaj tabelę mapowania funkcji alternatywnych, która zawiera listę funkcji AFIO typu urządzenia. Informacje na temat odpowiednich styków UART można znaleźć w kolumnie „AF6 USART/UART”, jak pokazano na rysunku 26.
    Rysunek 26. Tabela mapowania funkcji alternatywnych HT32F52352
    Alternatywna tabela mapowania funkcji
  2. Ten krok poprowadzi użytkowników do zlokalizowania odpowiednich pinów UART za pomocą powyższej tabeli. HT32F52352 npample używa USART1 jako kanału domyślnego. Tutaj piny TX i RX to USR1_TX i USR1_RX i znajdują się odpowiednio na PA4 i PA5. Rysunek 27 pokazuje zgodność pinów, jak również definicje pinów w „ht32_board_config.h”. Puste pola „Pakiet” w tabeli przypisania pinów oznaczają, że w tym pakiecie nie ma odpowiednich GPIO. Aby zmodyfikować piny UART, znajdź docelowe lokalizacje pinów i ponownie zdefiniuj piny za pomocą „ht32_board_config.h” file.
    Rysunek 27. Korespondencja pinów i modyfikacja ustawień
    Modyfikacja ustawień

Dodaj kanał UART
Biorąc HT32F52352 HTCFG_UARTM_CH1 jako example, tutaj jest opisane jak dodać nowy kanał UART.

Zmodyfikuj plik ht32_board_config.h file
Odnosząc się do rozdziału „Przypisanie pinów” arkusza danych HT32F52352, wyszukaj tabelę mapowania funkcji alternatywnych, która zawiera listę funkcji AFIO typu urządzenia. Ponieważ USART1 był używany jako HTCFG_UARTM_CH0, nowo dodany HTCFG_UARTM_CH1 może wybrać USART0. Tutaj piny TX i RX znajdują się odpowiednio na PA2 i PA3, jak pokazano w górnej połowie rysunku 28. Odpowiednie modyfikacje są realizowane przy użyciu linii kodu 120~126 w ht32_board_config.h, jak pokazano na czerwonym przerywanym polu na rysunku 28.

Rysunek 28. Dodaj kanał UART
Kanał UART

Często zadawane pytania
Q: W kroku 5 sekcji Kompilacja i testowanie, test funkcjonalny transmisji jest normalny. Tutaj „ABCTo jest test!” komunikat został pomyślnie wyświetlony, jednak dla funkcji odbierania, dlaczego pięć wartości wejściowych nie jest zwracanych i wyświetlanych?
A: Sprawdź, czy piny MCU UART RX i DAP_Tx w UART Jumper-J2 zostały zwarte za pomocą zworki. Ponieważ kod aplikacji „Module_UART” musi korzystać z wirtualnego portu COM (VCP) e-Link32 Lite, ustawienie zwarcia należy zastosować do dwóch lewych pinów zworki UART-J2, jak pokazano na rysunku 29.

Rysunek 29. Ustawienie zworki UART-J2
Zworka UART

P: Po wykonując „Build” (lub skrót „F7”), pojawia się komunikat o błędzie wskazujący, że wersja biblioteki oprogramowania układowego jest starsza niż wymagana? Patrz Rysunek 30.
A: Implementacja kodu aplikacji „Module_UART” musi zawierać plik uart_module.c/h files, który wymaga określonej wersji biblioteki oprogramowania układowego. Gdy pojawi się taki komunikat o błędzie, oznacza to, że obecnie używana biblioteka oprogramowania układowego jest starszą wersją. Dlatego konieczne jest pobranie najnowszej wersji za pośrednictwem łącza podanego w sekcji „Firmware Library”.

Rysunek 30. Komunikat o błędzie wersji biblioteki oprogramowania układowego
Komunikat o błędzie wersji

Wniosek

Ten dokument zawiera podstawowe wprowadzenie, aby pomóc użytkownikom w lepszym zrozumieniu kodu aplikacji „Module_UART” i protokołu komunikacyjnego UART. Następnie pobierano i przygotowywano zasoby. Rozdział Opis funkcjonalny wprowadził file struktura katalogów, architektura API, opis API i wykorzystanie API npamples. W rozdziale Instrukcje użytkowania przedstawiono przygotowanie środowiska, kompilację i testowanie kodu aplikacji „Module_UART”. Zawiera również instrukcje dotyczące przeszczepiania kodu i ustawiania modyfikacji, a także wyjaśnia niektóre typowe problemy, które mogą wystąpić. Wszystko to razem pozwoli użytkownikom szybko zrozumieć, jak korzystać z interfejsów API, a następnie skrócić czas potrzebny na rozpoczęcie pracy.

Materiał referencyjny

Aby uzyskać więcej informacji, zapoznaj się z Holtek webstrona: www.holtek.com

Wersje i informacje o modyfikacjach

Data Autor Uwolnienie Informacje o modyfikacji
2022.04.30 蔡期育 (Chi-Yu Tsai) V1.00 Pierwsza wersja

Zastrzeżenie

Wszystkie informacje, znaki towarowe, logo, grafiki, filmy, klipy audio, linki i inne elementy pojawiające się na tej stronie web("Informacje") służą wyłącznie do celów informacyjnych i mogą ulec zmianie w dowolnym momencie bez uprzedniego powiadomienia i według uznania Holtek Semiconductor Inc. i powiązanych z nią firm (zwanych dalej "Holtek", "firma", "nas", " my” lub „nasze”). Chociaż Holtek dokłada wszelkich starań, aby zapewnić dokładność Informacji na ten temat, webwitryny, firma Holtek nie udziela żadnej wyraźnej ani dorozumianej gwarancji co do dokładności Informacji. Holtek nie ponosi odpowiedzialności za jakiekolwiek nieprawidłowości lub wycieki.
Holtek nie ponosi odpowiedzialności za jakiekolwiek szkody (w tym między innymi wirusy komputerowe, problemy systemowe lub utratę danych) powstałe w wyniku korzystania lub w związku z korzystaniem z tego webprzez jakąkolwiek stronę. W tym obszarze mogą znajdować się linki, które umożliwiają odwiedzenie strony webstrony innych firm.
Te webwitryny nie są kontrolowane przez Holtek. Holtek nie ponosi żadnej odpowiedzialności ani gwarancji za jakiekolwiek informacje wyświetlane w takich witrynach. Hiperłącza do innych webwitryny są na własne ryzyko.

Ograniczenie odpowiedzialności

W żadnym przypadku firma Holtek Limited nie będzie ponosić odpowiedzialności wobec jakiejkolwiek innej strony za jakiekolwiek straty lub szkody w jakikolwiek sposób spowodowane bezpośrednio lub pośrednio w związku z dostępem lub korzystaniem z tej webwitryny, jej treści lub jakichkolwiek towarów, materiałów lub usług.

Prawo właściwe
Zastrzeżenie zawarte w webstrona podlega i jest interpretowana zgodnie z prawem Republiki Chińskiej. Użytkownicy poddadzą się niewyłącznej jurysdykcji sądów Republiki Chińskiej.

Aktualizacja wyłączenia odpowiedzialności
Holtek zastrzega sobie prawo do aktualizacji Zastrzeżenia w dowolnym momencie, z uprzednim powiadomieniem lub bez, wszystkie zmiany wchodzą w życie natychmiast po opublikowaniu w webstrona.

Dokumenty / Zasoby

Uwaga aplikacyjna HOLTEK HT32 MCU UART [plik PDF] Instrukcja obsługi
HT32 MCU, Nota aplikacyjna UART, HT32 MCU UART, Nota aplikacyjna, HT32, Nota aplikacyjna MCU UART, Nota aplikacyjna HT32 MCU UART

Odniesienia

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *