HOLTEK HT32 MCU UART Application Note Manual de utilizare
Introducere
Receptor/Transmițător asincron universal – UART este o interfață de transmisie serială utilizată pe scară largă, care oferă transmisie de date full-duplex asincronă flexibilă. Codul aplicației „Module_UART” furnizat în această notă de aplicație folosește întreruperi TX/RX cu buffer-uri de inel software pentru a implementa funcții simple de transmitere/recepție UART prin intermediul API-urilor, ale căror funcții aferente sunt descrise mai jos. Acest lucru va simplifica întregul proces de transmitere a datelor și va permite utilizatorilor să înțeleagă și să implementeze rapid aplicațiile de comunicație UART.
- Funcții de transmitere/recepție: citire octet, scriere în octet, citire în buffer, scriere în buffer etc.
- Funcții de stare: obțineți lungimea tamponului, starea TX etc.
Acest document va introduce mai întâi protocolul de comunicare UART, care va ajuta utilizatorii să înțeleagă mai bine comunicarea UART de la principiu la aplicație. Aceasta este urmată de descărcarea și pregătirea resurselor necesare pentru codul aplicației, inclusiv biblioteca de firmware, descărcarea codului aplicației, file și configurarea directoarelor, precum și o introducere în instrumentul software terminal utilizat în nota de aplicație. În capitolul Descriere funcțională, vor fi introduse structura directorului codului aplicației, setările parametrilor și descrierea API. Utilizarea API-ului va fi descrisă folosind codul aplicației „Module_UART” și va fi de asemenea listat consumul de resurse Flash/RAM necesar pentru API-uri. Capitolul Instrucțiuni de utilizare va ghida utilizatorul prin pașii de pregătire a mediului, compilare și testare pentru a confirma că codul aplicației va funcționa corect. Apoi va oferi instrucțiuni care explică modul de integrare a API-urilor în proiectele utilizatorului și, în final, va oferi o referință pentru modificări și probleme comune care pot fi întâlnite.
Abrevieri utilizate:
- UART-uri: Receptor/emițător asincron universal
- API: Interfață de programare a aplicației
- LSB: Bit cel mai puțin semnificativ
- MSB: Cel mai semnificativ bit
- PC: Computer personal
- SK: Kit de pornire, placă de dezvoltare HT32
- IDE: Mediul de dezvoltare integrat
Protocolul de comunicare UART
UART este un tip de interfață de comunicație serială care implementează conversia datelor paralel-serial la transmițătorul său și apoi comunică în serie cu un receptor similar. Receptorul efectuează apoi o conversie de date serial în paralel după recepția datelor. Figura 1 prezintă o diagramă schematică a comunicației seriale care arată modul în care datele sunt transferate într-o ordine pe biți. Prin urmare, pentru comunicarea bidirecțională între transmițător și receptor, sunt necesare doar două fire, TX și RX, pentru a transfera datele în serie între ele. TX este pinul pe care UART transmite datele seriale și este conectat la pinul RX al receptorului. Prin urmare, dispozitivele transmițător și receptor trebuie să-și conecteze pinii TX și RX pentru a realiza comunicația bidirecțională UART, așa cum se arată în Figura 2.
Figura 1. Diagrama de comunicare în serie
Figura 2. Diagrama circuitului UART
În timpul comunicației seriale UART, transmisia datelor este asincronă. Aceasta înseamnă că nu există ceas sau alt semnal de sincronizare între emițător și receptor. Aici este utilizată o viteză de transmisie, care este viteza de transmitere/recepție a datelor în serie și care este setată de ambele părți înainte de transferul de date. În plus, biți speciali, cum ar fi biții de pornire și oprire, sunt adăugați la începutul și la sfârșitul pachetului de date pentru a forma un pachet de date UART complet. Figura 3 arată structura pachetului de date UART, în timp ce Figura 4 prezintă un pachet de date UART pe 8 biți fără un bit de paritate.
Figura 3. Structura pachetului de date UART
Figura 4. Format de pachet de date UART pe 8 biți
Fiecare parte a pachetului de date UART este introdusă în ordine de mai jos.
- Bit de pornire: Aceasta indică începutul unui pachet de date. Pinul UART TX rămâne de obicei la un nivel logic ridicat înainte de a începe transmisia. Dacă pornește transmisia de date, transmițătorul UART va trage pinul TX de la mare la cel mic, adică de la 1 la 0, și apoi îl va ține acolo pentru un ciclu de ceas. Receptorul UART va începe să citească datele atunci când a fost detectată o tranziție mare spre scăzută pe pinul RX.
- Date: Acestea sunt datele efectiv transferate, cu o lungime a datelor de 7, 8 sau 9 biți. De obicei, datele sunt transferate mai întâi cu LSB.
- Bit de paritate: Numărul logic „1” din date este utilizat pentru a determina dacă vreo dată s-a schimbat în timpul transmisiei. Pentru paritatea pară, numărul total de logic „1” din date ar trebui să fie un număr par, dimpotrivă, numărul total de logic „1” din date ar trebui să fie un număr impar pentru paritatea impară.
- Bit de oprire: Aceasta indică sfârșitul unui pachet de date, în care transmițătorul UART va trage pinul TX de la scăzut la înalt, adică de la 0 la 1, și apoi îl va menține acolo pentru o perioadă de timp de 1 sau 2 biți.
După cum sa menționat anterior, deoarece nu există semnal de ceas în circuitul UART, aceeași viteză de transmisie/recepție a datelor seriale, cunoscută sub numele de rată de transmisie, trebuie definită între transmițător și receptor pentru a implementa o transmisie fără erori. Rata baud este definită de numărul de biți transferați pe secundă, în bps (bit pe secundă). Unele rate de baud standard și utilizate în mod obișnuit sunt 4800bps, 9600bps, 19200bps, 115200bps etc. Timpul corespunzător necesar pentru transferul unui singur bit de date este afișat mai jos.
Tabelul 1. Rata de transmisie în raport cu timpul de transmisie pe 1 bit
Baud Rate | Transmisie pe 1 bit Timp |
4800 bps | 208.33µs |
9600 bps | 104.16µs |
19200 bps | 52.08µs |
115200 bps | 8.68µs |
Descărcarea și pregătirea resurselor
Acest capitol va prezenta codul aplicației și instrumentul software utilizat, precum și modul de configurare a directorului și file cale.
Biblioteca de firmware
În primul rând, asigurați-vă că biblioteca de firmware Holtek HT32 a fost descărcată înainte de a utiliza codul aplicației. Linkul de descărcare este afișat mai jos. Aici există două opțiuni, HT32_M0p_Vyyyymmdd.zip pentru seria HT32F5xxxx și HT32_M3_Vyyyymmdd.zip pentru seria HT32F1xxxx. Descărcați și dezarhivați cel dorit file.
Fermoarul file conține mai multe foldere care pot fi clasificate ca Document, Biblioteca de firmware, Instrumente și alte elemente, a căror cale de plasare este prezentată în Figura 5. Biblioteca de firmware HT32 zip file cu a file numele HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip se află sub folderul Firmware_Library.
Figura 5. Cuprins HT32_M0p_Vyyyymmdd.zip
Cod aplicație
Descărcați codul aplicației de la următorul link. Codul aplicației este ambalat într-un zip file cu a file numele HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Vedea Figura 6 pentru file convenții de nume.
Figura 6. Codul aplicației File Nume Introducere
Link de descărcare: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/
File și Configurare director
Deoarece codul aplicației nu conține biblioteca de firmware HT32 files, codul aplicației și biblioteca de firmware dezarhivate files ar trebui să fie plasate în calea corectă înainte de a începe compilarea. Codul aplicației zip file de obicei, conține unul sau mai multe foldere, cum ar fi aplicația și biblioteca, așa cum se arată în Figura 7. Plasați folderul aplicației sub directorul rădăcină al bibliotecii de firmware HT32 pentru a finaliza file configurația căii, așa cum se arată în Figura 8. Alternativ, dezarhivați codul aplicației și biblioteca de firmware HT32 simultan în aceeași cale pentru a obține aceleași rezultate de configurare.
Figura 7. HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip Conținut
Figura 8. Calea de decompresie
Software terminal
Codul aplicației poate transfera mesaje prin portul COM pentru a implementa selectarea funcției sau afișarea stării. Acest lucru necesită ca partea gazdă să aibă software-ul terminalului instalat în prealabil. Utilizatorii pot alege software-ul de conexiune adecvat sau pot folosi software gratuit cu licență, cum ar fi Tera Term. În codul aplicației, canalul UART este configurat cu o lungime a cuvântului de 8 biți, fără paritate, 1 bit de oprire și o rată de transmisie de 115200 bps.
Descrierea funcțională
Acest capitol va oferi o descriere funcțională pentru codul aplicației, inclusiv informații despre structura directorului, arhitectura API, descrierea setărilor etc.
Structura directorului
Codul aplicației file conține un folder de aplicație. Următorul strat este folderul „Module_UART” care conține două programe de aplicație, „UART_Module_Example” și „UART_Bridge”. Cel relevant filesunt enumerate și descrise mai jos.
Tabelul 2. Structura directorului codului aplicației
Folder / File Nume | Descriere |
\\application\Module_UART\UART_Module_Example*1 | |
_CreateProject.bat | Scripturi în lot pentru crearea proiectului files |
_ProjectSource.ini | Inițializare file pentru adăugarea codului sursă la proiecte |
ht32_board_config.h | Înființat file legate de alocarea I/O periferice IC |
ht32fxxxxx_01_it.c | Întreruperea programului de service file |
principal.c | Codul sursă al programului principal |
\\application\Module_UART\UART_Bridge*2 | |
_CreateProject.bat | Scripturi în lot pentru crearea proiectului files |
_ProjectSource.ini | Inițializare file pentru adăugarea codului sursă la proiecte |
ht32_board_config.h | Înființat file legate de alocarea I/O periferice IC |
ht32fxxxxx_01_it.c | Întreruperea programului de service file |
principal.c | Codul sursă al programului principal |
uart_bridge.h uart_bridge.c | Antet punte UART file și codul sursă file |
\\utilități\middleware | |
uart_module.h*3 uart_module.c*3 | Antetul API file și codul sursă file |
\\utilități\comune | |
ringbuffer.h ring_buffer.c | Antet tampon de inel software file și codul sursă file |
Nota:
- În „UART_Module_Example”, operațiunile de citire și scriere API sunt efectuate într-o manieră loopback, consultați „Ex.amples” pentru mai multe detalii.
- În codul aplicației „UART_Bridge”, sunt activate două canale UART, UART CH0 și UART CH1, iar protocolul de comunicare personalizat prin structurile COMMAND este implementat între cele două dispozitive UART. Pentru mai multe informații, consultați „Ex. de utilizare APIampsecțiunea „les”.
- Codul aplicației trebuie să utilizeze uart_module.c/h files care au o cerință de versiune a bibliotecii de firmware. Cerința se poate schimba din când în când în funcție de actualizare. Pentru a confirma cerința actuală a versiunii bibliotecii de firmware, consultați conținutul de verificare a dependenței căutând cuvântul cheie „Verificarea dependenței” în principal.c file. Dacă versiunea bibliotecii de firmware nu îndeplinește cerințele, descărcați cea mai nouă versiune de la linkul furnizat în secțiunea „Biblioteca de firmware”.
Arhitectura API
Fiecare API are un parametru important CH, care este canalul UART. Aceasta determină ce canal UART urmează să fie controlat. În prezent, sunt acceptate până la patru canale UART și, prin urmare, patru simboluri constante sunt definite după cum urmează. Acestea sunt utilizate ca parametru CH, oferind API-urilor baza pentru control.
- UATM_CH0: parametru de intrare – controlează sau configura UART CH0
- UATM_CH1: parametru de intrare – controlează sau configura UART CH1
- UATM_CH2: parametru de intrare – controlează sau configura UART CH2
- UATM_CH3: parametru de intrare – controlează sau configura UART CH3
Spațiul de memorie nu va fi irosit dacă este utilizat un singur canal UART. Acest lucru se datorează faptului că numărul de canale UART acceptate poate fi setat și codul canalului UART neutilizat va fi eliminat de preprocesor pentru a crește spațiul de memorie disponibil. Arhitectura API este prezentată în Figura 9.
Figura 9. Diagrama bloc al arhitecturii API
Fiecare API este compus din patru grupuri de setări sau comenzi legate de canalul UART, astfel încât utilizatorii trebuie să introducă doar parametrul CH dorit. Pentru a configura API-ul relevant, este necesar doar să aveți un tabel suplimentar de parametri de configurare de bază UART cu formularul de structură, USART_InitTypeDef. API-ul va implementa configurația de bază UART conform conținutului parametrilor din tabel. Consultați secțiunea „Descrierea API” pentru tabelul structurii de configurare de bază UART.
Modulul uart_module.c/.h fileE-urile conțin doar întreruperea (CHx_IRQ) și tabelul de stare (CHx Status) pentru fiecare canal UART, în timp ce toate setările necesare pentru comunicarea UART sunt furnizate de ht32_board_config.h. Parametrii relevanți hardware din ht32_board_config.h file sunt prezentate în tabelul de mai jos. Mai multe detalii sunt furnizate în secțiunea „Descrierea setărilor”.
Parametrii relevanți hardware din ht32_board_config.h includ setările I/O și setările portului UART fizic, după cum urmează.
Tabelul 3. Definiții Simboluri în ht32_board_config.h
Simbol | Descriere |
HTCFG_UARTM_CH0 | Numele portului UART fizic; Example: UART0, UART1... |
HTCFG_UARTM0_TX_GPIO_PORT | Definește numele portului TX pentru CH0; Example: A, B, C... |
HTCFG_UARTM0_TX_GPIO_PIN | Definește numărul de pin al TX pentru CH0; Example: 0~15 |
HTCFG_UARTM0_RX_GPIO_PORT | Definește numele portului RX pentru CH0; Example: A, B, C... |
HTCFG_UARTM0_RX_GPIO_PIN | Definește numărul de pin al TX pentru CH0; Example: 0~15 |
HTCFG_UARTM0_TX_BUFFER_SIZE | Definește dimensiunea tamponului TX pentru CH0; Exampanul: 128 |
HTCFG_UARTM0_RX_BUFFER_SIZE | Definește dimensiunea bufferului RX pentru CH0; Exampanul: 128 |
Pentru a modifica configurația AFIO a canalului UART, consultați fișa tehnică relevantă a dispozitivului. În prezent, doar definițiile I/O pentru UART CH0 au efecte, deoarece numai UART CH0 a fost configurat în ht32_board_config.h. Pentru a adăuga UART CH1 ~ 3, definițiile lor I/O trebuie completate prin referire la definiția UART CH0 sau referindu-se la secțiunea „Modificarea setărilor și întrebări frecvente”.
Există trei caracteristici principale ale arhitecturii API:
- Sunt acceptate până la patru canale UART. Parametrii lor de intrare sunt UARTM_CH0, UARTM_CH1, UARTM_CH2 și UARTM_CH3.
- Numărul de canale UART poate fi setat, iar canalele neutilizate nu vor reduce spațiul de memorie disponibil.
- Toate setările UART și definițiile I/O sunt complet separate de API-uri. Acest lucru crește confortul de gestionare a setării valorilor și reduce posibilitatea setărilor incorecte sau lipsă.
Setare Descriere
Această secțiune va introduce setările parametrilor în ht32_board_config.h și uart_module.h files.
- ht32_board_config.h: Aceasta file este utilizat pentru definițiile pin și setările relevante ale plăcii de dezvoltare, care includ canalul IP UART (UART0, UART1, USART0...) utilizat de Starter Kit (SK), locațiile corespunzătoare ale pinurilor TX/RX și dimensiunea bufferului TX/RX. Figura 10 arată conținutul setărilor setului de pornire HT32F52352. În funcție de integrarea funcțională a dezvoltării, utilizatorii se pot referi la secțiunea „Atribuire pin” din fișa de date a dispozitivului utilizat pentru a implementa definițiile pin. Mai multe detalii despre modificarea setărilor vor fi descrise în secțiunea „Modificarea setărilor și întrebări frecvente”.
Figura 10. Setări ht32_board_config.h (HT32F52352)
- uart_module.h: Acesta este antetul API file utilizat de codul aplicației, care include setările implicite relevante, definițiile funcțiilor etc. După cum se arată în Figura 11, conținutul setărilor implicite poate fi suprascris de configurații externe, cum ar fi setările din ht32_board_config.h file.
Figura 11. Setări implicite în uart_module.h
Descriere API
- Descrierea tipului de date codul aplicației.
- USART_InitTypeDef
Aceasta este structura de configurare de bază a UART, care este compusă din configurații BaudRate, WordLength, StopBits, Parity și Mode, după cum se arată mai jos.Variabilă Nume Tip Descriere USART_BaudRate u32 Rata baud de comunicare UART USART_WordLength u16 Lungimea cuvântului de comunicare UART: 7, 8 sau 9 biți USART_StopBits u16 Lungimea biților de oprire a comunicației UART: 1 sau 2 biți USART_Parity u16 Paritate de comunicare UART: par, impar, marca, spațiu sau fără paritate USART_Mode u16 modul de comunicare UART; API-urile acceptă doar modul normal
- USART_InitTypeDef
- Înainte de a utiliza funcțiile API, finalizați configurația de bază UART în programul principal. Configurația de bază UART pentru acest cod de aplicație este prezentată în Figura 12. Aici viteza de transmisie este de 115200 bps, lungimea cuvântului este de 8 biți, lungimea bitului de oprire este de 1 bit și nu există paritate.
Figura 12. Configurație de bază UART
- Figura 13 prezintă funcțiile API declarate în uart_module.h file. Următoarele tabele explică funcția, parametrii de intrare și utilizarea funcțiilor API.
Figura 13. Declarații de funcție API în uart_module.h
Nume | void UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue) | |
Funcţie | Inițializarea modulului UART | |
Intrare | CH | Canalul UART |
pUART_Init | Pointerul structurii configurației de bază UART | |
uRxTimeOutValue | Valoarea de expirare a UART RX FIFO. Când RX FIFO primește date noi, contorul se va reseta și va reporni. Odată ce contorul atinge valoarea de time-out prestabilită și întreruperea time-out corespunzătoare a fost activată, va fi generată o întrerupere time-out. | |
Utilizare | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Execută configurația de bază UART//Consultați Figura 12 pentru configurația USART_InitStructure |
Nume | u32 UARTM_WriteByte(u32 CH, u8 uData) | |
Funcţie | Operațiunea de scriere a octeților din modulul UART (TX) | |
Intrare | CH | Canalul UART |
uData | Datele de scris | |
Ieșire | SUCCES | De succes |
EROARE | A eșuat | |
Utilizare | UARTM_WriteByte(UARTM_CH0, 'A'); //UART scrie 1 octet – „A” |
Nume | u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLength) | |
Funcţie | Operație de scriere a modulului UART (TX) | |
Intrare | CH | Canalul UART |
pBuffer | Indicator tampon | |
uLungime | Lungimea datelor de scris | |
Ieșire | SUCCES | De succes |
EROARE | A eșuat | |
Utilizare | u8 Test[] = „Acesta este testul!\r\n”; UARTM_Write(UARTM_CH0, Test, sizeof(Test) -1); //UART scrie date pBuffer |
Nume | u32 UARTM_ReadByte(u32 CH, u8 *pData) | |
Funcţie | Modul UART citire operare octet (RX) | |
Intrare | CH | Canalul UART |
pDate | Adresa pentru a plasa datele citite | |
Ieșire | SUCCES | De succes |
EROARE | A eșuat (fără date) | |
Utilizare | u8 TempData; dacă (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCES){UARTM_WriteByte(UARTM_CH0, TempData);}//Dacă UARTM_ReadByte() returnează SUCCES, atunci UART scrie acest octet de date |
Nume | u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLength) | |
Funcţie | Operațiune de citire a modulului UART (RX) | |
Intrare | CH | Canalul UART |
pBuffer | Indicator tampon | |
uLungime | Lungimea datelor de citit | |
Ieșire | Numărul de citiri | Lungimea datelor a fost citită |
Utilizare | u8 Test2[10]; u32 Len; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() citește 5 octeți de date și stochează date în Test2 și atribuie numărul de octeți citiți la Len//Scrieți datele provenite din Test2 |
Nume | u32 UARTM_GetReadBufferLength(u32 CH) | |
Funcţie | Obțineți lungimea tamponului de citire (RX) | |
Intrare | CH | Canalul UART |
Ieșire | uLungime | Citiți lungimea tamponului |
Utilizare | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //Inițializarea modulului UART în timp ce (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Așteptați până când UARTM_ReadBuffer a primit 5 octeți de date |
Nume | u32 UARTM_GetWriteBufferLength(u32 CH) | |
Funcţie | Obțineți lungimea tamponului de scriere (TX) | |
Intrare | CH | Canalul UART |
Ieșire | uLungime | Scrieți lungimea tamponului |
Nume | u8 UARTM_IsTxFinished(u32 CH) | |
Funcţie | Obține starea TX | |
Intrare | CH | Canalul UART |
Ieșire | ADEVĂRAT | Stare TX: terminat |
FALS | Stare TX: neterminat | |
Utilizare | UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // „uart_module.c” SVN >= 525 requiredwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //Acest API poate fi folosit pentru a verifica starea TX, așa cum se arată mai sus; așteptați până când API-ul UARTM_WriteByte() s-a terminat, adică starea TX este TRUE, apoi continuați acțiunile ulterioare.//Se adaugă o restricție deoarece această funcție nu a fost adăugată până când numărul versiunii SVN din uart_module.c este 525. |
Nume | gol UARTM_DiscardReadBuffer(u32 CH) | |
Funcţie | Aruncă datele din memoria tampon de citire | |
Intrare | CH | Canalul UART |
Utilizare API Examples
Această secțiune va demonstra scrierea și citirea API exampfișierele codului aplicației „Module_UART” folosind procesul de inițializare și „UART_Module_Example” procesul de cod al aplicației. Înainte de a utiliza API-urile, utilizatorii trebuie să includă antetul API-ului file în codul sursă al programului principal file (#include „middleware/uart_module.h”).
După cum se arată în Figura 14, atunci când intrați în procesul de inițializare, definiți mai întâi structura de configurare de bază a UART. Apoi configurați membrii structurii de configurare de bază UART, inclusiv BaudRate, WordLength, StopBits, Parity și Mode. În cele din urmă, apelați funcția de inițializare API, a cărei finalizare indică sfârșitul procesului de inițializare. După aceasta, utilizatorii pot continua operațiunile de scriere și citire pe baza configurației de bază UART prestabilite.
Figura 14. Diagramă de inițializare
Modulul „UART_Module_Exampcodul aplicației le” demonstrează operațiunile de citire și scriere API într-o manieră loopback. Diagrama de flux pentru aceasta este prezentată în Figura 15. Funcțiile API utilizate includ UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() și UARTM_GetReadBufferLength(). Descrierea acestora este furnizată în secțiunea „Descrierea API”.
Figura 15. Diagramă de scriere și citire Examples
Există un alt cod de aplicație „UART_Bridge” sub folderul „Module_UART” al cărui cod este asociat file descrierea este introdusă în secțiunea „Structura directorului”. Codul aplicației „UART_Bridge” activează două canale UART, UART CH0 și UART CH1, iar apoi personalizează protocolul de comunicare între cele două dispozitive UART prin structuri COMMAND, gCMD1 și gCMD2. Acestea sunt definite în uart_bridge.c, după cum se arată mai jos. UARTBridge_CMD1TypeDef gCMD1:
Variabilă Nume | Tip | Descriere |
uHeader | u8 | Antet |
uCmd | u8 | Comanda |
uData[3] | u8 | Date |
UARTBridge_CMD2TypeDef gCMD2:
Variabilă Nume | Tip | Descriere |
uHeader | u8 | Antet |
uCmdA | u8 | Comandamentul A |
uCmdB | u8 | Comanda B |
uData[3] | u8 | Date |
În codul aplicației „UART_Bridge”, utilizați gCMD1 pentru a primi date ca pachet de comandă și apoi analizați-l. Apoi, conform protocolului de comunicare personalizat, setați gCMD2 ca pachet de răspuns și transmiteți-l. Următorul este un exampfișierul unui pachet de comandă gCMD1) și un pachet de răspuns (gCMD2). Pachet de comandă (UARTBridge_CMD1TypeDef gCMD1):
Octet 0 | Octet 1 | Octetul 2 ~ Octetul 4 |
uHeader | uCmd | uData [3] |
"O" | „1” | „x, y, z” |
Pachet de răspuns (UARTBridge_CMD2TypeDef gCMD2):
Octet 0 | Octet 1 | Octet 2 | Octetul 3 ~ Octetul 5 |
uHeader | uCmdA | uCmdB | uData [3] |
„B” | "o" | „1” | „x, y, z” |
Ocuparea resurselor
Luând HT32F52352 ca example, resursele ocupate de modulul UART sunt prezentate mai jos.
HT32F52352 | |
Dimensiunea ROM | 946 octeți |
Dimensiunea RAM | 40*1 + 256*2 octeți |
Nota:
- Variabilele globale, inclusiv steaguri și starea pentru un singur canal, ocupă 40 de octeți de RAM.
- Aceasta este pentru o condiție în care este utilizat un singur canal și dimensiunea bufferului TX/RX este de 128/128 de octeți. Dimensiunea tamponului poate fi setată în funcție de cerințele aplicației.
Tabelul 4. Codul aplicației Ocupația resurselor
- Mediu de compilare: Actualizarea MDK-Arm V5.36, ARMCC V5.06 7 (build 960)
- Optimizare optiune: Nivelul 2 (-O2)
Instrucțiuni de utilizare
Acest capitol va prezenta pregătirea mediului pentru codul aplicației „Module_UART”, precum și etapele de compilare și testare.
Pregătirea mediului
Hardware-ul și software-ul necesar pentru codul aplicației „Module_UART” sunt enumerate mai jos.
Tabelul 5. Hardware/Software Pregătirea mediului
Hardware/Software | Conta | Nota |
Kit de pornire | 1 | Această notă de aplicație folosește setul de pornire HT32F52352 ca exempluample |
Cablu USB | 1 | Micro USB, conectat la PC |
Cod aplicație | — | Calea de descărcare, file și configurația directorului sunt introduse în secțiunea „Descărcare și pregătire a resurselor”. Cale: „\\application\Module_UART\UART_Module_Examp" |
Tera Termen | — | Consultați secțiunea „Software terminal”. |
Keil IDE | — | Keil uVision V5.xx |
În primul rând, utilizați setul de pornire HT32F52352 combinat cu funcția Virtual COM Port (VCP) a e-Link32 Lite pentru introducerea aplicației UART. Acest lucru necesită implementarea următoarei pregătiri de mediu:
- Există două interfețe USB pe placă. Utilizați cablul USB pentru a conecta computerul și interfața eLink32 Lite de pe placă, așa cum se arată în Figura 16-(a).
- Deoarece codul aplicației trebuie să utilizeze funcția e-Link32 Lite Virtual COM Port (VCP), asigurați-vă că PAx*2 și DAP_Tx ale UART Jumper-J2*1 au fost scurtcircuitate folosind un jumper. Locația J2 este indicată de Figura 16-(b).
Nota
- J2 de pe Starter Kit are două opțiuni, PAx și DAP_Tx scurtcircuitate sau PAx și RS232_Tx scurtcircuitat. Consultați manualul de utilizare al setului de pornire pentru funcțiile detaliate de setare.
- Locația pinului MCU UART RX pe diferite kituri de pornire este diferită. Acest example folosește PAx pentru a indica pinul RX.
Figura 16. Diagrama bloc al setului de pornire HT32
Acum utilizați placa țintă utilizator combinată cu funcția Virtual COM Port (VCP) a e-Link32 Pro pentru introducerea aplicației UART. Acest lucru necesită implementarea următoarei pregătiri de mediu:
- O parte a e-Link32 Pro este conectată la un computer folosind un cablu Mini USB, iar cealaltă parte este conectată la placa țintă a utilizatorului prin cablul său gri de 10 biți. Conexiunea dintre interfețele SWD ale cablului și placa țintă este implementată folosind linii Dupont, așa cum se arată în Figura 17-(a).
- Pinii de comunicare serială ai e-Link32 Pro sunt Pin#7 VCOM_RXD și Pin#8-VCOM_TXD. Acestea trebuie conectate la pinii TX și RX ai plăcii țintă a utilizatorului, așa cum se arată în Figura 17-(b).
Figura 17. Diagrama bloc e-Link32 Pro + User Target Board
Compilare și testare
Această secțiune va prelua „application\Module_UART\UART_Module_Example” ca example pentru a introduce procesele de compilare și testare. Înainte de aceasta, asigurați-vă că toate pregătirile descrise în secțiunea anterioară au fost implementate și că software-ul terminalului Tera Term a fost descărcat.
Pașii de operare detaliați sunt rezumați mai jos.
Pasul 1. Test de pornire
Configurați mediul hardware așa cum este descris în secțiunea anterioară. După pornire, LED-ul de alimentare D9 din partea stângă jos a setului de pornire se va aprinde. LED-ul USB D1 de pe e-Link32 Lite din dreapta sus se va aprinde după finalizarea enumerarii USB. Dacă D1 nu este aprins după o perioadă lungă de timp, confirmați dacă cablul USB este capabil să comunice. Dacă nu, scoateți-l și reintroduceți-l din nou.
Pasul 2. Generați un proiect
Deschideți aplicația\Module_UART\UART_Module_Exampfolderul, faceți clic pe _CreateProject.bat file pentru a genera un proiect, așa cum se arată în Figura 18. Deoarece această notă de aplicație folosește kitul de pornire HT32F52352, deschideți proiectul Keil IDE „Project_52352.uvprojx” aflat sub folderul MDK_ARMv5.
Figura 18. Executați _CreateProject.bat pentru a genera proiect
Pasul 3. Compilați și programați
După ce proiectul a fost deschis, faceți mai întâi clic pe „Build” (sau utilizați comanda rapidă „F7”), apoi faceți clic pe „Descărcare” (sau utilizați comanda rapidă „F8”). După aceasta, rezultatele construirii și descărcării vor fi afișate în fereastra Build Output. Vezi Figura 19.
Figura 19. Rezultate Build and Download
Pasul 4. Deschideți software-ul Tera Term și configurați portul serial
Deschideți software-ul Tera Term și portul COM. Fiți atenți dacă numărul portului COM generat de Starter Kit este corect sau nu. Apoi faceți clic pe „Setup >> Serial Port” pentru a intra în interfața de configurare. Configurația interfeței UART a codului aplicației „Module_UART” este descrisă în secțiunea „Software terminal”. Rezultatul instalării este prezentat în Figura 20.
Figura 20. Rezultatul configurarii portului serial Tera Term
Pasul 5. Resetați sistemul și testați
Apăsați tasta de resetare SK – B1 Resetare. După aceasta, un „ABCThis este test!” mesajul va fi
transmis prin API și va fi afișat în fereastra Tera Term, așa cum se arată în Figura 21. În ceea ce privește funcția de primire, la introducerea datelor în fereastra Tera Term, API-ul relevant va fi folosit pentru a determina lungimea bufferului de recepție. Când datele primite de PC ajung la 5 octeți, cei 5 octeți de date recepționați vor fi trimiși secvenţial. După cum se arată în Figura 22, datele introduse secvenţial sunt „1, 2, 3, 4, 5”, care sunt primite şi determinate prin API. După aceasta, datele „1, 2, 3, 4, 5” vor fi tipărite după cele cinci intrări.
Figura 21. Testul funcțional al codului aplicației „Module_UART” – Transmite
Figura 22. Testul funcțional al codului aplicației „Module_UART” – Primire
Instrucțiuni pentru transplant
Această secțiune va prezenta modul de integrare a API-urilor în proiectele utilizatorului.
Pasul 1. Adăugați uart_module.c file în proiect. Faceți clic dreapta pe folderul Utilizator. Selectați „Adăugați existent Files pentru a grupa „Utilizator”…”, apoi selectați uart_module.c file și faceți clic pe „Adăugați”, așa cum se arată în Figura 23. Consultați secțiunea „Structura directorului” pentru file descrierea căii.
Figura 23. Adăugați uart_module.c File a proiecta
Pasul 2. Adăugați ring_buffer.c file în proiect. Faceți clic dreapta pe folderul Utilizator. Selectați „Adăugați existent Files pentru a grupa „Utilizator”…”, apoi selectați ring_buffer.c file și faceți clic pe „Adăugați”, așa cum se arată în Figura 24.\ Consultați secțiunea „Structura directorului” pentru file descrierea căii.
Figura 24. Adăugați ring_buffer.c File a proiecta
Pasul 3. Includeți antetul API file la începutul main.c, așa cum se arată în Figura 25. (Ext: #include „middleware/uart_module.h”)
Figura 25. Includeți antetul API File la principal.c
Pasul 4. Implementați setările necesare pentru comunicarea UART utilizând ht32_board_config.h file. Acest lucru este introdus în detaliu în secțiunile „Descrierea setărilor” și „Modificarea setărilor și întrebări frecvente”.
Modificarea setărilor și întrebări frecvente
Această secțiune va prezenta modul de modificare a setărilor UART și va explica câteva întrebări frecvente întâlnite în timpul utilizării.
Schimbați alocarea pinului UART
- Referindu-ne la capitolul „Atribuire pin” din fișa de date HT32F52352, căutați tabelul de mapare a funcției alternative care listează funcțiile AFIO ale tipului de dispozitiv. Pentru pinii relevanți UART, consultați coloana „AF6 USART/UART”, așa cum se arată în Figura 26.
Figura 26. Tabelul de mapare a funcției alternative HT32F52352
- Acest pas va ghida utilizatorii să găsească pinii UART corespunzători folosind tabelul de mai sus. HT32F52352 exampfișierul folosește USART1 ca canal implicit. Aici, pinii TX și RX sunt USR1_TX și USR1_RX și sunt localizați pe PA4 și respectiv PA5. Figura 27 arată corespondența pinului, precum și definițiile pinului din „ht32_board_config.h”. Câmpurile goale ale „Pachet” din tabelul de alocare a pinului înseamnă că nu există GPIO relevante în acest pachet. Pentru a modifica pinii UART, găsiți locațiile țintă și redefiniți pinii folosind „ht32_board_config.h” file.
Figura 27. Corespondența PIN și modificarea setărilor
Adăugați un canal UART
Luând HT32F52352 HTCFG_UARTM_CH1 ca example, aici este descris cum să adăugați un nou canal UART.
Modificați ht32_board_config.h file
Referindu-ne la capitolul „Atribuire pin” din fișa de date HT32F52352, căutați tabelul de mapare a funcției alternative care listează funcțiile AFIO ale tipului de dispozitiv. Deoarece USART1 a fost folosit ca HTCFG_UARTM_CH0, HTCFG_UARTM_CH1 nou adăugat poate alege USART0. Aici, pinii TX și RX sunt localizați pe PA2 și, respectiv, PA3, așa cum se arată în jumătatea superioară a figurii 28. Modificările corespunzătoare sunt implementate folosind liniile de cod 120~126 în ht32_board_config.h, așa cum se arată în caseta punctată roșie din figură. 28.
Figura 28. Adăugați un canal UART
Întrebări frecvente
Q: La pasul 5 al secțiunii Compilare și testare, testul funcțional de transmisie este normal. Aici, „ABCTiest este testul!” mesajul a fost afișat cu succes, totuși pentru funcția de primire, de ce cele cinci valori de intrare nu sunt returnate și afișate?
A: Verificați dacă pinii MCU UART RX și DAP_Tx ai UART Jumper-J2 au fost scurtcircuitati folosind un jumper. Deoarece codul aplicației „Module_UART” trebuie să utilizeze portul COM virtual (VCP) al e-Link32 Lite, setarea de scurtcircuit ar trebui aplicată la cei doi pini din stânga ai Jumper-J2 UART, așa cum se arată în Figura 29.
Figura 29. Setarea UART Jumper-J2
Î: După executând „Build” (sau scurtătura „F7”), apare un mesaj de eroare care indică faptul că versiunea bibliotecii de firmware este mai veche decât cea necesară? Vezi Figura 30.
A: Implementarea codului aplicației „Module_UART” trebuie să includă uart_module.c/h files care are o cerință pentru o anumită versiune de bibliotecă de firmware. Când apare un astfel de mesaj de eroare, înseamnă că biblioteca de firmware utilizată în prezent este o versiune mai veche. Prin urmare, este necesar să descărcați cea mai nouă versiune prin link-ul furnizat în secțiunea „Biblioteca de firmware”.
Figura 30. Mesaj de eroare pentru versiunea bibliotecii de firmware
Concluzie
Acest document a oferit o introducere de bază pentru a ajuta utilizatorii să înțeleagă mai bine codul aplicației „Module_UART” și protocolul de comunicare UART. Aceasta a fost urmată de descărcarea și pregătirea resurselor. Capitolul Descrierea funcțională a introdus file structura de director, arhitectura API, descrierea API și utilizarea API de examples. Capitolul Instrucțiuni de utilizare a demonstrat pregătirea ecologică, compilarea și testarea codului de aplicație „Module_UART”. De asemenea, a oferit instrucțiuni pentru transplantul de cod și setarea modificării, precum și explicarea unor probleme comune care pot fi întâlnite. Toate acestea combinate vor permite utilizatorilor să înțeleagă rapid cum să folosească API-urile și, ulterior, să reducă timpul necesar pentru a începe.
Material de referință
Pentru mai multe informații, consultați Holtek website: www.holtek.com
Versiuni și informații despre modificare
Data | Autor | Eliberare | Informații de modificare |
2022.04.30 | 蔡期育(Chi-Yu Tsai) | V1.00 | Prima versiune |
Disclaimer
Toate informațiile, mărcile comerciale, siglele, graficele, videoclipurile, clipurile audio, linkurile și alte elemente care apar pe acest web(„Informații”) sunt doar pentru referință și pot fi modificate în orice moment, fără notificare prealabilă și la discreția Holtek Semiconductor Inc. și a companiilor sale afiliate (denumite în continuare „Holtek”, „compania”, „noi”, „ noi' sau 'nostru'). În timp ce Holtek se străduiește să asigure acuratețea Informațiilor cu privire la aceasta webpe site, Holtek nu oferă nicio garanție expresă sau implicită cu privire la acuratețea Informațiilor. Holtek nu își asumă responsabilitatea pentru orice incorectitudine sau scurgere.
Holtek nu va fi răspunzătoare pentru nicio daune (inclusiv, dar fără a se limita la viruși de computer, probleme de sistem sau pierderi de date) care apar în timpul utilizării sau în legătură cu utilizarea acestui website-ul de către orice parte. Este posibil să existe link-uri în această zonă, care vă permit să vizitați website-uri ale altor companii.
Aceste website-urile nu sunt controlate de Holtek. Holtek nu își asumă nicio responsabilitate și nicio garanție pentru orice informație afișată pe astfel de site-uri. Hiperlinkuri către altele website-urile sunt pe propriul risc.
Limitarea răspunderii
În niciun caz, Holtek Limited nu va fi răspunzătoare față de orice altă parte pentru orice pierdere sau daune de orice fel cauzate direct sau indirect în legătură cu accesul sau utilizarea de către dvs. la acest website-ului, conținutul acestuia sau orice bunuri, materiale sau servicii.
Legea aplicabilă
Declinarea răspunderii conținută în website-ul va fi guvernat și interpretat în conformitate cu legile Republicii Chineze. Utilizatorii se vor supune jurisdicției neexclusive a instanțelor din Republica China.
Actualizare a declinului de răspundere
Holtek își rezervă dreptul de a actualiza declinarea răspunderii în orice moment, cu sau fără notificare prealabilă, toate modificările intră în vigoare imediat după postarea pe site-ul website-ul.
Documente/Resurse
![]() |
Notă de aplicație HOLTEK HT32 MCU UART [pdfManual de utilizare HT32 MCU, Notă de aplicație UART, HT32 MCU UART, Notă de aplicație, HT32, Notă de aplicație MCU UART, Notă de aplicație HT32 MCU UART |