- Základy komunikace UART
- Hardwarové požadavky a nastavení
- Schéma zapojení pro komunikaci Nuvoton N76E003 UART
- Kolíky UART na mikrokontroléru Nuvoton N76E003
- UART se registruje v mikrokontroléru Nuvoton N76E003
- Provozní režimy UART v N76E003
- Programování Nuvoton N76E003 pro komunikaci UART
UART znamená Universal Asynchronous Receiver / Transmitter a je to užitečná hardwarová funkce v každé jednotce mikrokontroléru. Mikrokontrolér musí přijímat data, zpracovávat je a odesílat do ostatních zařízení. V mikrokontroléru jsou k dispozici různé typy komunikačních protokolů, ale UART je nejpoužívanější mezi ostatními komunikačními protokoly, jako jsou SPI a I2C. Pokud někdo potřebuje sériově přijímat nebo přenášet data, je UART vždy nejjednodušší a běžnou volbou. Výhodou UART je, že k přenosu dat mezi zařízeními vyžaduje pouze dva vodiče. V pokračování našeho Výukového programu pro mikrokontroléry Nuvoton se v tomto článku naučíte, jak provádět sériovou komunikaci pomocí mikrokontroléru N76E003.
Základy komunikace UART
Nyní, když víme, co je UART, je důležité znát související parametry UART.
Dvě zařízení UART přijímají a vysílají data na stejné frekvenci. Když přijímající zařízení UART detekuje počáteční bit, začne číst příchozí bity na specifické frekvenci známé jako přenosová rychlost. Přenosová rychlost je pro komunikaci UART důležitá a používá se k měření rychlosti přenosu dat v bitech za sekundu (b / s). Tato přenosová rychlost pro vysílání a příjem musí být na stejné přenosové rychlosti. Rozdíl rychlosti přenosové rychlosti mezi vysílajícím a přijímajícím UART může být pouze asi 10%, než se načasování bitů dostane příliš daleko. Nejoblíbenější rychlosti přenosové rychlosti jsou 4800, 9600, 115200 bps atd. Dříve jsme komunikaci UART používali i v mnoha dalších mikrokontrolérech, které jsou uvedeny níže.
- UART Komunikace mezi ATmega8 a Arduino Uno
- Komunikace UART mezi dvěma mikrokontroléry ATmega8
- Komunikace UART pomocí mikrokontrolérů PIC
- Komunikace UART na mikrokontroléru STM8S
N76E003 má dva UART - UART0 a UART1. V tomto tutoriálu použijeme periferní zařízení UART na jednotce mikrokontroléru N76E003. Aniž bychom ztratili mnoho času, pojďme vyhodnotit, jaké nastavení hardwaru požadujeme pro tuto aplikaci.
Hardwarové požadavky a nastavení
Hlavní komponentou, která je pro tento projekt vyžadována, je modul převaděče USB na UART nebo TTL, díky němuž bude rozhraní vyžadované mezi počítačem nebo notebookem s modulem mikrokontroléru. Pro tento projekt budeme používat CP2102 založený USB na UART modulu, který je uveden níže.
Nemluvě o tom, kromě výše uvedené komponenty potřebujeme vývojovou desku založenou na mikrokontroléru N76E003 a programátor Nu-Link. Pokud programátor nepoužíváte jako zdroj energie, může být zapotřebí další napájecí zdroj 5 V.
Schéma zapojení pro komunikaci Nuvoton N76E003 UART
Jak vidíme ve schématu vývojové desky níže, druhý a třetí pin jednotky mikrokontroléru se používají jako UART0 Tx a Rx. Zcela vlevo je zobrazeno připojení programovacího rozhraní.
Kolíky UART na mikrokontroléru Nuvoton N76E003
N76E003 má 20 pinů, z nichž 4 lze použít pro komunikaci UART. Níže uvedený obrázek ukazuje kolíky UART zvýrazněné v červeném čtvercovém rámečku (Rx) a modrém čtvercovém rámečku (Tx).
U UART0 se pro komunikaci UART používají kolíky 2 a 3 a pro UART1 se pro komunikaci používají kolíky 8 a 18.
UART se registruje v mikrokontroléru Nuvoton N76E003
N76E003 má dva vylepšené plně duplexní UART s automatickým rozpoznáním adresy a detekcí chyb rámování - UART0 a UART1. Tyto dva UART jsou řízeny pomocí registrů kategorizovaných do dvou různých UART. Pro operace UART jsou v N76E003 k dispozici dva páry pinů RX a TX. Prvním krokem je tedy výběr požadovaného portu UART pro operace.
V tomto kurzu použijeme UART0, takže konfigurace se zobrazí pouze pro UART0. UART1 bude mít stejnou konfiguraci, ale registry se budou lišit.
Po výběru jednoho UART (v tomto případě UART0) je třeba nakonfigurovat I / O piny, které je třeba použít pro komunikaci RX a TX, jako vstup a výstup. Pin RX UART0 je pin 3 mikrokontroléru, kterým je Port 0.7. Jelikož se jedná o přijímací kolík sériového portu, je třeba jako vstup nastavit port 0.7. Na druhé straně je port 0.6, který je druhým kolíkem mikrokontroléru, přenosovým kolíkem nebo výstupním kolíkem. Je třeba jej nastavit jako kvazi obousměrný režim. Ty lze vybrat pomocí registrů PxM1 a PxM2. Tyto dva registry nastavují I / O režimy, kde x znamená číslo portu (například Port P1.0 bude registr P1M1 a P1M2, pro P3.0 to budou P3M1 a P3M2 atd.) Konfiguraci lze být viděn na obrázku níže -
Provozní režimy UART v N76E003
Dalším krokem je pak určení režimu operací UART. Dva UARTy mohly pracovat ve 4 režimech. Režimy jsou -
Jak vidíme, SM0 a SM1 (7. a 6. bit registru SCON) volí režim operací UART. Režim 0 je synchronní provoz a ostatní tři režimy jsou asynchronní operace. Nicméně, přenosové rychlosti generátoru a Frame bity jsou různé pro každý režim sériového portu. Kterýkoli z režimů lze vybrat podle požadavků aplikace, což je stejné i pro UART1. Pro tento výukový program se používá 10bitová operace s časovým přepadem 3 dělená 32 nebo 16.
Nyní je čas získat informace a nakonfigurovat registr SCON (SCON_1 pro UART1) pro UART0.
Šestý a sedmý bit nastaví režim UART, jak bylo uvedeno výše. Bit 5 se používá k nastavení režimu komunikace více procesorů tak, aby byly povoleny možnosti. Proces však závisí na tom, který režim UART je vybrán. Kromě těchto bude bit REN nastaven na 1, aby byl umožněn příjem, a příznak TI bude nastaven na 1 pro funkci printf, která bude použita místo vlastní funkce přenosu UART0.
Dalším důležitým registrem je registr řízení výkonu (PCON) (časovač 3 bit 7 a 6 pro UART1). Pokud jste v časovači nováčkem, podívejte se na výukový program časovače Nuvoton N76E003, abyste pochopili, jak používat časovače na mikrokontroléru N76E003.
Bit SMOD je důležitý pro výběr dvojité přenosové rychlosti v režimu UART0 1. Nyní, když používáme časovač 3, je třeba nakonfigurovat řídicí registr Timer 3 T3CON. Bit 7. a 6. je však vyhrazen pro nastavení dvojnásobné rychlosti přenosu dat pro UART1.
A hodnota předškálovače Timer 3 -
Pátý bit BRCK nastaví časovač 3 jako zdroj hodin s přenosovou rychlostí pro UART1. Nyní je v datovém listu N76E003 uveden vzorec pro výpočet požadované přenosové rychlosti a také hodnota sady vzorků pro registry High a Low Timer 3 (16 bitů).
Ukázková hodnota pro 16 hodinový zdroj hodin -
Přenosovou rychlost je tedy třeba nakonfigurovat v registru časovače 3 pomocí výše uvedeného vzorce. V našem případě to bude Formule 4. Poté spuštění Timer 3 nastavením registru TR3 na 1 ukončí Inicializační časovač UART0 3. Chcete-li přijímat a odesílat data UART0 k použití níže uvedeného registru -
SBUF registr automaticky dostane konfigurován pro příjem a vysílání. Chcete-li přijímat data z UART, počkejte, až příznak RI nastaví 1 a přečte registr SBUF a odešle data do UART0, odešle data do SBUF a počká, až příznak TI získá 1, aby potvrdil úspěšný přenos dat.
Programování Nuvoton N76E003 pro komunikaci UART
Část pro kódování je jednoduchá a kompletní kód použitý v tomto výukovém programu najdete ve spodní části této stránky. Vysvětlení kódu je následující: UART0 je inicializován na 9600 přenosových rychlostí pomocí příkazu v hlavní funkci -
InitialUART0_Timer3 (9600);
Výše uvedená funkce je definována v souboru common.c a konfiguruje UART0 s časovačem 3 jako zdrojem přenosové rychlosti, v režimu 1 a s přenosovou rychlostí 9600. Definice funkce je následující -
void InitialUART0_Timer3 (UINT32 u32Baudrate) // použít timer3 jako generátor přenosové rychlosti { P06_Quasi_Mode; // Nastavení UART pinu jako kvazi režimu pro přenos P07_Input_Mode; // Nastavení UART pinu jako vstupního režimu pro pří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 hodin s přenosovou rychlostí UART0 = 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; // Spouštěcí časovač3 set_TI; // Pro funkci printf musí být nastaveno TI = 1 }
Deklarace se provádí krok za krokem, jak bylo popsáno výše, a registry jsou odpovídajícím způsobem nakonfigurovány. V knihovně BSP N76E003 je však chyba, která je místo P07_Input_Mode; existuje P07_Quasi_Mode . Z tohoto důvodu nebude funkce UART příjem fungovat.
Přenosová rychlost je také konfigurována podle vstupu přenosové rychlosti a pomocí vzorce uvedeného v datovém listu. Nyní se v hlavní funkci nebo smyčce while používá funkce printf. Chcete-li použít funkci printf , je třeba nastavit TI na 1. Kromě toho se ve smyčce while používá případ přepínače a podle přijatých dat UART se hodnota vytiskne.
while (1) { printf ("\ r \ n Stiskněte 1 nebo stiskněte 2 nebo stiskněte 3 nebo stiskněte 4"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 je stisknuto"); přestávka; případ '2': printf ("\ r \ n2 je stisknuto"); přestávka; případ '3': printf ("\ r \ n3 je stisknuto"); přestávka; případ '4': printf ("\ r \ n4 je stisknuto"); přestávka; výchozí: printf ("\ r \ nšpatné stisknutí klávesy"); } Timer0_Delay1ms (300); } }
Pro UART0 obdržíte Receive_Data_From_UART0 (); je použita funkce. Je také definován v knihovně common.c .
UINT8 Receive_Data_From_UART0 (void) { UINT8 c; while (! RI); c = SBUF; RI = 0; návrat (c); }
Bude čekat, až příznak RI získá 1 a vrátí přijímaná data pomocí proměnné c.
Blikající kód a výstup
Kód vrátil 0 varování a 0 chyb a blikal pomocí výchozí metody blikání Keilem. Pokud si nejste jisti, jak kompilovat a nahrát kód, podívejte se na článek Začínáme s nuvotonem. Níže uvedené řádky potvrzují, že náš kód byl úspěšně nahrán.
Rebuild started: Project: printf_UART0 Rebuild target 'GPIO' compiling PUTCHAR.C… compiling Print_UART0.C… compiling Delay.c… compiling Common.c… assembling STARTUP.A51… linking… Velikost programu: data = 54,2 xdata = 0 kód = 2341 vytváření hexadecimálního souboru z ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 Chyba (y), 0 Varování (y). Uplynul čas sestavení: 00:00:02 Načíst "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Výstup \\ Printf_UART1" Vymazat Flash Hotovo. Flash Write Hotovo: Naprogramováno 2341 bytů. Flash Verify Hotovo: 2341 bytů ověřeno. Flash zatížení skončilo v 15:48:08
Vývojová deska je připojena ke zdroji energie prostřednictvím programátoru a notebooku pomocí modulu USB na UART. K zobrazení nebo odeslání dat UART je vyžadován software sériového monitoru. Pro tento proces používám tera termín.
Jak vidíte na následujícím obrázku, dokázal jsem zobrazit řetězce odeslané z našeho ovladače nuvoton a zobrazit je na softwaru sériového monitoru. Také byl schopen číst hodnoty ze sériového monitoru.
Kompletní ukázku tohoto tutoriálu si můžete prohlédnout na níže odkazovaném videu. Doufám, že se vám článek líbil a naučili jste se něco užitečného. Máte-li jakékoli dotazy, můžete je zanechat v sekci komentářů níže nebo použít naše fóra k odeslání dalších technických otázek.