- Základy komunikácie UART
- Hardvérové požiadavky a nastavenie
- Schéma zapojenia pre komunikáciu Nuvoton N76E003 UART
- Kolíky UART na mikrokontroléri Nuvoton N76E003
- UART sa registruje v mikrokontroléri Nuvoton N76E003
- Prevádzkové režimy UART v N76E003
- Programovanie Nuvoton N76E003 pre komunikáciu UART
UART znamená univerzálny asynchrónny prijímač / vysielač a je to užitočná hardvérová funkcia v každej jednotke mikrokontroléra. Mikrokontrolér musí prijímať údaje, spracovávať ich a odosielať do ostatných zariadení. V mikrokontroléri sú k dispozícii rôzne typy komunikačných protokolov, avšak UART je spomedzi ostatných komunikačných protokolov ako SPI a I2C najpoužívanejší. Ak niekto potrebuje sériovo prijímať alebo prenášať dáta, UART je vždy najjednoduchšia a najbežnejšia voľba. Výhodou UART je, že na prenos dát medzi zariadeniami vyžaduje iba dva vodiče. V pokračovaní nášho Výukového programu pre mikrokontroléry Nuvoton sa v tomto článku dozvieme, ako vykonávať sériovú komunikáciu pomocou mikrokontroléra N76E003.
Základy komunikácie UART
Teraz, keď vieme, čo je UART, je dôležité poznať súvisiace parametre UART.
Dve zariadenia UART prijímajú a prenášajú údaje na rovnakej frekvencii. Keď prijímajúce zariadenie UART zistí štartovací bit, začne čítať prichádzajúce bity na špecifickej frekvencii známej ako prenosová rýchlosť. Prenosová rýchlosť je dôležitá pre komunikáciu UART a slúži na meranie rýchlosti prenosu dát v bitoch za sekundu (bps). Táto prenosová rýchlosť pre vysielanie a príjem musí byť rovnaká prenosová rýchlosť. Rozdiel v rýchlosti prenosovej rýchlosti medzi vysielajúcim a prijímajúcim UART môže byť iba asi 10% predtým, ako sa načasovanie bitov dostane príliš ďaleko. Najobľúbenejšie rýchlosti prenosovej rýchlosti sú 4800, 9600, 115200 bps atď. Komunikáciu UART sme predtým používali aj v mnohých ďalších mikrokontroléroch, ktoré sú uvedené nižšie.
- UART Komunikácia medzi ATmega8 a Arduino Uno
- Komunikácia UART medzi dvoma mikrokontrolérmi ATmega8
- Komunikácia UART pomocou mikrokontrolérov PIC
- Komunikácia UART na mikrokontroléri STM8S
N76E003 má dva UART - UART0 a UART1. V tomto návode použijeme perifériu UART na jednotke mikrokontroléra N76E003. Bez toho, aby sme strácali veľa času, poďme vyhodnotiť, aké nastavenie hardvéru vyžadujeme pre túto aplikáciu.
Hardvérové požiadavky a nastavenie
Hlavným komponentom, ktorý je potrebný pre tento projekt, je modul prevodníka USB na UART alebo TTL, vďaka ktorému bude požadované rozhranie medzi počítačom alebo notebookom s modulom mikrokontroléra. Pre tento projekt použijeme modul USB na UART založený na CP2102, ktorý je uvedený nižšie.
Nehovoriac o tom, že okrem vyššie uvedeného komponentu potrebujeme vývojovú dosku založenú na mikrokontroléroch N76E003, ako aj programátor Nu-Link. Ak sa programátor nepoužíva ako zdroj energie, môže byť potrebný ďalší zdroj napájania 5 V.
Schéma zapojenia pre komunikáciu Nuvoton N76E003 UART
Ako vidíme na schéme vývojovej dosky uvedenej nižšie, druhý a tretí pin jednotky mikrokontroléra sa používajú ako UART0 Tx a Rx. Úplne vľavo je zobrazené pripojenie programovacieho rozhrania.
Kolíky UART na mikrokontroléri Nuvoton N76E003
N76E003 má 20 pinov, z ktorých 4 je možné použiť pre komunikáciu UART. Na nasledujúcom obrázku sú zobrazené kolíky UART zvýraznené v červenom štvorcovom poli (Rx) a v modrom štvorcovom poli (Tx).
Pre UART0 sa pre komunikáciu UART používajú piny 2 a 3 a pre UART1 sa pre komunikáciu používajú piny 8 a 18.
UART sa registruje v mikrokontroléri Nuvoton N76E003
N76E003 má dva vylepšené plne duplexné UART s automatickým rozpoznávaním adries a detekciou chýb rámovania - UART0 a UART1. Tieto dva UART sú riadené pomocou registrov kategorizovaných do dvoch rôznych UART. Pre operácie UART sú v N76E003 k dispozícii dva páry pinov RX a TX. Prvým krokom je teda výber požadovaného portu UART pre operácie.
V tomto výučbe budeme používať UART0, takže konfigurácia sa zobrazí iba pre UART0. UART1 bude mať rovnakú konfiguráciu, ale registre sa budú líšiť.
Po výbere jedného UART (v tomto prípade UART0) je potrebné nakonfigurovať I / O piny, ktoré sú potrebné pre komunikáciu RX a TX, ako vstup a výstup. Pin RX UART0 je pin 3 mikrokontroléra, ktorým je Port 0.7. Pretože sa jedná o kolík na príjem sériového portu, je potrebné ako vstup nastaviť Port 0.7. Na druhej strane, port 0.6, ktorý je druhým pinom mikrokontroléra, je vysielací pin alebo výstupný pin. Je potrebné ho nastaviť ako kvázi obojsmerný režim. Tieto je možné zvoliť pomocou registrov PxM1 a PxM2. Tieto dva registre nastavujú I / O režimy, kde x predstavuje číslo portu (napríklad Port P1.0 bude register P1M1 a P1M2, pre P3.0 to budú P3M1 a P3M2 atď.) Konfiguráciu je možné je vidieť na obrázku nižšie -
Prevádzkové režimy UART v N76E003
Ďalším krokom je potom určenie režimu operácií UART. Dva UART mohli pracovať v 4 režimoch. Režimy sú -
Ako vidíme, SM0 a SM1 (7. a 6. bit registra SCON) vyberajú režim operácií UART. Režim 0 je synchrónna prevádzka a ďalšie tri režimy sú asynchrónne operácie. Avšak, prenosové rýchlosti generátora a Frame bity sú rôzne pre každý režim sériového portu. Ktokoľvek z režimov je možné zvoliť podľa požiadaviek aplikácie, a to je rovnaké aj pre UART1. Pre tento tutoriál sa používa 10 bitová prevádzka s preplňovacou frekvenciou časovača 3 vydelenou 32 alebo 16.
Teraz je čas získať informácie a nakonfigurovať register SCON (SCON_1 pre UART1) pre UART0.
Šiesty a siedmy bit nastaví režim UART, ako bolo uvedené vyššie. Bit 5 sa používa na nastavenie režimu komunikácie s viacerými procesormi, aby sa umožnili možnosti. Proces je však závislý od toho, ktorý režim UART je vybraný. Okrem týchto bude bit REN nastavený na 1, aby sa umožnil príjem, a príznak TI bude nastavený na 1 pre funkciu printf, ktorá sa má použiť namiesto vlastnej vysielacej funkcie UART0.
Ďalším dôležitým registrom je register riadenia výkonu (PCON) (časovač 3 bit 7 a 6 pre UART1). Ak ste v časovačoch nováčikom, prečítajte si návod Nuvoton N76E003 Timer, kde nájdete informácie o tom, ako používať časovače v mikrokontroléri N76E003.
Bit SMOD je dôležitý na výber dvojitej prenosovej rýchlosti v režime UART0 1. Teraz, keď používame časovač 3, je potrebné nakonfigurovať riadiaci register Timer 3 T3CON. Bit 7. a 6. je však vyhradený pre nastavenie dvojnásobnej dátovej rýchlosti pre UART1.
A hodnota predbežného škálovača Timer 3 -
Piaty bit BRCK nastaví časovač 3 ako zdroj hodín s prenosovou rýchlosťou pre UART1. Teraz je v technickom liste N76E003 uvedený vzorec na výpočet požadovanej prenosovej rýchlosti, ako aj hodnota sady vzoriek pre registry High a Low časovača 3 (16 bitov).
Vzorová hodnota pre 16 hodinový zdroj hodín -
Preto je potrebné nakonfigurovať prenosovú rýchlosť v registri časovača 3 pomocou vyššie uvedeného vzorca. V našom prípade to bude Formula 4. Potom spustením časovača 3 nastavením registra TR3 na 1 sa ukončí časovač inicializácie UART0 3. Na príjem a odoslanie údajov UART0 na použitie nižšie uvedeného registra-
SBUF register automaticky dostane konfigurovaný pre príjem a vysielanie. Ak chcete prijímať údaje z UART, počkajte, kým príznak RI nastaví hodnotu 1 a načíta register SBUF. Na odoslanie údajov do UART0 sa údaje pošlú na SBUF a počkajte, kým príznak TI získa hodnotu 1 na potvrdenie úspešného prenosu údajov.
Programovanie Nuvoton N76E003 pre komunikáciu UART
Programovacia časť je jednoduchá a kompletný kód použitý v tomto návode nájdete v spodnej časti tejto stránky. Vysvetlenie kódu je nasledovné: UART0 sa inicializuje na 9600 baudov pomocou príkazu v hlavnej funkcii
InitialUART0_Timer3 (9600);
Vyššie uvedená funkcia je definovaná v súbore common.c a konfiguruje UART0 s časovačom 3 ako zdrojom prenosovej rýchlosti, v režime 1 a s prenosovou rýchlosťou 9600. Definícia funkcie je nasledovná -
void InitialUART0_Timer3 (UINT32 u32Baudrate) // použije timer3 ako generátor Baudrate { P06_Quasi_Mode; // Nastavenie pinu UART ako kvázi módu pre prenos P07_Input_Mode; // Nastavenie pinu UART ako vstupného režimu pre príjem 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; // Zdroj hodín s prenosovou rýchlosťou UART0 = Časovač3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / RL3 = LOBYTE (65536 - (10 000 000 / u32 Baudrate) -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; // Časovač spúšťania3 set_TI; // Pre funkciu printf musí byť nastavenie TI = 1 }
Deklarácia sa robí krok za krokom, ako bolo diskutované vyššie, a podľa toho sa nakonfigurujú registre. Avšak v knižnici BSP N76E003 existuje chyba, ktorá je namiesto P07_Input_Mode; existuje P07_Quasi_Mode . Z tohto dôvodu nebude funkcia UART Receive fungovať.
Prenosová rýchlosť je tiež nakonfigurovaná podľa vstupu prenosovej rýchlosti a pomocou vzorca uvedeného v údajovom liste. Teraz sa v hlavnej funkcii alebo v cykle while používa funkcia printf. Ak chcete použiť funkciu printf , musí byť TI nastavený na 1. Okrem toho sa v slučke while používa prepínací prípad a podľa prijatých údajov UART sa hodnota vytlačí.
while (1) { printf ("\ r \ nStlačte 1 alebo stlačte 2 alebo stlačte 3 alebo stlačte 4"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 je stlačený"); prestávka; prípad '2': printf ("je stlačené \ r \ n2"); prestávka; prípad '3': printf ("je stlačené \ r \ n3"); prestávka; prípad '4': printf ("je stlačené \ r \ n4"); prestávka; predvolené: printf ("\ r \ nšpatné stlačenie klávesu"); } Timer0_Delay1ms (300); } }
Pre UART0 prijímajte Receive_Data_From_UART0 (); funkcia sa používa. Definuje sa tiež v knižnici common.c .
UINT8 Receive_Data_From_UART0 (neplatné) { UINT8 c; while (! RI); c = SBUF; RI = 0; návrat (c); }
Bude čakať na príznak RI, ktorý získa 1, a vráti prijaté dáta pomocou premennej c.
Bliká kód a výstup
Kód vrátil 0 varovaní a 0 chýb a blikal pomocou predvolenej metódy blikania pomocou Keila. Ak si nie ste istí, ako zostaviť a nahrať kód, prečítajte si článok Začíname s nuvotonom. Nasledujúce riadky potvrdzujú, že náš kód bol úspešne nahraný.
Opätovné zostavenie zahájené: Projekt: printf_UART0 Znovu vytvoriť cieľové „GPIO“ kompilujúce PUTCHAR.C… kompilujúce Print_UART0.C… kompilujúce Delay.c… kompilujúce Common.c… zostavujúce STARTUP.A51… prepojujúce… Veľkosť programu: data = 54,2 xdata = 0 kód = 2341 vytváranie hexadecimálneho súboru z ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 chýb, 0 varovaní. Uplynutý čas zostavenia: 00:00:02 Načítanie „G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Výstup \\ Printf_UART1" Vymazanie blesku hotovo. Flash Write Hotovo: naprogramovaných 2341 bajtov. Flash Verify Hotovo: 2341 bajtov overených. Flash načítanie skončilo o 15:48:08
Vývojová doska je pripojená k zdroju napájania cez programátor a notebook pomocou modulu USB na UART. Na zobrazenie alebo odoslanie údajov UART je potrebný softvér pre sériový monitor. Pre tento proces používam tera termín.
Ako vidíte na obrázku nižšie, dokázal som zobraziť reťazce odoslané z nášho radiča nuvoton a zobraziť ich na softvéri sériového monitora. Tiež bol schopný načítať hodnoty zo sériového monitora.
Kompletné ukážky tohto tutoriálu si môžete pozrieť na videu, na ktoré odkazujete nižšie. Dúfam, že sa vám článok páčil a dozvedeli ste sa niečo užitočné. Ak máte akékoľvek otázky, môžete ich zanechať v sekcii komentárov nižšie alebo použiť naše fóra na zverejnenie ďalších technických otázok.