HOLTEK HT32 MCU UART Application Note Gebruikershandleiding
HOLTEK HT32 MCU UART toepassingsnotitie

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
Seriële communicatiediagram

Figuur 2. UART-schakelschema
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
UART-gegevenspakketstructuur

Figuur 4. UART 8-bit datapakketformaat
Formaat gegevenspakket
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
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/ Toepassingscode:

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
Inhoud

Figuur 8. Decompressiepad
Decompressie pad

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: 

  1. 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.
  2.  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.
  3. 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
Architectuurblokdiagram

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: 

  1. Er worden maximaal vier UART-kanalen ondersteund. Hun invoerparameters zijn UARTM_CH0, UARTM_CH1, UARTM_CH2 en UARTM_CH3.
  2.  Het aantal UART-kanalen kan worden ingesteld en ongebruikte kanalen verminderen de beschikbare geheugenruimte niet.
  3. 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.

  1. 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)
    Instellingen
  2. 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
    Standaardinstellingen
API-beschrijving
  1. 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
  2. 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
    Basisconfiguratie
  3. 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 
    API-functiedeclaraties
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
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
Stroomdiagram van schrijven en lezen Exampde

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:

  1. Globale variabelen inclusief vlaggen en status voor een enkel kanaal nemen 40 bytes RAM in beslag.
  2.  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:

  1. 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).
  2. 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

  1. 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.
  2. 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
Kit blokdiagram

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:

  1. 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).
  2. 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
    Doelbord voor gebruikers

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
Project 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
Resultaten bouwen 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
Instellingsresultaat
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
Functionele test van applicatiecode

Afbeelding 22. Functionele test “Module_UART” applicatiecode – ontvangen
Functionele test van applicatiecode

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
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 
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
Inclusief API-header File

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 

  1. 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
    Alternatieve functietoewijzingstabel
  2. 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
    Wijziging instellen

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
UART-kanaal

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
UART-jumper

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
Versiefoutmelding

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

Referenties

Laat een reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *