- Conceptes bàsics de la comunicació UART
- Requisit i configuració del maquinari
- Diagrama de circuits per a la comunicació UART de Nuvoton N76E003
- Pins UART al microcontrolador Nuvoton N76E003
- Registres UART al microcontrolador Nuvoton N76E003
- Modes d'operació UART a N76E003
- Programació de Nuvoton N76E003 per a la comunicació UART
UART és l'acceptador de receptor i transmissor asíncron universal i és una característica útil del maquinari en qualsevol unitat de microcontrolador. Un microcontrolador ha de rebre dades, processar-les i enviar-les als altres dispositius. Hi ha diferents tipus de protocols de comunicació disponibles al microcontrolador, però, UART és el més utilitzat entre els altres protocols de comunicació com SPI i I2C. Si algú necessita rebre o transmetre dades en sèrie, UART sempre és l’opció més senzilla i habitual. L’avantatge d’UART és que només requereix dos cables per transmetre dades entre dispositius. Continuant amb el nostre tutorial de microcontroladors Nuvoton, en aquest article aprendrem com realitzar comunicacions en sèrie mitjançant el microcontrolador N76E003.
Conceptes bàsics de la comunicació UART
Ara, ja que sabem què és UART, és important conèixer els paràmetres associats a UART.
Dos dispositius UART reben i transmeten dades a la mateixa freqüència. Quan el dispositiu UART receptor detecta un bit inicial, comença a llegir els bits entrants a una freqüència específica coneguda com a velocitat en bauds. La velocitat en bauds és una cosa important per a la comunicació UART i s’utilitza per mesurar la velocitat de transferència de dades en bits per segon (bps). Aquesta velocitat de transmissió i recepció ha de ser al mateix ritme de transmissió. La diferència de velocitat de la velocitat en bauds entre els UART transmissors i els receptors només pot ser del 10% abans que la sincronització dels bits s’allunyi massa. Les velocitats de velocitat en baud més populars són 4800, 9600, 115200 bps, etc. Anteriorment, també hem utilitzat la comunicació UART en molts altres microcontroladors que es detallen a continuació.
- Comunicació UART entre ATmega8 i Arduino Uno
- Comunicació UART entre dos microcontroladors ATmega8
- Comunicació UART mitjançant microcontroladors PIC
- Comunicació UART sobre microcontrolador STM8S
El N76E003 té dos UART: UART0 i UART1. En aquest tutorial, utilitzarem el perifèric UART a la unitat de microcontrolador N76E003. Sense perdre molt de temps, avaluem quin tipus de configuració de maquinari necessitem per a aquesta aplicació.
Requisit i configuració del maquinari
El component principal que es requereix per a aquest projecte és el mòdul convertidor USB a UART o TTL que farà que la interfície necessària entre el PC o l'ordinador portàtil amb el mòdul de microcontrolador. Per a aquest projecte, utilitzarem el mòdul USB a UART basat en CP2102 que es mostra a continuació.

Per no mencionar, a part del component anterior, necessitem la placa de desenvolupament basada en microcontroladors N76E003, així com el programador Nu-Link. Pot ser necessària una font d'alimentació addicional de 5 V si el programador no s'utilitza com a font d'alimentació.
Diagrama de circuits per a la comunicació UART de Nuvoton N76E003
Com podem veure a l'esquema següent de la placa de desenvolupament, el segon i tercer pin de la unitat de microcontrolador s'utilitzen com UART0 Tx i Rx respectivament. A l'extrem esquerre, es mostra la connexió de la interfície de programació.

Pins UART al microcontrolador Nuvoton N76E003
El N76E003 té 20 pins dels quals 4 pins es poden utilitzar per a la comunicació UART. La imatge següent mostra els passadors UART ressaltats en un quadre quadrat vermell (Rx) i quadre quadrat Blau (Tx).

Per a la UART0, els pins 2 i 3 s’utilitzen per a la comunicació UART i, per a la UART1, s’utilitzen els pins 8 i 18 per a la comunicació.
Registres UART al microcontrolador Nuvoton N76E003
N76E003 té dos UART full-duplex millorats amb reconeixement automàtic d’adreces i detecció d’errors d’enquadrament: UART0 i UART1. Aquests dos UART es controlen mitjançant registres classificats en dos UART diferents. Hi ha dos parells de pins RX i TX disponibles a N76E003 per a operacions UART. Així, el primer pas és seleccionar el port UART desitjat per a les operacions.
En aquest tutorial, utilitzarem UART0, de manera que la configuració només es mostrarà per a UART0. UART1 tindrà la mateixa configuració, però els registres seran diferents.
Després de seleccionar un UART (UART0 en aquest cas), els pins d'E / S que cal utilitzar per a la comunicació RX i TX s'han de configurar com a entrada i sortida. El pin RX d'UART0 és el pin 3 del microcontrolador que és el port 0.7. Com que es tracta d'un pin de recepció de port sèrie, cal configurar el port 0,7 com a entrada. D’altra banda, el port 0.6, que és el segon pin del microcontrolador, és un pin de transmissió o pin de sortida. Cal configurar-lo com a mode quasi bidireccional. Es poden seleccionar mitjançant el registre PxM1 i PxM2. Aquests dos registres configuren els modes d'E / S on la x representa el número de port (per exemple, el port P1.0, el registre serà P1M1 i P1M2, per a P3.0 serà P3M1 i P3M2, etc.). es pot veure a la imatge següent

Modes d'operació UART a N76E003
A continuació, el següent pas és determinar el mode d’operacions UART. Els dos UART podrien funcionar en 4 modes. Els modes són

Com podem veure, els SM0 i SM1 (7è i 6è bit de registre SCON) seleccionen el mode d’operacions UART. El mode 0 és l' operació síncrona i els altres tres modes són operacions asíncrones. No obstant això, el generador de velocitat en transmissió i els bits de trama són diferents per a cada mode de port sèrie. Es pot seleccionar qualsevol dels modes segons el requisit de l'aplicació, i això és el mateix per a UART1. Per a aquest tutorial, s'utilitza una operació de 10 bits amb un índex de desbordament del temporitzador 3 dividit per 32 o 16.
Ara és hora d’obtenir informació i configurar el registre SCON (SCON_1 per a UART1) per a UART0.



El sisè i el setè bit configuraran el mode UART tal com s'ha comentat anteriorment. El bit 5 s’utilitza per configurar el mode de comunicació multiprocessador per habilitar les opcions. Tot i això, el procés depèn del mode seleccionat UART. A part d'aquests, el bit REN s'establirà a 1 per habilitar la recepció i el senyalador TI s'establirà a 1 per utilitzar la funció printf en lloc de la funció de transmissió UART0 personalitzada.
El següent registre important és el registre de control de potència (PCON) (temporitzador 3 bits 7 i 6 per a UART1). Si no coneixeu els temporitzadors, consulteu el tutorial del temporitzador Nuvoton N76E003 per entendre com utilitzar els temporitzadors al microcontrolador N76E003.

El bit SMOD és important per seleccionar la velocitat de transmissió doble en mode UART0 1. Ara, ja que estem utilitzant el temporitzador 3, cal configurar el registre de control del temporitzador 3 T3CON. No obstant això, el bit setè i sisè es reserven per a la configuració de la velocitat de dades doble per a UART1.


I el valor preescalador del temporitzador 3-

El BRCK de 5 bits configurarà el temporitzador 3 com a font de rellotge de velocitat en bauds per a UART1. Ara, al full de dades de N76E003 se li dóna la fórmula per calcular la velocitat de Baud desitjada, així com el valor de mostra de mostra per als registres Timer 3 (16 bits) High i Low.

Valor de mostra per a una font de rellotge de 16 Mhz-

Per tant, cal configurar la velocitat en bauds al registre del temporitzador 3 mitjançant la fórmula anterior. Per al nostre cas, serà la Fórmula 4. Després d’això, l’inici del temporitzador 3 configurant el registre TR3 a 1 acabarà el temporitzador d’inicialització UART0 3. Per rebre i enviar les dades d’UART0, utilitzeu el registre següent:

El registre SBUF es configura automàticament per rebre i transmetre. Per rebre dades de la UART, espereu que el senyalador RI estableixi 1 i llegiu el registre SBUF i envieu les dades a UART0, envieu les dades a SBUF i espereu que el senyalador TI obtingui 1 per confirmar la transmissió de dades amb èxit.
Programació de Nuvoton N76E003 per a la comunicació UART
La part de codificació és senzilla i el codi complet utilitzat en aquest tutorial es troba a la part inferior d’aquesta pàgina. L’explicació del codi és la següent: l’UART0 s’inicialitza a 9600 baud rate mitjançant l’afirmació de la funció principal.
InitialUART0_Timer3 (9600);
La funció anterior es defineix al fitxer common.c i està configurant l’UART0 amb el temporitzador 3 com a font de velocitat de transmissió, en mode 1 i amb una velocitat de transmissió de 9600. La definició de la funció és la següent:
void InitialUART0_Timer3 (UINT32 u32Baudrate) // utilitza timer3 com a generador de Baudrate { P06_Quasi_Mode; // Configuració del pin UART com a mode Quasi per transmetre P07_Input_Mode; // Configuració del pin UART com a mode d’entrada per rebre SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 Double Rate Hable T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Preescala = 1) set_BRCK; // UART0 baud rate clock 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 (65.536 - (1.037.500 / u32Baudrate)); /*16,6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); / * 16,6 MHz * / #endif set_TR3; // Trigger Timer3 set_TI; // Per a la funció printf cal configurar TI = 1 }
La declaració es fa pas a pas tal com s’ha comentat anteriorment i els registres es configuren en conseqüència. Tanmateix, a la biblioteca BSP del N76E003, hi ha un error que és en lloc de P07_Input_Mode; hi ha P07_Quasi_Mode . Per això, la funció de recepció UART no funcionarà.
La velocitat en bauds també es configura segons l’entrada de velocitat en bauds i mitjançant la fórmula donada al full de dades. Ara, a la funció principal o al bucle while , s’utilitza la funció printf. Per utilitzar la funció printf , cal establir el TI com 1. A part d’això, al bucle while s’utilitza un cas de commutació i, segons les dades UART rebudes, s’imprimeix el valor.
while (1) { printf ("\ r \ nPremeu 1 o Premeu 2 o Premeu 3 o Premeu 4"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("es prem \ r \ n1"); trencar; cas '2': printf ("es prem" \ r \ n2 "); trencar; cas '3': printf ("es prem" \ r \ n3 "); trencar; cas '4': printf ("es prem" \ r \ n4 "); trencar; per defecte: printf ("\ r \ nPrema la tecla incorrecta"); } Temporitzador0_Delay1ms (300); } }
Bé, per a la UART0 rebeu Receive_Data_From_UART0 (); s'utilitza la funció. També es defineix a la biblioteca common.c .
UINT8 Receive_Data_From_UART0 (void) { UINT8 c; mentre (! RI); c = SBUF; RI = 0; retorn (c); }
Esperarà que el senyalador RI obtingui 1 i retornarà les dades de recepció mitjançant la variable c.
Intermitent del codi i de la sortida
El codi va mostrar 0 advertències i 0 errors i va parpellejar mitjançant el mètode de parpelleig predeterminat de Keil. Si no esteu segur de com compilar i penjar codi, consulteu l'article inicial sobre nuvoton. Les línies següents confirmen que el nostre codi s'ha carregat correctament.
Reconstrucció iniciada: Projecte: printf_UART0 Reconstrueix l'objectiu 'GPIO' compilant PUTCHAR.C… compilant Print_UART0.C… compilant Delay.c… compilant Common.c… muntant STARTUP.A51… enllaçant… Mida del programa: dades = 54,2 xdata = 0 codi = 2341 creant fitxer hexadecimal des de ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 error (s), 0 advertència (s). Temps de construcció transcorregut: 00:00:02 Carregueu el programari "G: \\ n76E003 \\ \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" . Escriptura Flash feta: 2341 bytes programats. Verificació Flash feta: 2341 bytes verificats. Flash Load ha finalitzat a les 15:48:08
La placa de desenvolupament es connecta a la font d'alimentació mitjançant el programador i l'ordinador portàtil mitjançant el mòdul USB a UART. Per visualitzar o enviar les dades UART, cal un programari de monitor sèrie. Estic fent servir el terme tera per a aquest procés.

Com podeu veure a la imatge següent, he pogut mostrar les cadenes enviades des del nostre controlador nuvoton i mostrar-les al programari del monitor sèrie. També va ser capaç de llegir els valors del monitor sèrie.

Podeu veure el vídeo enllaçat a continuació per a la demostració completa d’aquest tutorial. Espero que us hagi agradat l'article i hàgiu après alguna cosa útil. Si teniu cap pregunta, podeu deixar-les a la secció de comentaris o fer servir els nostres fòrums per publicar altres preguntes tècniques.
