- Grundlæggende om UART-kommunikation
- Hardwarekrav og opsætning
- Kredsløbsdiagram for Nuvoton N76E003 UART-kommunikation
- UART Pins på Nuvoton N76E003 Microcontroller
- UART registrerer sig i Nuvoton N76E003 Microcontroller
- UART-driftstilstande i N76E003
- Programmering af Nuvoton N76E003 til UART-kommunikation
UART står for Universal Asynchronous Receiver / Transmitter, og det er en nyttig hardwarefunktion i enhver mikrokontrollerenhed. En mikrocontroller skal modtage data, behandle dem og sende dem til de andre enheder. Der findes forskellige typer kommunikationsprotokoller i mikrokontrolleren, UART er dog den mest anvendte blandt de andre kommunikationsprotokoller som SPI og I2C. Hvis nogen har brug for at modtage eller sende data serielt, er UART altid den enkleste og mest almindelige mulighed. Fordelen ved UART er, at det kun kræver to ledninger at overføre data mellem enheder. Fortsættelse af vores Nuvoton Microcontroller-tutorial, i denne artikel, vil vi lære at udføre seriel kommunikation ved hjælp af N76E003 mikrocontroller.
Grundlæggende om UART-kommunikation
Nu, da vi ved hvad UART er, er det vigtigt at kende de tilknyttede parametre for UART.
To UART-enheder modtager og transmitterer data med samme frekvens. Når den modtagende UART-enhed registrerer en startbit, begynder den at læse de indgående bits med en bestemt frekvens kendt som baudhastigheden. Baudhastighed er en vigtig ting for UART-kommunikation, og den bruges til at måle hastigheden af dataoverførsel i bits pr. Sekund (bps). Denne baudhastighed for transmission og modtagelse skal have samme baudrate. Baudhastighedsforskellen mellem de transmitterende og modtagende UART'er kan kun være ca. 10%, før timingen af bits kommer for langt væk. De mest populære baudhastighedshastigheder er 4800, 9600, 115200 bps osv. Tidligere har vi brugt UART-kommunikation i mange andre mikrocontrollere, som er angivet nedenfor.
- UART-kommunikation mellem ATmega8 og Arduino Uno
- UART kommunikation mellem to ATmega8 mikrokontrollere
- UART-kommunikation ved hjælp af PIC Microcontrollers
- UART-kommunikation på STM8S Microcontroller
N76E003 har to UART'er - UART0 og UART1. I denne vejledning bruger vi UART-periferienheden på N76E003 mikrokontroller- enhed. Uden at spilde meget tid, lad os evaluere, hvilken type hardwareopsætning, vi har brug for til denne applikation.
Hardwarekrav og opsætning
Den vigtigste komponent, der kræves til dette projekt, er USB til UART- eller TTL-konverteringsmodulet, der gør det nødvendige interface mellem pc'en og den bærbare computer med mikrocontroller-modulet. Til dette projekt bruger vi CP2102- baseret USB til UART-modul, der er vist nedenfor.
For ikke at nævne, bortset fra ovenstående komponent, har vi brug for det N76E003 mikrokontroller- baserede udviklingskort såvel som Nu-Link Programmer. En ekstra 5V strømforsyningsenhed kan være påkrævet, hvis programmøren ikke bruges som strømkilde.
Kredsløbsdiagram for Nuvoton N76E003 UART-kommunikation
Som vi kan se i nedenstående skema for udviklingskort, bruges 2. og 3. ben på mikrokontroller-enheden som henholdsvis en UART0 Tx og Rx. Yderst til venstre vises forbindelsen til programmeringsgrænsefladen.
UART Pins på Nuvoton N76E003 Microcontroller
N76E003 har 20 ben, hvoraf 4 ben kan bruges til UART-kommunikation. Billedet nedenfor viser UART-benene fremhævet i en rød firkantet boks (Rx) og den blå firkantede boks (Tx).
Til UART0 bruges pin 2 og 3 til UART-kommunikation, og til UART1 bruges pin 8 og pin 18 til kommunikation.
UART registrerer sig i Nuvoton N76E003 Microcontroller
N76E003 har to forbedrede full-duplex UART'er med automatisk adressegenkendelse og indramningsfejlregistrering - UART0 og UART1. Disse to UART'er styres ved hjælp af registre, der er kategoriseret i to forskellige UART'er. Der er to par RX- og TX-ben tilgængelige i N76E003 til UART-operationer. Således er det første trin at vælge den ønskede UART-port til operationer.
I denne vejledning bruger vi UART0, så konfigurationen vises kun for UART0. UART1 vil have den samme konfiguration, men registrene vil være forskellige.
Efter valg af en UART (UART0 i dette tilfælde) skal de I / O-ben, der skal bruges til RX- og TX-kommunikation, konfigureres som input og output. RX-stiften på UART0 er stift 3 i den mikrocontroller, der er Port 0.7. Da dette er en seriel portmodtagestift, skal Port 0.7 indstilles som input. På den anden side er Port 0.6, som er den anden pin på mikrocontrolleren, en sendestift eller output pin. Det skal indstilles som en kvasi tovejs-tilstand. Disse kan vælges ved hjælp af PxM1 og PxM2 registeret. Disse to registre indstiller I / O-tilstande, hvor x står for portnummeret (for eksempel Port P1.0 vil registret være P1M1 og P1M2, for P3.0 vil det være P3M1 og P3M2 osv.) Konfigurationen kan ses i nedenstående billede-
UART-driftstilstande i N76E003
Derefter er det næste trin at bestemme tilstanden for UART-operationer. De to UART'er kunne fungere i 4 tilstande. Tilstande er-
Som vi kan se, vælger SM0 og SM1 (7. og 6. bit i SCON-register) tilstanden til UART-operationer. Mode 0 er den synkrone operation, og de andre tre tilstande er asynkrone operationer. Men den Baud Rate generatoren og Frame bits er forskellige for hver seriel port mode. Enhver af tilstande kan vælges efter applikationskrav, og dette er også det samme for UART1. Til denne tutorial bruges 10 bit operation med timer 3 overløbshastighed divideret med 32 eller 16.
Nu er det tid til at få information og konfigurere SCON-registret (SCON_1 til UART1) til UART0.
Den 6. og 7. bit indstiller UART-tilstanden som beskrevet tidligere. Bit 5 bruges til at indstille Multiprocessor kommunikationstilstand for at aktivere indstillinger. Processen afhænger dog af hvilken UART-tilstand der er valgt. Bortset fra disse vil REN-bit blive indstillet til 1 for at muliggøre modtagelse, og TI-flag vil blive indstillet til 1 for printf- funktion, der skal bruges i stedet for brugerdefineret UART0-sendefunktion.
Det næste vigtige register er Power Control Register (PCON) (Timer 3 bit 7 og 6 for UART1) registeret. Hvis du er nybegynder med timere, skal du tjekke Nuvoton N76E003 Timer-selvstudiet for at forstå, hvordan du bruger timere på N76E003 Microcontroller.
SMOD-biten er vigtig for at vælge den dobbelte baudrate i UART0-tilstand 1. Når vi bruger timeren 3, skal Timer 3-kontrolregistret T3CON konfigureres. Imidlertid er bit 7. og 6. reserveret til dobbelt datahastighedsindstilling for UART1.
Og Timer 3-forskaleringsværdien-
Den 5. bit BRCK indstiller Timer 3 som baudfrekvensurskilde for UART1. Nu får databladet til N76E003 formlen til beregning af den ønskede baudhastighed samt prøvesætværdi for Timer 3 (16-bit) høje og lave registre.
Eksempelværdi for 16 Mhz urkilde-
Således skal baudhastigheden konfigureres i Timer 3-registeret ved hjælp af ovenstående formel. For vores sag vil det være formlen 4. Derefter afslutter UART0 initialiseringstimeren 3. Start af Timer 3 ved at indstille TR3-registeret til 1 UART0 Initialisering Timer 3. At modtage og sendt UART0-dataene til brug af nedenstående register-
Den SBUF register automatisk bliver konfigureret til at modtage og sende. For at modtage data fra UART skal du vente på, at RI-flaget indstiller 1 og læse SBUF-registret og sende dataene til UART0, sende dataene til SBUF og vente på, at TI-flagget får 1 for at bekræfte vellykket datatransmission.
Programmering af Nuvoton N76E003 til UART-kommunikation
Kodningsdelen er enkel, og den komplette kode, der bruges i denne vejledning, kan findes nederst på denne side. Forklaringen på koden er som følger, UART0 initialiseres til 9600 baudhastigheder ved hjælp af udsagnet i hovedfunktionen-
InitialUART0_Timer3 (9600);
Ovenstående funktion er defineret i filen common.c , og den konfigurerer UART0 med Timer 3 som baudhastighedskilde, i tilstand 1 og med en baudhastighed på 9600. Funktionsdefinitionen er som følger-
ugyldig InitialUART0_Timer3 (UINT32 u32Baudrate) // brug timer3 som Baudrate generator { P06_Quasi_Mode; // Indstilling af UART-pin som kvasitilstand til transmission af P07_Input_Mode; // Indstilling af UART-pin som inputtilstand for modtagelse af SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 Double Rate Enable T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 baudrate urkilde = Timer3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / #endif #ifdef FOSC_166000 RH3 = HIBYTE (65536 - (1037500 / u32Baudrate)); /*16,6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /*16,6 MHz * / #endif sæt_TR3; // Trigger Timer3 sæt_TI; // For printf-funktion skal indstilling TI = 1 }
Erklæringen udføres trin for trin som beskrevet tidligere, og registre konfigureres i overensstemmelse hermed. Imidlertid er der i BSP-biblioteket i N76E003 en fejl, der er i stedet for P07_Input_Mode; der er P07_Quasi_Mode . På grund af dette fungerer UART-modtagefunktionen ikke.
Baudhastigheden er også konfigureret ifølge baudhastighedsindgangen og ved hjælp af formlen angivet i databladet. Nu, i hovedfunktionen eller mens løkken bruges printf-funktionen. For at bruge printf- funktionen skal TI indstilles til 1. Bortset fra dette, i mens loop bruges en switchcase, og i henhold til de modtagne UART-data udskrives værdien.
mens (1) { printf ("\ r \ nTryk på 1 eller tryk på 2 eller tryk på 3 eller tryk på 4"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 er trykket"); pause; tilfælde '2': printf ("\ r \ n2 trykkes"); pause; tilfælde '3': printf ("\ r \ n3 trykkes"); pause; tilfælde '4': printf ("\ r \ n4 trykkes"); pause; standard: printf ("\ r \ n forkert tast nede"); } Timer0_Delay1ms (300); } }
Nå, for UART0 modtage Receive_Data_From_UART0 (); funktionen bruges. Det er også defineret i common.c- biblioteket.
UINT8 Receive_Data_From_UART0 (ugyldigt) { UINT8 c; mens (! RI); c = SBUF; RI = 0; returnere (c); }
Det vil vente på, at RI-flag får 1 og returnerer modtagedata ved hjælp af variablen c.
Blinker koden og output
Koden returnerede 0 advarsel og 0 fejl og blinkede ved hjælp af standardblinkmetoden af Keil. Hvis du ikke er sikker på, hvordan du kompilerer og uploader kode, skal du tjekke at komme i gang med nuvoton-artiklen. Nedenstående linjer bekræfter, at vores kode er uploadet med succes.
Genopbygning startet: Projekt: printf_UART0 Genopbyg mål 'GPIO' kompilering PUTCHAR.C… kompilering Print_UART0.C… kompilering Delay.c… kompilering Common.c… samling STARTUP.A51… linking… Programstørrelse: data = 54,2 xdata = 0 kode = 2341 opretter hex-fil fra ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 Fejl, 0 Advarsel. Forløbet byggetid: 00:00:02 Indlæs "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Slet udført. Flash Skriv Udført: 2341 byte programmeret. Flash-bekræftelse udført: 2341 byte verificeret. Flashbelastning afsluttet kl
Udviklingskortet er forbundet i strømkilden via programmøren og den bærbare computer ved hjælp af USB til UART-modulet. For at få vist eller sende UART-data kræves en seriel skærmsoftware. Jeg bruger terabegrebet til denne proces.
Som du kan se i billedet nedenfor, kunne jeg vise strengene sendt fra vores nuvoton-controller og vise det på den serielle skærmsoftware. Kunne også læse værdier fra den serielle skærm.
Du kan tjekke den linkede video nedenfor for den komplette demonstration af denne vejledning. Håber du nød artiklen og lærte noget nyttigt. Hvis du har spørgsmål, kan du lade dem være i kommentarfeltet nedenfor eller bruge vores fora til at stille andre tekniske spørgsmål.