HOLTEK HT32 MCU UART Application Note Gebruikershandleiding
Invoering
De Universal Asynchronous Receiver/Transmitter – UART is een veelgebruikte seriële transmissie-interface die flexibele asynchrone full-duplex datatransmissie mogelijk maakt. De applicatiecode “Module_UART” die in deze applicatienota wordt verstrekt, maakt gebruik van TX/RX-interrupts met softwareringbuffers om eenvoudige UART-verzend-/ontvangstfuncties te implementeren via API's, waarvan de gerelateerde functies hieronder worden beschreven. Dit zal het gehele datatransmissieproces vereenvoudigen en gebruikers in staat stellen UART-communicatietoepassingen snel te begrijpen en te implementeren.
- Verzend-/ontvangstfuncties: byte lezen, byte schrijven, buffer lezen, buffer schrijven, enz.
- Statusfuncties: verkrijg de bufferlengte, TX-status, enz.
Dit document introduceert eerst het UART-communicatieprotocol, dat gebruikers zal helpen de UART-communicatie beter te begrijpen, van principe tot toepassing. Dit wordt gevolgd door het downloaden en voorbereiden van de bronnen die nodig zijn voor de applicatiecode, inclusief de firmwarebibliotheek, het downloaden van applicatiecodes, file en directoryconfiguratie, evenals een inleiding tot de terminalsoftwaretool die in de toepassingsnotitie wordt gebruikt. In het hoofdstuk Functionele beschrijving worden de directorystructuur van de applicatiecode, parameterinstellingen en API-beschrijving geïntroduceerd. Het API-gebruik zal worden beschreven met behulp van de “Module_UART”-applicatiecode en het Flash/RAM-bronverbruik dat vereist is voor de API's zal ook worden vermeld. Het hoofdstuk Gebruiksaanwijzing leidt de gebruiker door de stappen van omgevingsvoorbereiding, compilatie en testen om te bevestigen dat de applicatiecode goed zal werken. Vervolgens worden er instructies gegeven waarin wordt uitgelegd hoe de API's in de projecten van de gebruiker kunnen worden geïntegreerd, en ten slotte wordt er een referentie gegeven voor wijzigingen en veelvoorkomende problemen die kunnen optreden.
Gebruikte afkortingen:
- UART's: Universele asynchrone ontvanger/zender
- API-bestand: Toepassingsprogrammeerinterface
- LSB: Minst significante bit
- MSB: Meest significante bit
- computer: Persoonlijke computer
- SK: Starterkit, HT32 ontwikkelbord
- ID: Geïntegreerde ontwikkelomgeving
UART-communicatieprotocol
De UART is een interface van het seriële communicatietype die parallel-naar-seriële dataconversie op de zender implementeert en vervolgens serieel communiceert met een soortgelijke ontvanger. De ontvanger voert vervolgens na ontvangst van de gegevens een serieel-naar-parallelle dataconversie uit. Figuur 1 toont een schematisch diagram van seriële communicatie dat laat zien hoe de gegevens in bitsgewijze volgorde worden overgedragen. Daarom zijn voor bidirectionele communicatie tussen zender en ontvanger slechts twee draden, TX en RX, nodig om gegevens serieel tussen elkaar over te dragen. TX is de pin waarop de UART de seriële gegevens verzendt en is verbonden met de RX-pin van de ontvanger. Daarom moeten de zender- en ontvangerapparaten hun TX- en RX-pinnen kruislings verbinden om UART-tweerichtingscommunicatie uit te voeren, zoals weergegeven in Figuur 2.
Figuur 1. Diagram voor seriële communicatie
Figuur 2. UART-schakelschema
Tijdens de seriële UART-communicatie is de gegevensoverdracht asynchroon. Dit betekent dat er geen klok- of ander synchronisatiesignaal is tussen zender en ontvanger. Hier wordt een baudrate gebruikt, wat de snelheid is voor het verzenden/ontvangen van seriële gegevens en die door beide partijen wordt ingesteld voorafgaand aan de gegevensoverdracht. Bovendien worden speciale bits zoals start- en stopbits aan het begin en einde van het datapakket toegevoegd om een compleet UART-datapakket te vormen. Figuur 3 toont de UART-datapakketstructuur, terwijl Figuur 4 een UART 8-bit datapakket toont zonder pariteitsbit.
Figuur 3. Structuur van UART-gegevenspakketten
Figuur 4. UART 8-bit datapakketformaat
Elk deel van het UART-datapakket wordt hieronder in volgorde geïntroduceerd.
- Beginbit: Dit geeft het begin van een datapakket aan. De UART TX-pin blijft meestal op een hoog logisch niveau voordat de verzending begint. Als de datatransmissie start, trekt de UART-zender de TX-pin van hoog naar laag, dat wil zeggen van 1 naar 0, en houdt deze daar vervolgens één klokcyclus vast. De UART-ontvanger begint gegevens te lezen wanneer een overgang van hoog naar laag wordt gedetecteerd op de RX-pin.
- Gegevens: Dit zijn de feitelijk overgedragen gegevens, met een gegevenslengte van 7, 8 of 9 bits. De gegevens worden doorgaans eerst met de LSB overgedragen.
- Pariteitsbit: Het aantal logische “1” in de gegevens wordt gebruikt om te bepalen of er gegevens zijn gewijzigd tijdens de verzending. Voor even pariteit moet het totale aantal logische “1” in de gegevens een even getal zijn. Omgekeerd moet het totale aantal logische “1” in de gegevens een oneven getal zijn voor oneven pariteit.
- Stopbit: Dit geeft het einde van een datapakket aan, waarbij de UART-zender de TX-pin van laag naar hoog zal trekken, dwz van 0 naar 1, en deze daar vervolgens gedurende een periode van 1 of 2 bits zal vasthouden.
Zoals eerder vermeld, moet, omdat er geen kloksignaal in het UART-circuit zit, dezelfde zend-/ontvangstsnelheid voor seriële gegevens, die bekend staat als de baudrate, worden gedefinieerd tussen de zender en de ontvanger om een foutloze transmissie te implementeren. De baudsnelheid wordt gedefinieerd door het aantal bits dat per seconde wordt overgedragen, in bps (bit per seconde). Sommige standaard en veelgebruikte baudsnelheden zijn 4800bps, 9600bps, 19200bps, 115200bps, enz. De overeenkomstige tijd die nodig is voor het overbrengen van een enkele databit wordt hieronder weergegeven.
Tabel 1. Baudsnelheid versus 1-bit transmissietijd
Baudsnelheid | 1-bits verzending Tijd |
4800bps | 208.33µs |
9600bps | 104.16µs |
19200bps | 52.08µs |
115200bps | 8.68µs |
Bronnen downloaden en voorbereiden
In dit hoofdstuk worden de applicatiecode en de gebruikte softwaretool geïntroduceerd, evenals hoe u de directory en file pad.
Firmwarebibliotheek
Zorg er eerst voor dat de Holtek HT32-firmwarebibliotheek is gedownload voordat u de applicatiecode gebruikt. De downloadlink wordt hieronder weergegeven. Hier zijn er twee opties: HT32_M0p_Vyyyymmdd.zip voor de HT32F5xxxx-serie en HT32_M3_Vyyyymmdd.zip voor de HT32F1xxxx-serie. Download en pak het gewenste bestand uit file.
De rits file bevat verschillende mappen die kunnen worden geclassificeerd als Document, Firmwarebibliotheek, Tools en andere items, waarvan het plaatsingspad wordt weergegeven in Figuur 5. De zip van de HT32-firmwarebibliotheek file met een file naam van HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip bevindt zich onder de map Firmware_Library.
Figuur 5. HT32_M0p_Vyyyymmdd.zip-inhoud
Toepassingscode:
Download de applicatiecode via de volgende link. De applicatiecode is verpakt in een zip file met een file naam van HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Zien Figuur 6 voor de file naamconventies.
Figuur 6. Applicatiecode File Naam Introductie
Downloadlink: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/
File en Directoryconfiguratie
Omdat de applicatiecode niet de HT32-firmwarebibliotheek bevat files, de applicatiecode en firmwarebibliotheek uitgepakt files moeten in het juiste pad worden geplaatst voordat de compilatie wordt gestart. De applicatiecode zip file bevat meestal een of meer mappen, zoals applicatie en bibliotheek, zoals weergegeven in Figuur 7. Plaats de applicatiemap onder de hoofdmap van de HT32-firmwarebibliotheek om de file padconfiguratie, zoals weergegeven in Figuur 8. U kunt ook de applicatiecode en de HT32-firmwarebibliotheek tegelijkertijd uitpakken in hetzelfde pad om dezelfde configuratieresultaten te verkrijgen.
Figuur 7. HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip Inhoud
Figuur 8. Decompressiepad
Terminalsoftware
De applicatiecode kan berichten via de COM-poort verzenden om functieselectie of statusweergave te implementeren. Hiervoor moet de hostzijde de terminalsoftware vooraf hebben geïnstalleerd. Gebruikers kunnen de juiste verbindingssoftware kiezen of gratis gelicentieerde software gebruiken, zoals Tera Term. In de applicatiecode is het UART-kanaal geconfigureerd met een woordlengte van 8 bits, geen pariteit, 1 stopbit en een baudsnelheid van 115200bps.
Functionele beschrijving
Dit hoofdstuk geeft een functionele beschrijving van de applicatiecode, inclusief informatie over de directorystructuur, API-architectuur, beschrijving van instellingen, enz
Directory Structuur
De applicatiecode file bevat een applicatiemap. De volgende laag is de map “Module_UART” die twee applicatieprogramma’s bevat, “UART_Module_Example” en “UART_Bridge”. De relevante files worden hieronder vermeld en beschreven.
Tabel 2. Directorystructuur van applicatiecodes
map / File Naam | Beschrijving |
\\applicatie\Module_UART\UART_Module_Example*1 | |
_CreateProject.bat | Batchscripts voor het maken van projecten files |
_ProjectSource.ini | Initialisatie file voor het toevoegen van broncode aan projecten |
ht32_board_config.h | Instellen file gerelateerd aan I/O-toewijzing van IC-randapparatuur |
ht32fxxxx_01_it.c | Serviceprogramma onderbreken file |
hoofd.c | Broncode van het hoofdprogramma |
\\applicatie\Module_UART\UART_Bridge*2 | |
_CreateProject.bat | Batchscripts voor het maken van projecten files |
_ProjectSource.ini | Initialisatie file voor het toevoegen van broncode aan projecten |
ht32_board_config.h | Instellen file gerelateerd aan I/O-toewijzing van IC-randapparatuur |
ht32fxxxx_01_it.c | Serviceprogramma onderbreken file |
hoofd.c | Broncode van het hoofdprogramma |
uart_bridge.h uart_bridge.c | UART-brugheader file en broncode file |
\\hulpprogramma's\middleware | |
uart_module.h*3 uart_module.c*3 | API-header file en broncode file |
\\nutsvoorzieningen\algemeen | |
ringbuffer.h ring_buffer.c | Software-ringbufferheader file en broncode file |
Opmerking:
- In de map “UART_Module_Example”-toepassingscode, worden de API-lees- en schrijfbewerkingen uitgevoerd op een loopback-manier, raadpleeg de “API Usage Examples”-sectie voor meer details.
- In de applicatiecode "UART_Bridge" worden twee UART-kanalen, UART CH0 en UART CH1, geactiveerd en wordt een aangepast communicatieprotocol via de COMMAND-structuren geïmplementeerd tussen de twee UART-apparaten. Voor meer informatie raadpleegt u de handleiding “API Usage Examples" sectie.
- De applicatiecode moet de uart_module.c/h gebruiken files waarvoor een versievereiste voor de firmwarebibliotheek geldt. Afhankelijk van de update kan de vereiste van tijd tot tijd veranderen. Om de huidige versievereiste van de firmwarebibliotheek te bevestigen, raadpleegt u de inhoud van de afhankelijkheidscontrole door te zoeken naar het trefwoord “Dependency check” in main.c file. Als de versie van de firmwarebibliotheek niet aan de vereisten voldoet, downloadt u de nieuwste versie via de link in het gedeelte 'Firmwarebibliotheek'.
API-architectuur
Elke API heeft een belangrijke parameter CH, het UART-kanaal. Dit bepaalt welk UART-kanaal moet worden bestuurd. Momenteel worden maximaal vier UART-kanalen ondersteund en daarom worden vier constante symbolen als volgt gedefinieerd. Deze worden gebruikt als de parameter CH, die de API's de basis voor controle biedt.
- UARTM_CH0: invoerparameter – bestuur of configureer UART CH0
- UARTM_CH1: invoerparameter – bestuur of configureer UART CH1
- UARTM_CH2: invoerparameter – bestuur of configureer UART CH2
- UARTM_CH3: invoerparameter – bestuur of configureer UART CH3
Er wordt geen geheugenruimte verspild als slechts één UART-kanaal wordt gebruikt. Dit komt omdat het aantal ondersteunde UART-kanalen kan worden ingesteld en de ongebruikte UART-kanaalcode door de preprocessor zal worden verwijderd om de beschikbare geheugenruimte te vergroten. De API-architectuur wordt getoond in Figuur 9.
Figuur 9. Blokdiagram van API-architectuur
Elke API bestaat uit vier groepen UART-kanaalgerelateerde instellingen of bedieningselementen, zodat gebruikers alleen de gewenste CH-parameter hoeven in te voeren. Om de relevante API te configureren, is er alleen een extra UART-basisconfiguratieparametertabel nodig met de structuurvorm USART_InitTypeDef. De API implementeert de UART-basisconfiguratie volgens de parameterinhoud in de tabel. Raadpleeg het gedeelte 'API-beschrijving' voor de tabel met de UART-basisconfiguratiestructuur.
De uart_module.c/.h files bevatten alleen de interrupt (CHx_IRQ) en statustabel (CHx Status) van elk UART-kanaal, terwijl alle instellingen die nodig zijn voor UART-communicatie worden geleverd door ht32_board_config.h. De hardwarerelevante parameters in ht32_board_config.h file worden weergegeven in de onderstaande tabel. Meer details vindt u in het gedeelte “Instellingsbeschrijving”.
De hardwarerelevante parameters in ht32_board_config.h omvatten I/O-instellingen en fysieke UART-poortinstellingen, als volgt.
Tabel 3. Definitiesymbolen in ht32_board_config.h
Symbool | Beschrijving |
HTCFG_UARTM_CH0 | Fysieke UART-poortnaam; Exampbestand: UART0, UART1… |
HTCFG_UARTM0_TX_GPIO_PORT | Definieert de poortnaam van TX voor CH0; Exampbijvoorbeeld: A, B, C… |
HTCFG_UARTM0_TX_GPIO_PIN | Definieert het pinnummer van TX voor CH0; Exampniveau: 0~15 |
HTCFG_UARTM0_RX_GPIO_PORT | Definieert de poortnaam van RX voor CH0; Exampbijvoorbeeld: A, B, C… |
HTCFG_UARTM0_RX_GPIO_PIN | Definieert het pinnummer van TX voor CH0; Exampniveau: 0~15 |
HTCFG_UARTM0_TX_BUFFER_SIZE | Definieert de TX-buffergrootte voor CH0; Exampbestand: 128 |
HTCFG_UARTM0_RX_BUFFER_SIZE | Definieert de RX-buffergrootte voor CH0; Exampbestand: 128 |
Raadpleeg het gegevensblad van het betreffende apparaat om de AFIO-configuratie van het UART-kanaal te wijzigen. Momenteel zijn alleen de I/O-definities voor UART CH0 van kracht, aangezien alleen UART CH0 is geconfigureerd in ht32_board_config.h. Om UART CH1~3 toe te voegen, moeten hun I/O-definities worden aangevuld door te verwijzen naar de UART CH0-definitie of door te verwijzen naar de sectie "Instellingswijzigingen en veelgestelde vragen".
Er zijn drie hoofdkenmerken van de API-architectuur:
- Er worden maximaal vier UART-kanalen ondersteund. Hun invoerparameters zijn UARTM_CH0, UARTM_CH1, UARTM_CH2 en UARTM_CH3.
- Het aantal UART-kanalen kan worden ingesteld en ongebruikte kanalen verminderen de beschikbare geheugenruimte niet.
- Alle UART-instellingen en I/O-definities zijn volledig gescheiden van de API's. Dit vergroot het beheergemak van het instellen van waarden en verkleint de kans op onjuiste of ontbrekende instellingen.
Instelling Beschrijving
In deze sectie worden de parameterinstellingen in ht32_board_config.h en uart_module.h geïntroduceerd files.
- ht32_board_config.h: dit file wordt gebruikt voor pindefinities en relevante instellingen voor het ontwikkelbord, waaronder het UART IP-kanaal (UART0, UART1, USART0...) dat wordt gebruikt door de Starter Kit (SK), overeenkomstige TX/RX-pinlocaties en TX/RX-buffergrootte. Figuur 10 toont de instellingsinhoud van de HT32F52352 Starterkit. Afhankelijk van de functionele integratie van de ontwikkeling kunnen gebruikers het gedeelte “Pin Assignment” van de datasheet van het gebruikte apparaat raadplegen om de pindefinities te implementeren. Meer details over het wijzigen van instellingen worden beschreven in het gedeelte 'Wijzigen van instellingen en veelgestelde vragen'.
Figuur 10. ht32_board_config.h Instellingen (HT32F52352)
- uart_module.h: Dit is de API-header file gebruikt door de applicatiecode, die de relevante standaardinstellingen, functiedefinities, etc. bevat. Zoals weergegeven in Figuur 11, kan de inhoud van de standaardinstellingen worden overschreven door externe configuraties, zoals de instellingen in ht32_board_config.h file.
Figuur 11. Standaardinstellingen in uart_module.h
API-beschrijving
- Beschrijving van het gegevenstype van de applicatiecode.
- USART_InitTypeDef
Dit is de UART-basisconfiguratiestructuur die is samengesteld uit BaudRate-, WordLength-, StopBits-, Parity- en Mode-configuraties, zoals hieronder weergegeven.Variabel Naam Type Beschrijving USART_BaudRate u32 UART-communicatie baudrate USART_Woordlengte u16 UART-communicatiewoordlengte: 7, 8 of 9 bits USART_StopBits u16 UART-communicatiestopbitlengte: 1 of 2 bits USART_Pariteit u16 UART-communicatiepariteit: even, oneven, mark, spatie of geen pariteit USART_Modus u16 UART-communicatiemodus; de API's ondersteunen alleen de normale modus
- USART_InitTypeDef
- Voordat u de API-functies gebruikt, voltooit u de UART-basisconfiguratie in het hoofdprogramma. De UART-basisconfiguratie voor deze toepassingscode wordt weergegeven in figuur 12. Hier is de baudsnelheid 115200 bps, de woordlengte 8 bits, de stopbitlengte 1 bits en er is geen pariteit.
Figuur 12. UART-basisconfiguratie
- Figuur 13 toont de API-functies die zijn gedeclareerd in uart_module.h file. In de volgende tabellen worden de functie, invoerparameters en het gebruik van de API-functies uitgelegd.
Afbeelding 13. API-functiedeclaraties in uart_module.h
Naam | void UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue) | |
Functie | Initialisatie van de UART-module | |
Invoer | CH | UART-kanaal |
pUART_Init | UART-basisconfiguratiestructuuraanwijzer | |
uRxTimeOutWaarde | Time-outwaarde UART RX FIFO. Wanneer de RX FIFO nieuwe gegevens ontvangt, wordt de teller gereset en opnieuw opgestart. Zodra de teller de vooraf ingestelde time-outwaarde bereikt en de bijbehorende time-out-interrupt is ingeschakeld, wordt een time-out-interrupt gegenereerd. | |
Gebruik | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Voer de UART-basisconfiguratie uit//Zie afbeelding 12 voor de USART_InitStructure-configuratie |
Naam | u32 UARTM_WriteByte(u32 CH, u8 uData) | |
Functie | UART-module schrijfbytebewerking (TX) | |
Invoer | CH | UART-kanaal |
uGegevens | De gegevens die moeten worden geschreven | |
Uitvoer | SUCCES | Succesvol |
FOUT | Mislukt | |
Gebruik | UARTM_WriteByte(UARTM_CH0, 'A'); //UART schrijft 1 byte – 'A' |
Naam | u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLengte) | |
Functie | UART-module schrijfbewerking (TX) | |
Invoer | CH | UART-kanaal |
pBuffer | Bufferwijzer | |
uLengte | De lengte van de gegevens die moeten worden geschreven | |
Uitvoer | SUCCES | Succesvol |
FOUT | Mislukt | |
Gebruik | u8 Test[] = “Dit is een test!\r\n”; UARTM_Write(UARTM_CH0, Test, groottevan(Test) -1); //UART schrijft pBuffer-gegevens |
Naam | u32 UARTM_ReadByte(u32 CH, u8 *pData) | |
Functie | UART-module leesbytebediening (RX) | |
Invoer | CH | UART-kanaal |
pGegevens | Het adres waar de gelezen gegevens moeten worden geplaatst | |
Uitvoer | SUCCES | Succesvol |
FOUT | Mislukt (geen gegevens) | |
Gebruik | u8 TempData; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//Als UARTM_ReadByte() SUCCESS retourneert, schrijft UART deze databyte |
Naam | u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLengte) | |
Functie | UART-module leesbewerking (RX) | |
Invoer | CH | UART-kanaal |
pBuffer | Bufferwijzer | |
uLengte | De lengte van de gegevens die moeten worden gelezen | |
Uitvoer | Lees tellen | De lengte van de gegevens is gelezen |
Gebruik | u8 Test2[10]; u32 Len; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() leest 5 bytes aan gegevens en slaat gegevens op in Test2, en wijst het aantal leesbytes toe aan Len//Schrijf de gegevens afkomstig van Test2 |
Naam | u32 UARTM_GetReadBufferLength(u32 CV) | |
Functie | Verkrijg de leesbufferlengte (RX) | |
Invoer | CH | UART-kanaal |
Uitvoer | uLengte | Bufferlengte lezen |
Gebruik | UARTM_Init(UARTM_CH0, &USART_InitStructuur, 40); // UART-module-initialisatie while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Wacht tot UARTM_ReadBuffer 5 bytes aan gegevens heeft ontvangen |
Naam | u32 UARTM_GetWriteBufferLength(u32 CV) | |
Functie | Verkrijg de schrijfbufferlengte (TX) | |
Invoer | CH | UART-kanaal |
Uitvoer | uLengte | Schrijfbufferlengte |
Naam | u8 UARTM_IsTxFinished(u32 CV) | |
Functie | Verkrijg de TX-status | |
Invoer | CH | UART-kanaal |
Uitvoer | WAAR | TX-status: voltooid |
ONWAAR | TX-status: niet voltooid | |
Gebruik | UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // “uart_module.c” SVN >= 525 vereistwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //Deze API kan worden gebruikt om de TX-status te controleren, zoals hierboven weergegeven; wacht tot de UARTM_WriteByte() API is voltooid, dat wil zeggen dat de TX-status TRUE is, en ga dan verder met de volgende acties.//Er is een beperking toegevoegd omdat deze functie pas is toegevoegd als het SVN-versienummer in uart_module.c 525 is. |
Naam | leegte UARTM_DiscardReadBuffer(u32 CV) | |
Functie | Gooi de gegevens in de leesbuffer weg | |
Invoer | CH | UART-kanaal |
API-gebruik Bijvampde
In deze sectie wordt het schrijven en lezen van API's gedemonstreerd, exampbestanden van de “Module_UART” applicatiecode met behulp van het initialisatieproces en de “UART_Module_Example” applicatiecodeproces. Voordat gebruikers de API's kunnen gebruiken, moeten ze de API-header opnemen file in de broncode van het hoofdprogramma file (#include “middleware/uart_module.h”).
Zoals weergegeven in Figuur 14, definieert u bij het starten van het initialisatieproces eerst de UART-basisconfiguratiestructuur. Configureer vervolgens de leden van de UART-basisconfiguratiestructuur, inclusief BaudRate, WordLength, StopBits, Parity en Mode. Roep ten slotte de API-initialisatiefunctie aan, waarvan de voltooiing het einde van het initialisatieproces aangeeft. Hierna kunnen gebruikers doorgaan met de schrijf- en leesbewerkingen op basis van de vooraf ingestelde UART-basisconfiguratie.
Figuur 14. Initialisatiestroomdiagram
De “UART_Module_Example”-applicatiecode demonstreert de API-lees- en schrijfbewerkingen op een loopback-manier. Het stroomdiagram hiervoor wordt weergegeven in Figuur 15. De gebruikte API-functies omvatten UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() en UARTM_GetReadBufferLength(). Hun beschrijving vindt u in de sectie 'API-beschrijving'.
Figuur 15. Stroomdiagram van schrijven en lezen, bijvampde
Er is nog een “UART_Bridge” applicatiecode onder de map “Module_UART” waarvan de gerelateerde file beschrijving wordt geïntroduceerd in de sectie “Directorystructuur”. De applicatiecode “UART_Bridge” activeert twee UART-kanalen, UART CH0 en UART CH1, en past vervolgens het communicatieprotocol tussen de twee UART-apparaten aan via COMMAND-structuren, gCMD1 en gCMD2. Deze worden gedefinieerd in uart_bridge.c, zoals hieronder weergegeven. UARTBridge_CMD1TypeDef gCMD1:
Variabel Naam | Type | Beschrijving |
uHeader | u8 | Koptekst |
ucmd | u8 | Commando |
uData[3] | u8 | Gegevens |
UARTBridge_CMD2TypeDef gCMD2:
Variabel Naam | Type | Beschrijving |
uHeader | u8 | Koptekst |
uCmdA | u8 | Commando A |
uCmdB | u8 | Commando B |
uData[3] | u8 | Gegevens |
Gebruik gCMD1 in de applicatiecode "UART_Bridge" om gegevens als opdrachtpakket te ontvangen en deze vervolgens te analyseren. Stel vervolgens, volgens het aangepaste communicatieprotocol, gCMD2 in als antwoordpakket en verzend het. Het volgende is een exampbestand van een commandopakket gCMD1) en een antwoordpakket (gCMD2). Opdrachtpakket (UARTBridge_CMD1TypeDef gCMD1):
Byte 0 | Byte 1 | Byte 2 ~ Byte 4 |
uHeader | ucmd | uGegevens [3] |
"A" | “1” | “x, y, z” |
Antwoordpakket (UARTBridge_CMD2TypeDef gCMD2):
Byte 0 | Byte 1 | Byte 2 | Byte 3 ~ Byte 5 |
uHeader | uCmdA | uCmdB | uGegevens [3] |
"B" | "A" | “1” | “x, y, z” |
Bronberoep
Ik neem de HT32F52352 als example, de bronnen die door de UART-module worden ingenomen, worden hieronder weergegeven.
HT32F52352 | |
ROM-grootte | 946 Bytes |
RAM-grootte | 40*1 + 256*2 Bytes |
Opmerking:
- Globale variabelen inclusief vlaggen en status voor een enkel kanaal nemen 40 bytes RAM in beslag.
- Dit is voor een situatie waarbij één enkel kanaal wordt gebruikt en de TX/RX-buffergrootte 128/128 bytes is. De buffergrootte kan worden ingesteld op basis van de toepassingsvereisten.
Tabel 4. Beroep van applicatiecodebron
- Compilatieomgeving: MDK-Arm V5.36, ARMCC V5.06 update 7 (build 960)
- Optimaliseer optie: Niveau 2 (-O2)
Gebruiksaanwijzing
In dit hoofdstuk wordt de omgevingsvoorbereiding voor de “Module_UART”-applicatiecode geïntroduceerd, evenals de compilatie- en teststappen.
Milieuvoorbereiding
De hardware en software die nodig zijn voor de applicatiecode “Module_UART” worden hieronder vermeld.
Tabel 5. Hardware/software omgevingsvoorbereiding
Hardware/Software | Graaf | Opmerking |
Starterkit | 1 | Deze toepassingsnotitie gebruikt de HT32F52352 Starter Kit als example |
USB-kabel | 1 | Micro-USB, aangesloten op pc |
Toepassingscode: | — | Het downloadpad, file en mapconfiguratie worden geïntroduceerd in de sectie “Bron downloaden en voorbereiden”. Pad: “\\application\Module_UART\UART_Module_Example ' |
Tera-termijn | — | Raadpleeg het gedeelte “Terminalsoftware”. |
Keil IDE | — | Keil uVision V5.xx |
Gebruik eerst de HT32F52352 Starter Kit in combinatie met de Virtual COM Port (VCP)-functie van e-Link32 Lite voor de introductie van de UART-toepassing. Hiervoor moeten de volgende milieuvoorbereidingen worden geïmplementeerd:
- Er zijn twee USB-interfaces op het bord. Gebruik de USB-kabel om de pc en de eLink32 Lite-interface op het bord aan te sluiten, zoals weergegeven in afbeelding 16-(a).
- Omdat de applicatiecode de e-Link32 Lite Virtual COM Port (VCP)-functie moet gebruiken, moet u ervoor zorgen dat de PAx*2 en DAP_Tx van UART Jumper-J2*1 zijn kortgesloten met behulp van een jumper. De J2-locatie wordt aangegeven in figuur 16-(b).
Opmerking
- J2 op de starterkit heeft twee opties: PAx en DAP_Tx kortgesloten of PAx en RS232_Tx kortgesloten. Raadpleeg de gebruikershandleiding van de Starter Kit voor de gedetailleerde instelfuncties.
- De MCU UART RX-pinlocatie op verschillende starterkits is verschillend. Deze example gebruikt PAx om de RX-pin aan te geven.
Figuur 16. Blokdiagram van de HT32-startset
Gebruik nu het gebruikersdoelbord in combinatie met de Virtual COM Port (VCP)-functie van de e-Link32 Pro voor de introductie van de UART-toepassing. Hiervoor moeten de volgende milieuvoorbereidingen worden geïmplementeerd:
- De ene kant van e-Link32 Pro is verbonden met een pc met behulp van een mini-USB-kabel en de andere kant is verbonden met het gebruikersdoelbord via de 10-bits grijze kabel. De verbinding tussen de SWD-interfaces van de kabel en het doelbord wordt geïmplementeerd met behulp van Dupont-lijnen, zoals weergegeven in figuur 17-(a).
- De seriële communicatiepinnen van de e-Link32 Pro zijn Pin#7 VCOM_RXD en Pin#8-VCOM_TXD. Deze moeten worden aangesloten op de TX- en RX-pinnen van het gebruikersdoelbord, zoals weergegeven in afbeelding 17-(b).
Figuur 17. Blokdiagram e-Link32 Pro + gebruikersdoelbord
Compilatie en test
In deze sectie wordt de map 'application\Module_UART\UART_Module_Example” als example om de compilatie- en testprocessen te introduceren. Zorg er eerst voor dat alle voorbereidingen die in de vorige sectie zijn beschreven, zijn geïmplementeerd en dat de Tera Term-terminalsoftware is gedownload.
De gedetailleerde bedieningsstappen worden hieronder samengevat.
Stap 1. Inschakeltest
Stel de hardwareomgeving in zoals beschreven in de vorige sectie. Na het inschakelen gaat de D9-voedings-LED linksonder op de starterkit branden. De D1 USB-LED op de e-Link32 Lite rechtsboven gaat branden nadat de USB-opsomming is voltooid. Als D1 na een lange tijd niet brandt, controleer dan of de USB-kabel kan communiceren. Als dit niet het geval is, verwijdert u deze en plaatst u deze opnieuw.
Stap 2. Genereer een project
Open de toepassing\Module_UART\UART_Module_Example map, klik op _CreateProject.bat file om een project te genereren, zoals weergegeven in Figuur 18. Aangezien deze toepassingsnotitie de HT32F52352 Starter Kit gebruikt, opent u het Keil IDE-project “Project_52352.uvprojx” dat zich onder de map MDK_ARMv5 bevindt.
Figuur 18. Voer _CreateProject.bat uit om een project te genereren
Stap 3. Compileren en programmeren
Nadat het project is geopend, klikt u eerst op “Build” (of gebruik de sneltoets “F7”) en vervolgens op “Downloaden” (of gebruik de sneltoets “F8”). Hierna worden de build- en downloadresultaten weergegeven in het Build Output-venster. Zie Figuur 19.
Figuur 19. Resultaten samenstellen en downloaden
Stap 4. Open de Tera Term-software en configureer de seriële poort
Open de Tera Term-software en de COM-poort. Let erop of het door de Starter Kit gegenereerde COM-poortnummer correct is of niet. Klik vervolgens op “Setup >> Seriële poort” om de configuratie-interface te openen. De UART-interfaceconfiguratie van de applicatiecode "Module_UART" wordt beschreven in de sectie "Terminalsoftware". Het installatieresultaat wordt getoond in Figuur 20.
Afbeelding 20. Installatieresultaat Tera Term seriële poort
Stap 5. Reset het systeem en test
Druk op de SK-resettoets – B1 Reset. Hierna verschijnt een bericht “ABCDit is een test!” boodschap zal zijn
verzonden via de API en zal worden weergegeven in het Tera Term-venster, zoals weergegeven in Figuur 21. Wat betreft de ontvangstfunctie: bij het invoeren van gegevens in het Tera Term-venster zal de relevante API worden gebruikt om de ontvangstbufferlengte te bepalen. Wanneer de door de pc ontvangen gegevens 5 bytes bereiken, worden de ontvangen 5 bytes aan gegevens opeenvolgend verzonden. Zoals weergegeven in Figuur 22 zijn de opeenvolgend ingevoerde gegevens “1, 2, 3, 4, 5”, die worden ontvangen en bepaald via de API. Hierna worden na de vijf invoergegevens de gegevens “1, 2, 3, 4, 5” afgedrukt.
Afbeelding 21. Functionele test “Module_UART” applicatiecode – verzenden
Afbeelding 22. Functionele test “Module_UART” applicatiecode – ontvangen
Transplantatie-instructies
In deze sectie wordt geïntroduceerd hoe u de API's in de projecten van de gebruiker kunt integreren.
Stap 1. Voeg de uart_module.c toe file in het project. Klik met de rechtermuisknop op de map Gebruiker. Selecteer 'Bestaande toevoegen Files naar Groep 'Gebruiker'…' en selecteer vervolgens uart_module.c file en klik op “Toevoegen”, zoals weergegeven in Figuur 23. Raadpleeg het gedeelte “Directorystructuur” voor de file padbeschrijving.
Figuur 23. Voeg uart_module.c toe File projecteren
Stap 2. Voeg de ring_buffer.c toe file in het project. Klik met de rechtermuisknop op de map Gebruiker. Selecteer 'Bestaande toevoegen Files naar Groep 'Gebruiker'…' en selecteer vervolgens ring_buffer.c file en klik op “Toevoegen”, zoals weergegeven in Figuur 24.\ Raadpleeg het gedeelte “Directorystructuur” voor de file padbeschrijving.
Figuur 24. Ring_buffer.c toevoegen File projecteren
Stap 3. Voeg de API-header toe file in het begin van main.c, zoals weergegeven in afbeelding 25. (Ext: #include “middleware/uart_module.h”)
Afbeelding 25. API-header opnemen File naar hoofd.c
Stap 4. Implementeer de instellingen die nodig zijn voor de UART-communicatie met behulp van ht32_board_config.h file. Dit wordt in detail geïntroduceerd in de secties “Instellingsbeschrijving” en “Instellingswijziging en veelgestelde vragen”.
Wijzigingen en veelgestelde vragen instellen
In dit gedeelte wordt uitgelegd hoe u de UART-instellingen kunt wijzigen en worden enkele veelgestelde vragen uitgelegd die u tijdens het gebruik tegenkomt.
Wijzig de UART-pintoewijzing
- Raadpleeg het hoofdstuk "Pintoewijzing" van het HT32F52352-gegevensblad en zoek de tabel Alternatieve functietoewijzing op, waarin de AFIO-functies van het apparaattype worden vermeld. Voor de UART-relevante pinnen raadpleegt u de kolom “AF6 USART/UART”, zoals weergegeven in Afbeelding 26.
Figuur 26. HT32F52352 Alternatieve functietoewijzingstabel
- Deze stap helpt gebruikers bij het lokaliseren van de overeenkomstige UART-pinnen met behulp van de bovenstaande tabel. De HT32F52352 example gebruikt USART1 als het standaardkanaal. Hier zijn de TX- en RX-pinnen USR1_TX en USR1_RX en bevinden ze zich respectievelijk op PA4 en PA5. Figuur 27 toont de pincorrespondentie en de pindefinities in “ht32_board_config.h”. De lege velden van “Pakket” in de pintoewijzingstabel betekenen dat er geen relevante GPIO’s in dit pakket zitten. Om de UART-pinnen te wijzigen, zoekt u de doelpinlocaties en definieert u de pinnen opnieuw met behulp van "ht32_board_config.h" file.
Afbeelding 27. Pincorrespondentie en wijziging van instellingen
Voeg een UART-kanaal toe
Ik neem de HT32F52352 HTCFG_UARTM_CH1 als example, hier wordt beschreven hoe u een nieuw UART-kanaal toevoegt.
Wijzig de ht32_board_config.h file
Raadpleeg het hoofdstuk "Pintoewijzing" van het HT32F52352-gegevensblad en zoek de tabel Alternatieve functietoewijzing op, waarin de AFIO-functies van het apparaattype worden vermeld. Omdat USART1 is gebruikt als HTCFG_UARTM_CH0, kan de nieuw toegevoegde HTCFG_UARTM_CH1 USART0 kiezen. Hier bevinden de TX- en RX-pinnen zich respectievelijk op PA2 en PA3, zoals weergegeven in de bovenste helft van Afbeelding 28. De overeenkomstige wijzigingen worden geïmplementeerd met behulp van coderegels 120~126 in ht32_board_config.h, zoals weergegeven door het rode gestippelde kader in Afbeelding 28.
Figuur 28. Voeg een UART-kanaal toe
Veelgestelde vragen
Q: In stap 5 van het gedeelte Compilatie en testen is de functionele verzendtest normaal. Hier wordt het bericht "ABCDit is een test!" bericht is succesvol weergegeven, maar waarom worden voor de ontvangstfunctie de vijf invoerwaarden niet geretourneerd en weergegeven?
A: Controleer of de MCU UART RX- en DAP_Tx-pinnen van UART Jumper-J2 zijn kortgesloten met behulp van een jumper. Omdat de applicatiecode “Module_UART” de virtuele COM-poort (VCP) van e-Link32 Lite moet gebruiken, moet de kortsluitinstelling worden toegepast op de twee linkerpinnen van UART Jumper-J2, zoals weergegeven in Afbeelding 29.
Figuur 29. UART Jumper-J2-instelling
Vraag: Na Wanneer u “Build” (of snelkoppeling “F7”) uitvoert, verschijnt er een foutmelding die aangeeft dat de versie van de firmwarebibliotheek ouder is dan de versie die vereist is? Zie Figuur 30.
A: De implementatie van de applicatiecode "Module_UART" moet de uart_module.c/h bevatten files waarvoor een vereiste is voor een bepaalde versie van de firmwarebibliotheek. Wanneer een dergelijke foutmelding verschijnt, betekent dit dat de momenteel gebruikte firmwarebibliotheek een oudere versie is. Daarom is het noodzakelijk om de nieuwste versie te downloaden via de link in de sectie “Firmwarebibliotheek”.
Afbeelding 30. Foutmelding firmwarebibliotheekversie
Conclusie
Dit document biedt een basisinleiding om gebruikers te helpen een beter begrip te krijgen van de “Module_UART”-applicatiecode en het UART-communicatieprotocol. Dit werd gevolgd door het downloaden en voorbereiden van de bronnen. Het hoofdstuk Functionele beschrijving introduceerde de file directorystructuur, de API-architectuur, API-beschrijving en API-gebruik bijvamples. In het hoofdstuk Gebruiksaanwijzing werd de omgevingsvoorbereiding, compilatie en testen van de “Module_UART”-applicatiecode gedemonstreerd. Het bevatte ook instructies voor het transplanteren en wijzigen van code en het uitleggen van enkele veelvoorkomende problemen die zich kunnen voordoen. Door dit alles gecombineerd kunnen gebruikers snel begrijpen hoe ze de API's moeten gebruiken, waardoor ze minder tijd nodig hebben om aan de slag te gaan.
Referentiemateriaal
Voor meer informatie, zie de Holtek webwebsite: www.holtek.com
Versies en wijzigingsinformatie
Datum | Auteur | Uitgave | Wijzigingsinformatie: |
2022.04.30 | 蔡期育(Chi-Yu Tsai) | V1.00 | Eerste versie |
Vrijwaring
Alle informatie, handelsmerken, logo's, afbeeldingen, video's, audioclips, links en andere items die hierop verschijnen website ('Informatie') zijn alleen ter referentie en kunnen op elk moment worden gewijzigd zonder voorafgaande kennisgeving en naar goeddunken van Holtek Semiconductor Inc. en haar verbonden bedrijven (hierna 'Holtek', 'het bedrijf', 'ons', ' wij' of 'onze'). Hoewel Holtek ernaar streeft de juistheid van de informatie hierover te garanderen website, wordt door Holtek geen expliciete of impliciete garantie gegeven voor de juistheid van de Informatie. Holtek draagt geen verantwoordelijkheid voor eventuele onjuistheden of lekkages.
Holtek is niet aansprakelijk voor enige schade (inclusief maar niet beperkt tot computervirussen, systeemproblemen of gegevensverlies) die voortvloeit uit het gebruik of in verband met het gebruik van deze website van welke partij dan ook. Mogelijk zijn er links in dit gebied waarmee u de websites van andere bedrijven.
Deze websites worden niet beheerd door Holtek. Holtek draagt geen verantwoordelijkheid en geeft geen enkele garantie voor welke informatie dan ook die op dergelijke sites wordt weergegeven. Hyperlinks naar andere websites zijn op eigen risico.
Beperking van aansprakelijkheid
In geen geval zal Holtek Limited jegens enige andere partij aansprakelijk zijn voor verlies of schade van welke aard dan ook of op welke manier dan ook direct of indirect veroorzaakt in verband met uw toegang tot of gebruik van deze website, de inhoud ervan of eventuele goederen, materialen of diensten.
Toepasselijk recht
De disclaimer in de website wordt beheerst door en geïnterpreteerd in overeenstemming met de wetten van de Republiek China. Gebruikers zullen zich onderwerpen aan de niet-exclusieve jurisdictie van de rechtbanken van de Republiek China.
Update van disclaimer
Holtek behoudt zich het recht voor om de Disclaimer op elk moment bij te werken, met of zonder voorafgaande kennisgeving. Alle wijzigingen zijn onmiddellijk van kracht na plaatsing op de website. webplaats.
Documenten / Bronnen
![]() |
HOLTEK HT32 MCU UART toepassingsnotitie [pdf] Gebruikershandleiding HT32 MCU, UART-toepassingsnota, HT32 MCU UART, toepassingsnota, HT32, MCU UART-toepassingsnota, HT32 MCU UART-toepassingsnota |