HOLTEK HT32 MCU UART Nota aplikacyjna Instrukcja obsługi
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
Rysunek 2. 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
Rysunek 4. 8-bitowy format pakietu danych UART
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
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/
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ść
Rysunek 8. Ś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:
- 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.
- 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”.
- 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
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:
- Obsługiwane są do czterech kanałów UART. Ich parametry wejściowe to UARTM_CH0, UARTM_CH1, UARTM_CH2 i UARTM_CH3.
- Liczbę kanałów UART można ustawić, a niewykorzystane kanały nie zmniejszą dostępnej pamięci.
- 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.
- 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)
- 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
Opis interfejsu API
- 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
- USART_InitTypeDef
- 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
- 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
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
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
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:
- Zmienne globalne, w tym flagi i statusy dla pojedynczego kanału zajmują 40 bajtów pamięci RAM.
- 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:
- 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).
- 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
- 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.
- 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
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:
- 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).
- 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
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
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
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
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
Rysunek 22. Test funkcjonalny kodu aplikacji „Module_UART” — odbiór
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
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
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
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
- 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
- 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ń
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
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
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
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 |