- Az UART kommunikáció alapjai
- Hardverigény és beállítás
- Áramkör a Nuvoton N76E003 UART kommunikációhoz
- UART csapok a Nuvoton N76E003 mikrokontrolleren
- Az UART regisztrál a Nuvoton N76E003 mikrokontrollerben
- UART működési módok az N76E003-ban
- A Nuvoton N76E003 programozása az UART kommunikációhoz
Az UART az univerzális aszinkron vevőt / adót jelenti, és hasznos hardverfunkció minden mikrovezérlő egységben. A mikrovezérlőnek adatokat kell fogadnia, feldolgoznia és el kell küldenie a többi eszköznek. Különböző típusú kommunikációs protokollok állnak rendelkezésre a mikrokontrollerben, azonban az UART a leggyakrabban használt a többi kommunikációs protokoll, például az SPI és az I2C között. Ha valakinek sorozatosan kell adatokat fogadnia vagy továbbítania, az UART mindig a legegyszerűbb és leggyakoribb lehetőség. Az UART előnye, hogy csak két vezetékre van szükség az adatok továbbításához az eszközök között. A Nuvoton mikrokontroller oktatóanyagunk folytatásával ebben a cikkben megtanuljuk, hogyan lehet soros kommunikációt végezni az N76E003 mikrokontroller használatával.
Az UART kommunikáció alapjai
Most, hogy tudjuk, mi az UART, fontos tudni az UART kapcsolódó paramétereit.
Két UART eszköz ugyanazon a frekvencián fogad és küld adatokat. Amikor a fogadó UART eszköz észlel egy kezdőbitet, elkezdi olvasni a bejövő biteket egy meghatározott frekvencián, amelyet átviteli sebességnek hívnak. A adatátviteli sebesség fontos dolog az UART kommunikáció szempontjából, és az adatátvitel sebességének bit / másodperc (bps) mérésére szolgál. Ennek az adatátviteli sebességnek az átvitel és a vétel esetében azonos sebességgel kell lennie. Az átviteli sebesség sebességkülönbsége az adó és a fogadó UART között csak körülbelül 10% lehet, mielőtt a bitek időzítése túl messzire kerül. A legnépszerűbb adatátviteli sebesség 4800, 9600, 115200 bps, stb. Korábban az UART kommunikációt sok más mikrovezérlőben is használtuk, amelyek alább fel vannak sorolva.
- UART Kommunikáció az ATmega8 és az Arduino Uno között
- UART kommunikáció két ATmega8 mikrokontroller között
- UART kommunikáció PIC mikrokontrollerek segítségével
- UART kommunikáció az STM8S mikrovezérlőn
Az N76E003 két UART-mal rendelkezik - UART0 és UART1. Ebben az oktatóanyagban az U76 perifériát fogjuk használni az N76E003 mikrovezérlő egységen. Anélkül, hogy sok időt pazarolnánk, értékeljük, hogy milyen hardverbeállításokra van szükségünk ehhez az alkalmazáshoz.
Hardverigény és beállítás
A projekt fő összetevője az USB-UART vagy TTL átalakító modul, amely megköveteli a szükséges interfészt a PC vagy a Laptop és a mikrokontroller modul között. Ehhez a projekthez az alább látható CP2102 alapú USB-UART modult fogjuk használni.
Nem is beszélve arról, hogy a fenti összetevőn kívül szükségünk van az N76E003 mikrokontroller alapú fejlesztőtáblára, valamint a Nu-Link programozóra. További 5 V-os tápegységre lehet szükség, ha a programozót nem áramforrásként használják.
Áramkör a Nuvoton N76E003 UART kommunikációhoz
Amint az alábbi fejlesztőkártya vázlatán láthatjuk, a mikrovezérlő egység 2. és 3. érintkezőjét UART0 Tx-ként, illetve Rx-ként használják. A bal szélső részen látható a programozási felület kapcsolata.
UART csapok a Nuvoton N76E003 mikrokontrolleren
Az N76E003 20 érintkezõvel rendelkezik, amelyekbõl 4 érintkezõ használható az UART kommunikációhoz. Az alábbi képen az UART csapok láthatók, piros négyzet (Rx) és kék négyzet (Tx) mezőben kiemelve.
Az UART0 esetében a 2. és a 3. érintkezőt használják az UART kommunikációhoz, az UART1 esetében pedig a 8. és a 18. tűt használják a kommunikációhoz.
Az UART regisztrál a Nuvoton N76E003 mikrokontrollerben
Az N76E003 két továbbfejlesztett full-duplex UART- mal rendelkezik, automatikus címfelismeréssel és keretezési hibák észlelésével - UART0 és UART1. Ezt a két UART-t két különböző UART-ba sorolt regiszterek segítségével vezérlik. Az N76E003-ban két pár RX és TX tű áll rendelkezésre az UART műveletekhez. Így az első lépés a kívánt UART port kiválasztása a műveletekhez.
Ebben az oktatóanyagban az UART0-t fogjuk használni , így a konfiguráció csak az UART0-hoz fog megjelenni. Az UART1 konfigurációja ugyanaz lesz, de a regiszterek különböznek.
Egy UART (ebben az esetben UART0) kiválasztása után az RX és TX kommunikációhoz szükséges I / O csapokat be- és kimenetként kell konfigurálni. Az UART0 RX tűje a mikrokontroller 3. tűje, amely a 0.7-es port. Mivel ez egy soros port vételi tűje, a 0.7 portot kell bemenetként beállítani. Másrészt a 0.6-os port, amely a mikrovezérlő 2. csapja, egy adótű vagy kimeneti tű. Kvázi kétirányú módként kell beállítani. Ezeket a PxM1 és PxM2 regiszter segítségével választhatjuk ki. Ez a két regiszter állítja be az I / O módokat, ahol az x a portszámot jelenti (például a P1.0 portnál a regiszter P1M1 és P1M2 lesz, a P3.0 esetében pedig P3M1 és P3M2 stb.). látható az alábbi kép-
UART működési módok az N76E003-ban
Ezután a következő lépés az UART műveletek módjának meghatározása. A két UART 4 módban működhetett. A módok
Mint láthatjuk, az SM0 és az SM1 (a SCON regiszter 7. és 6. bitje) választja ki az UART műveletek módját. A 0 mód a szinkron művelet, a másik három mód pedig aszinkron művelet. A Baud Rate generátor és a Frame bit azonban különbözik minden soros port módnál. Bármelyik üzemmód kiválasztható az alkalmazás követelményeinek megfelelően, és ez ugyanaz az UART1 esetében is. Ehhez az oktatóanyaghoz 10 bites műveletet használnak a 3. időzítő túlcsordulási sebességével osztva 32-vel vagy 16-mal.
Itt az ideje, hogy információkat szerezzünk és konfiguráljam az SCART regisztrációt (SCON_1 az UART1 számára) az UART0 számára.
A 6. és 7. bit az UART módot állítja be, ahogyan azt korábban megbeszéltük. Az 5. bitet a többprocesszoros kommunikációs mód beállítására használják az opciók engedélyezéséhez. A folyamat azonban attól függ, hogy melyik UART mód van kiválasztva. Ezeken kívül a REN bit 1-re áll a vétel engedélyezésére, a TI jelző pedig 1-re áll a printf funkció használatához az egyedi UART0 továbbítási funkció helyett.
A következő fontos regisztráció a Power Control register (PCON) (3. időzítő 7. és 6. bit az UART1 számára) regiszter. Ha még nem ismeri az időzítőket, akkor nézze meg a Nuvoton N76E003 időzítő oktatóanyagát, hogy megismerje az időzítők használatát az N76E003 mikrokontrolleren.
Az SMOD bit fontos a kettős adatátviteli sebesség kiválasztásához az UART0 módban. Most, amikor a 3 időzítőt használjuk, konfigurálni kell a T3CON időzítő 3 vezérlő regisztert. A 7. és 6. bit azonban az UART1 kettős adatsebesség-beállításához van fenntartva.
A Timer 3 előskálázó értéke pedig
Az 5. bit BRCK a Timer 3-at állítja át az UART1 adatátviteli sebességének forrásaként. Az N76E003 adatlapja megadja a képletet a kívánt átviteli sebesség kiszámításához, valamint a minta időzített értékét a Timer 3 (16 bites) magas és alacsony regiszterekhez.
Mintaérték 16 Mhz órajel forráshoz
Ezért az átviteli sebességet a Timer 3 regiszterben kell konfigurálni a fenti képlet segítségével. Esetünkben ez a Formula 4 lesz. Ezt követően a TR3 regiszter 1-re állításával a Timer 3 elindításával az UART0 inicializálási időzítő 3 befejeződik. Az UART0 adatok fogadásához és elküldéséhez használja az alábbi regisztert.
Az SBUF regisztráció automatikusan konfigurálódik a fogadásra és az átvitelre. Adatok fogadásához az UART-tól várja meg, amíg az RI jelző beállítja az 1 értéket, és elolvassa az SBUF regisztert, és az adatokat elküldi az UART0-nak, küldje el az adatokat az SBUF-nek, és várja meg, amíg a TI jelző 1-et kap a sikeres adatátvitel megerősítéséhez.
A Nuvoton N76E003 programozása az UART kommunikációhoz
A kódolási rész egyszerű, és az oktatóanyagban használt teljes kód az oldal alján található. A kód magyarázata a következő: Az UART0-t 9600 baud sebességgel inicializálják a
InitialUART0_Timer3 (9600);
A fenti funkciót a common.c fájl definiálja, és az UART0-t úgy konfigurálja, hogy az időzítő 3 az adatátviteli sebesség forrása, az 1. módban és a 9600-as sebességgel. A funkció meghatározása a következő:
void InitialUART0_Timer3 (UINT32 u32Baudrate) // az időzítő3 használata Baudrate generátorként { P06_Quasi_Mode; // Az UART pin beállítása kvázi módként a P07_Input_Mode átvitelhez; // Az UART pin beállítása bemeneti módként a SCON = 0x50 fogadásához; // 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 átviteli sebesség órajel = 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; // Trigger Timer3 set_TI; // A printf függvény kell beállítás TI = 1 }
A deklaráció lépésről lépésre történik az előzőekben tárgyalt módon, és a regiszterek ennek megfelelően vannak konfigurálva. Az N76E003 BSP könyvtárában azonban van egy hiba, amely a P07_Input_Mode helyett található ; van P07_Quasi_Mode . Emiatt az UART fogadás funkció nem fog működni.
A Baud sebességet az adatátviteli sebesség bemenetének megfelelően és az adatlap által megadott képlet alapján is konfiguráljuk. Most a fő vagy a while ciklusban a printf függvényt használják. A printf függvény használatához a TI-t 1-nek kell állítani. Ettől eltekintve a while ciklusban egy kapcsoló esetet használnak, és a kapott UART adatoknak megfelelően az érték ki lesz nyomtatva.
while (1) { printf ("\ r \ nNyomja meg az 1-es vagy a 2-es, vagy a 3-as vagy a 4-es gombot"); oper = fogadó_adatok_FROM_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 megnyomva"); szünet; '2' eset: printf ("\ r \ n2 megnyomva"); szünet; '3' eset: printf ("\ r \ n3 megnyomva"); szünet; '4' eset: printf ("\ r \ n4 megnyomva"); szünet; alapértelmezett: printf ("\ r \ nRosszul lenyomva a billentyűt"); } Timer0_Delay1ms (300); } }
Nos, az UART0 számára megkapja a Receive_Data_From_UART0 () szót; függvényt használjuk. A common.c könyvtárban is meg van határozva .
UINT8 fogadás_Data_FROM_UART0 (érvénytelen) { UINT8 c; míg (! RI); c = SBUF; RI = 0; visszatérés (c); }
Várni fogja, hogy az RI jelző 1-et kapjon, és a c változó segítségével visszaadja a vételi adatokat.
A kód és a kimenet villogása
A kód 0 figyelmeztetést és 0 hibát adott vissza, és a Keil alapértelmezett villogó módszerével villant. Ha nem biztos abban, hogyan kell fordítani és feltölteni a kódot, olvassa el a nuvoton használatának kezdő lépéseit. Az alábbi sorok megerősítik, hogy kódunkat sikeresen feltöltöttük.
Újjáépítés megkezdődött: Projekt: printf_UART0 Újjáépíteni a „GPIO” célt a PUTCHAR.C fordításában… a Print_UART0.C fordításban … a Delay.c fordításban … a Common.c fordításban… a STARTUP.A51 összeállításában… linkelésben… Programméret: data = 54,2 xdata = 0 kód = 2341 hex fájl létrehozása a ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" fájlból - 0 hiba (ok), 0 figyelmeztetés (ek). Eltelt építési idő: 00:00:02 "G: \\ n76E003 \\ szoftver \\ N76E003_BSP_Keil_C51_V1.0.6 \ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Erase Done betöltése . Flash Write Done: 2341 bájt beprogramozva. Flash Verify Done: 2341 bájt ellenőrzött. A Flash Load 15: 48: 08-kor fejeződött be
A fejlesztői kártya a programozón és a laptopon keresztül csatlakozik az áramforráshoz az USB-UART modul segítségével. Az UART adatok megjelenítéséhez vagy elküldéséhez soros monitor szoftverre van szükség. Tera kifejezést használok erre a folyamatra.
Amint az alábbi képen látható, meg tudtam jeleníteni a nuvoton vezérlőnktől küldött húrokat, és megjeleníthettem a soros monitor szoftveren. Le tudta olvasni az értékeket a soros monitorról is.
Az oktatóanyag teljes bemutatásához megtekintheti az alább linkelt videót. Remélem, tetszett a cikk, és valami hasznosat tanult. Ha bármilyen kérdése van, hagyhatja őket az alábbi megjegyzés részben, vagy fórumunkon keresztül további technikai kérdéseket tehet fel.