- Osnove komunikacije UART
- Zahteva in namestitev strojne opreme
- Shema vezja za komunikacijo Nuvoton N76E003 UART
- UART zatiči na mikrokrmilniku Nuvoton N76E003
- UART se registrira v mikrokrmilniku Nuvoton N76E003
- Načini delovanja UART v N76E003
- Programiranje Nuvoton N76E003 za komunikacijo UART
UART pomeni Univerzalni asinhroni sprejemnik / oddajnik in je uporabna funkcija strojne opreme v kateri koli mikrokrmilni enoti. Mikrokrmilnik mora sprejeti podatke, jih obdelati in poslati drugim napravam. V mikrokrmilniku so na voljo različne vrste komunikacijskih protokolov, vendar je UART med drugimi komunikacijskimi protokoli, kot sta SPI in I2C, najbolj uporabljen. Če mora nekdo podatke prejemati ali oddajati zaporedno, je UART vedno najpreprostejša in najpogostejša možnost. Prednost UART je, da za prenos podatkov med napravami potrebujete le dve žici. V nadaljevanju naše vadnice za mikrokrmilnik Nuvoton bomo v tem članku izvedeli, kako izvajati serijsko komunikacijo z mikrokrmilnikom N76E003.
Osnove komunikacije UART
Zdaj, ko vemo, kaj je UART, je pomembno vedeti povezane parametre UART.
Dve napravi UART sprejemata in prenašata podatke z isto frekvenco. Ko sprejemna naprava UART zazna začetni bit, začne odčitavati dohodne bite s točno določeno frekvenco, imenovano hitrost prenosa. Hitrost prenosa je pomembna stvar za komunikacijo UART in se uporablja za merjenje hitrosti prenosa podatkov v bitih na sekundo (bps). Ta hitrost prenosa podatkov mora biti enaka hitrosti prenosa in prenosa. Razlika v hitrosti prenosa med oddajnim in sprejemnim UART-jem je lahko le približno 10%, preden se časovni razpored bitov preveč oddalji. Najbolj priljubljene hitrosti prenosa so 4800, 9600, 115200 bps itd. Prej smo komunikacijo UART uporabljali tudi v številnih drugih mikrokrmilnikih, ki so navedeni spodaj.
- UART Komunikacija med ATmega8 in Arduino Uno
- UART komunikacija med dvema mikrokontrolerjema ATmega8
- UART komunikacija z uporabo mikrokrmilnikov PIC
- UART komunikacija na mikrokrmilniku STM8S
N76E003 ima dva UART - UART0 in UART1. V tej vadnici bomo uporabili zunanjo napravo UART na mikrokrmilni enoti N76E003. Ne da bi zapravili veliko časa, ocenimo, kakšno nastavitev strojne opreme potrebujemo za to aplikacijo.
Zahteva in namestitev strojne opreme
Glavna komponenta, ki je potrebna za ta projekt, je pretvorniški modul USB v UART ali TTL, ki bo naredil potreben vmesnik med osebnim računalnikom ali prenosnikom z modulom mikrokrmilnika. Za ta projekt bomo uporabili modul USB do UART na osnovi CP2102, ki je prikazan spodaj.
Da ne omenjam, razen zgornje komponente potrebujemo razvojno ploščo na osnovi mikrokrmilnika N76E003 in programer Nu-Link. Če se programer ne uporablja kot vir napajanja, bo morda potrebna dodatna napajalna enota 5 V.
Shema vezja za komunikacijo Nuvoton N76E003 UART
Kot lahko vidimo v spodnji shemi razvojne plošče, se 2. in 3. zatič enote mikrokrmilnika uporabljata kot UART0 Tx oziroma Rx. Skrajno levo je prikazana povezava s programskim vmesnikom.
UART zatiči na mikrokrmilniku Nuvoton N76E003
N76E003 ima 20 nožic, od tega 4 nožice za komunikacijo UART. Spodnja slika prikazuje zatiče UART, označene v rdečem kvadratnem polju (Rx) in modrem kvadratnem polju (Tx).
Za UART0 se za komunikacijo UART uporabljata pin 2 in 3, za UART1 pa za komunikacijo pin 8 in pin 18.
UART se registrira v mikrokrmilniku Nuvoton N76E003
N76E003 ima dva izboljšana UART s polnim dupleksom s samodejnim prepoznavanjem naslovov in zaznavanjem napak pri kadriranju - UART0 in UART1. Ta dva UART-a nadzorujeta z uporabo registrov, razvrščenih v dva različna UART-a. Za operacije UART sta v N76E003 na voljo dva para zatičev RX in TX. Tako je prvi korak izbira želenih vrat UART za delovanje.
V tej vadnici bomo uporabili UART0, zato bo konfiguracija prikazana samo za UART0. UART1 bo imel enako konfiguracijo, vendar se bodo registri razlikovali.
Po izbiri enega UART (v tem primeru UART0) je treba V / I nožice, ki jih je treba uporabiti za RX in TX komunikacijo, konfigurirati kot vhod in izhod. Zatič RX UART0 je zatič 3 mikrokrmilnika, ki je vrata 0.7. Ker gre za zaporedni priključek za sprejem vrat, je treba vrata 0.7 nastaviti kot vhod. Po drugi strani pa je vrata 0.6, ki so drugi zatiči mikrokrmilnika, prenosni ali izhodni zatiči. Nastaviti ga je treba kot kvazi dvosmerni način. Te lahko izberete s pomočjo registra PxM1 in PxM2. Ta dva registra nastavita načina V / I, kjer x pomeni številko vrat (na primer vrata P1.0 bodo registra P1M1 in P1M2, za P3.0 bodo P3M1 in P3M2 itd.) lahko vidite na spodnji sliki-
Načini delovanja UART v N76E003
Nato je naslednji korak določitev načina delovanja UART. Oba UART-a sta lahko delovala v 4 načinih. Načini so-
Kot lahko vidimo, SM0 in SM1 (7. in 6. bit registra SCON) izbereta način delovanja UART. Način 0 je sinhrono delovanje, ostali trije načini pa so asinhroni. Vendar sta generator hitrosti prenosa in bitni bit različni za vsak način serijskih vrat. Izbere se lahko kateri koli od načinov glede na zahtevo aplikacije, kar je enako tudi za UART1. V tej vadnici je uporabljena 10-bitna operacija s hitrostjo prelivanja 3, deljena z 32 ali 16.
Zdaj je čas, da pridobite informacije in konfigurirate register SCON (SCON_1 za UART1) za UART0.
6. in 7. bit nastavita način UART, kot smo že omenili. Bit 5 se uporablja za nastavitev večprocesorskega komunikacijskega načina, da omogoči možnosti. Vendar je postopek odvisen od tega, kateri način UART je izbran. Razen teh bo bit REN nastavljen na 1, da omogoči sprejem, zastavica TI pa na 1, da se uporabi funkcija printf namesto funkcije pošiljanja UART0 po meri.
Naslednji pomemben register je register za nadzor napajanja (PCON) (časovnik 3 bit 7 in 6 za UART1). Če ne poznate časovnikov, si oglejte vadnico Nuvoton N76E003 Timer, da boste razumeli, kako uporabljati merilnike časa na mikrokrmilniku N76E003.
Bit SMOD je pomemben za izbiro hitrosti dvojnega prenosa v načinu UART0 1. Zdaj, ko uporabljamo časovnik 3, je treba konfigurirati nadzorni register Timer 3 T3CON. Vendar sta bit 7. in 6. rezervirana za nastavitev dvojne hitrosti prenosa podatkov za UART1.
In vrednost predštevilnika Timer 3 -
5. bitni BRCK bo časovnik 3 postavil kot vir hitrosti prenosa za UART1. Zdaj je v obrazcu N76E003 dana formula za izračun želene hitrosti prenosa podatkov in nastavljena vrednost vzorca za visoke in nizke registre časovnika 3 (16-bitni).
Vzorčna vrednost za vir ure 16 MHz -
Tako je treba hitrost prenosa konfigurirati v registru Timer 3 z uporabo zgornje formule. V našem primeru bo to Formula 4. Po tem se z zagonom časovnika 3 z nastavitvijo registra TR3 na 1 zaključi UART0 Initialization Timer 3. Za sprejem in pošiljanje podatkov UART0 za uporabo spodnjega registra
Register SBUF se samodejno nastavljen za sprejemanje in posredovanje. Če želite prejemati podatke iz UART, počakajte, da zastavica RI nastavi 1 in preberite register SBUF ter podatke pošljite UART0, pošljite podatke SBUF in počakajte, da zastavica TI dobi 1 za potrditev uspešnega prenosa podatkov.
Programiranje Nuvoton N76E003 za komunikacijo UART
Del kodiranja je preprost in celotno kodo, uporabljeno v tej vadnici, najdete na dnu te strani. Razlaga kode je naslednja: UART0 se inicializira s hitrostjo 9600 baudov z uporabo stavka v glavni funkciji-
Začetni UART0_Timer3 (9600);
Zgornja funkcija je definirana v datoteki common.c in konfigurira UART0 s časovnikom 3 kot virom hitrosti prenosa v načinu 1 in s hitrostjo prenosa 9600. Opredelitev funkcije je naslednja -
void InitialUART0_Timer3 (UINT32 u32Baudrate) // uporabi timer3 kot generator baudrata { P06_Quasi_Mode; // Nastavitev UART pin kot kvazi načina za prenos P07_Input_Mode; // Nastavitev UART zatiča kot vhodnega načina za prejemanje SCON = 0x50; // Način UART01, REN = 1, TI = 1 set_SMOD; // UART0 Double Rate Enable T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 baud rate rate source = 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 set_TR3; // Sprožilec 3 set_TI; // Za funkcijo printf mora biti nastavljena TI = 1 }
Deklaracija se izvede korak za korakom, kot smo že omenili, in registri se ustrezno konfigurirajo. Vendar pa v knjižnici BSP N76E003 obstaja napaka, ki je namesto P07_Input_Mode; obstaja P07_Quasi_Mode . Zaradi tega funkcija UART Receive ne bo delovala.
Hitrost prenosa je nastavljena tudi glede na vhodno hitrost prenosa in z uporabo formule, podane v obrazcu. Zdaj se v glavni funkciji ali zanki while uporablja funkcija printf. Za uporabo funkcije printf je treba TI nastaviti kot 1. Razen tega se v zanki while uporablja stikalno ohišje in glede na prejete podatke UART se vrednost natisne.
medtem ko (1) { printf ("\ r \ nPritisnite 1 ali pritisnite 2 ali pritisnite 3 ali pritisnite 4"); oper = Prejmi_podatke_iz_UART0 (); stikalo (oper) { primer '1': printf ("\ r \ n1 je pritisnjen"); odmor; primer '2': printf ("\ r \ n2 je pritisnjen"); odmor; primer '3': printf ("\ r \ n3 je pritisnjen"); odmor; primer '4': printf ("\ r \ n4 je pritisnjen"); odmor; privzeto: printf ("\ r \ nNepravilna tipka pritisnjena"); } Timer0_Delay1ms (300); } }
No, za UART0 prejmite Receive_Data_From_UART0 (); funkcija. Določen je tudi v knjižnici common.c .
UINT8 Receive_Data_From_UART0 (void) { UINT8 c; medtem ko (! RI); c = SBUF; RI = 0; vrnitev (c); }
Počakal bo, da zastavica RI dobi 1 in vrne podatke o prejemu s spremenljivko c.
Utripanje kode in izhoda
Koda je vrnila 0 opozoril in 0 napak in utripala s privzeto utripajočo metodo Keil. Če niste prepričani, kako sestaviti in naložiti kodo, si oglejte članek o začetku z Nuvoton. Spodnje vrstice potrjujejo, da je bila naša koda uspešno naložena.
Obnova se je začela: Projekt: printf_UART0 Obnovi cilj 'GPIO', ki prevaja PUTCHAR.C… sestavlja Print_UART0.C… sestavlja Delay.c… sestavlja Common.c… sestavlja STARTUP.A51… povezuje… Velikost programa: podatki = 54,2 xdata = 0 koda = 2341 ustvarjanje šestnajstiške datoteke iz ". \ Izhod \ Printf_UART1"… ". \ Izhod \ Printf_UART1" - 0 Napake, 0 Opozorila. Čas gradnje potekel: 00:00:02 Naložite "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Erase Done. Flash Write Done: programirano 2341 bajtov. Flash Verify Končano: 2341 bajtov preverjeno. Flash Load končan ob 15:48:08
Razvojna plošča je v vir napajanja povezana s programatorjem in prenosnikom z uporabo modula USB do UART. Za prikaz ali pošiljanje podatkov UART je potrebna programska oprema za serijski monitor. Za ta postopek uporabljam izraz tera.
Kot lahko vidite na spodnji sliki, sem lahko prikazal nize, poslane iz našega krmilnika nuvoton, in jih prikazal na programski opremi serijskega monitorja. Prav tako je lahko prebral vrednosti s serijskega monitorja.
Za popoln prikaz te vadnice si lahko ogledate spodnji videoposnetek. Upam, da ste članek uživali in se naučili kaj koristnega. Če imate kakršna koli vprašanja, jih lahko pustite v spodnjem oddelku za komentarje ali uporabite naše forume za objavo drugih tehničnih vprašanj.