- Mga Pangunahing Kaalaman sa Komunikasyon ng UART
- Kinakailangan at Pag-setup ng Hardware
- Circuit Diagram para sa Nuvoton N76E003 UART Komunikasyon
- UART Pins sa Nuvoton N76E003 Microcontroller
- Mga Rehistro ng UART sa Nuvoton N76E003 Microcontroller
- Mga Mode ng Pagpapatakbo ng UART sa N76E003
- Programming Nuvoton N76E003 para sa UART Communication
Ang UART ay nangangahulugang Universal Asynchronous Receiver / Transmitter at ito ay isang kapaki-pakinabang na tampok sa hardware sa anumang yunit ng microcontroller. Ang isang microcontroller ay kailangang makatanggap ng data, iproseso ito, at ipadala ito sa iba pang mga aparato. Mayroong iba't ibang mga uri ng mga protocol ng komunikasyon na magagamit sa microcontroller, gayunpaman, ang UART ang pinaka ginagamit na isa sa mga iba pang mga protocol ng komunikasyon tulad ng SPI at I2C. Kung ang isang tao ay kailangang makatanggap o magpadala ng data nang serial, ang UART ay palaging ang pinakasimpleng at karaniwang pagpipilian. Ang bentahe ng UART ay nangangailangan lamang ito ng dalawang wires upang makapagpadala ng data sa pagitan ng mga aparato. Pagpapatuloy sa aming Nuvoton Microcontroller Tutorial, sa artikulong ito, matututunan natin kung paano magsagawa ng serial na komunikasyon gamit ang N76E003 microcontroller.
Mga Pangunahing Kaalaman sa Komunikasyon ng UART
Ngayon, tulad ng alam natin kung ano ang UART, mahalagang malaman ang nauugnay na mga parameter ng UART.
Ang dalawang mga aparato ng UART ay tumatanggap at nagpapadala ng data sa parehong dalas. Kapag ang natanggap na aparato ng UART ay nakakita ng isang panimulang bit, nagsisimula itong basahin ang mga papasok na piraso sa isang tukoy na dalas na kilala bilang baud rate. Ang rate ng baud ay isang mahalagang bagay para sa komunikasyon ng UART at ginagamit ito upang masukat ang bilis ng paglipat ng data sa mga bits bawat segundo (bps). Ang bilis ng rate ng baud na ito, para sa paghahatid at pagtanggap, ay dapat na nasa parehong rate ng baud. Ang pagkakaiba-iba ng bilis ng bilis ng baud sa pagitan ng paghahatid at pagtanggap ng mga UART ay maaari lamang maging tungkol sa 10% bago masyadong malayo ang tiyempo ng mga piraso. Ang pinakapopular na bilis ng baud rate ay 4800, 9600, 115200 bps, atbp. Dati ay ginamit namin ang komunikasyon sa UART sa maraming iba pang mga microcontroll pati na rin na nakalista sa ibaba.
- Pakikipag-usap sa UART sa pagitan ng ATmega8 at Arduino Uno
- Pakikipag-usap sa UART sa pagitan ng Dalawang ATmega8 Microcontrollers
- Pakikipag-usap sa UART gamit ang PIC Microcontrollers
- Pakikipag-usap sa UART sa STM8S Microcontroller
Ang N76E003 ay may dalawang UART - UART0 at UART1. Sa tutorial na ito, gagamitin namin ang UART peripheral sa N76E003 microcontroller unit. Nang walang pag-aaksaya ng oras, suriin natin kung anong uri ng pag-setup ng hardware ang kailangan namin para sa application na ito.
Kinakailangan at Pag-setup ng Hardware
Ang pangunahing sangkap na kinakailangan para sa proyektong ito ay ang USB to UART o TTL converter module na gagawa ng interface na kinakailangan sa pagitan ng PC o Laptop gamit ang module ng microcontroller. Para sa proyektong ito, gagamitin namin ang CP2102 based USB sa UART module na ipinapakita sa ibaba.
Hindi banggitin, bukod sa sangkap sa itaas, kailangan namin ng N76E003 microcontroller based development board pati na rin ang Nu-Link Programmer. Ang isang karagdagang 5V power supply unit ay maaaring kailanganin kung ang programmer ay hindi ginagamit bilang isang mapagkukunan ng kuryente.
Circuit Diagram para sa Nuvoton N76E003 UART Komunikasyon
Tulad ng nakikita natin sa iskemang board ng pag-unlad sa ibaba, ang ika-2 at ika-3 pin ng yunit ng microcontroller ay ginagamit bilang isang UART0 Tx at Rx ayon sa pagkakabanggit. Sa matinding kaliwa, ipinapakita ang koneksyon sa interface ng programa.
UART Pins sa Nuvoton N76E003 Microcontroller
Ang N76E003 ay may 20 mga pin mula sa kung saan ang 4 na mga pin ay maaaring magamit para sa komunikasyon ng UART. Ipinapakita ang imahe sa ibaba ng mga pin ng UART na naka-highlight sa isang pulang parisukat na kahon (Rx) at Blue square box (Tx).
Para sa UART0, ang pin 2 at 3 ay ginagamit para sa komunikasyon ng UART, at para sa UART1, ang pin 8 at pin 18 ay ginagamit para sa komunikasyon.
Mga Rehistro ng UART sa Nuvoton N76E003 Microcontroller
Ang N76E003 ay may dalawang pinahusay na full-duplex UART na may awtomatikong pagkilala sa address at pagtukoy ng error sa pag-frame - UART0 at UART1. Ang dalawang UART na ito ay kinokontrol gamit ang mga rehistro na ikinategorya sa dalawang magkakaibang UART. Mayroong dalawang pares ng mga pin na RX at TX na magagamit sa N76E003 para sa pagpapatakbo ng UART. Kaya ang unang hakbang ay piliin ang nais na UART port para sa mga pagpapatakbo.
Sa tutorial na ito, gagamitin namin ang UART0, sa gayon ang pagpapakita ay ipapakita para sa UART0 lamang. Ang UART1 ay magkakaroon ng parehong pagsasaayos ngunit magkakaiba ang mga rehistro.
Matapos ang pagpili ng isang UART (UART0 sa kasong ito), ang mga I / O na pin na kinakailangan upang magamit para sa komunikasyon ng RX at TX ay kailangang mai-configure bilang input at output. Ang RX pin ng UART0 ay pin 3 ng microcontroller na Port 0.7. Dahil ito ay isang serial port na makatanggap ng pin, ang Port 0.7 ay kinakailangan upang maitakda bilang input. Sa kabilang banda, ang Port 0.6 na siyang ika-2 pin ng microcontroller ay isang transmit pin o output pin. Kailangan itong maitakda bilang isang Quasi bidirectional mode. Maaari itong mapili gamit ang rehistro ng PxM1 at PxM2. Itinakda ng dalawang rehistro ang mga mode na I / O kung saan ang x ay nangangahulugang numero ng Port (Halimbawa, Port P1.0 ang rehistro ay P1M1 at P1M2, para sa P3.0 ito ay P3M1 at P3M2, atbp.) makikita sa larawan sa ibaba-
Mga Mode ng Pagpapatakbo ng UART sa N76E003
Pagkatapos, ang susunod na hakbang ay upang matukoy ang mode ng mga pagpapatakbo ng UART. Ang dalawang UART ay maaaring gumana sa 4 na mga mode. Ang mga mode ay-
Tulad ng nakikita natin, ang SM0 at SM1 (ika-7 at ika-6 na piraso ng rehistro ng SCON) ay pipiliin ang mode ng mga pagpapatakbo ng UART. Ang Mode 0 ay ang magkasabay na pagpapatakbo at ang iba pang tatlong mga mode ay hindi magkasabay na pagpapatakbo. Gayunpaman, ang generator ng Baud Rate at ang mga frame ng Frame ay magkakaiba para sa bawat serial port mode. Ang sinuman sa mga mode ay maaaring mapili ayon sa kinakailangan ng aplikasyon at ito ay pareho para sa UART1 din. Para sa tutorial na ito, 10 bits na operasyon na may timer 3 overflow rate na hinati sa 32 o 16 ang ginagamit.
Ngayon, oras na upang makakuha ng impormasyon at i-configure ang rehistro ng SCON (SCON_1 para sa UART1) para sa UART0.
Ang ika-6 at ika-7 na bit ay magtatakda ng UART mode tulad ng tinalakay dati. Ginagamit ang Bit 5 upang itakda ang Multiprocessor komunikasyon mode upang paganahin ang mga pagpipilian. Gayunpaman, ang proseso ay nakasalalay sa aling UART mode ang napili. Maliban sa mga ito, ang REN bit ay itatakda sa 1 upang paganahin ang pagtanggap at ang flag ng TI ay itatakda sa 1 para magamit ang printf function sa halip na pasadyang pagpapaandar ng UART0 transmit.
Ang susunod na mahalagang rehistro ay ang pagrehistro ng Power control (PCON) (Timer 3 bit 7 at 6 para sa UART1). Kung bago ka sa mga timer, suriin ang Nuvoton N76E003 Timer tutorial upang maunawaan kung paano gamitin ang mga timer sa N76E003 Microcontroller.
Mahalaga ang SMOD bit upang piliin ang dobleng rate ng baud sa UART0 mode 1. Ngayon, habang ginagamit namin ang timer 3, kailangang mai-configure ang rehistro ng kontrol ng Timer 3. Gayunpaman, ang bit ika-7 at ika-6 ay nakalaan para sa setting ng dobleng data rate para sa UART1.
At ang Timer 3 pre-scaler na halaga-
Itatakda ng 5th bit BRCK ang Timer 3 bilang mapagkukunan ng rate ng baud rate para sa UART1. Ngayon, ang datasheet ng N76E003 ay binibigyan ng formula para sa pagkalkula ng nais na rate ng Baud pati na rin ang halimbawang itinakdang halaga para sa Timer 3 (16-bits) Mataas at Mababang mga rehistro.
Halimbawang halaga para sa mapagkukunang 16 Mhz na orasan-
Sa gayon ang baud rate ay kailangang mai-configure sa Timer 3 na rehistro gamit ang formula sa itaas. Para sa aming kaso, ito ang magiging Formula 4. Pagkatapos nito, simula sa Timer 3 sa pamamagitan ng pagtatakda ng TR3 register sa 1 ay tatapusin ang UART0 Initialization Timer 3. Upang matanggap at maipadala ang data ng UART0 upang magamit ang narehistro sa ibaba-
Ang rehistro ng SBUF ay awtomatikong nai-configure para sa Makatanggap at Magpadala. Upang makatanggap ng data mula sa UART, hintaying itakda ng flag ng RI ang 1 at basahin ang rehistro ng SBUF at ipadala ang data sa UART0, ipadala ang data sa SBUF at hintayin ang flag ng TI upang makakuha ng 1 upang kumpirmahin ang matagumpay na paghahatid ng data.
Programming Nuvoton N76E003 para sa UART Communication
Ang bahagi ng pag-cod ay simple at ang kumpletong code na ginamit sa tutorial na ito ay matatagpuan sa ilalim ng pahinang ito. Ang paliwanag ng code ay ang mga sumusunod, Ang UART0 ay natigil sa 9600 baud rate gamit ang pahayag sa pangunahing pagpapaandar-
InitialUART0_Timer3 (9600);
Ang pagpapaandar sa itaas ay tinukoy sa karaniwang.c file at ito ay ang pag-configure ng UART0 sa Timer 3 bilang mapagkukunan ng rate ng baud, sa mode 1, at may rate ng baud na 9600. Ang kahulugan ng pagpapaandar ay ang mga sumusunod-
walang bisa InitialUART0_Timer3 (UINT32 u32Baudrate) // gamitin ang timer3 bilang Baudrate generator { P06_Quasi_Mode; // Setting UART pin as Quasi mode for transmit P07_Input_Mode; // Setting UART pin as input mode for recieve SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 Double Rate Paganahin ang T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 baud rate orasan pinagmulan = 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 - (1,037,500 / u32Baudrate)); /*16.6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /*16.6 MHz * / # endif set_TR3; // Trigger Timer3 set_TI; // For printf function must setting TI = 1 }
Ang deklarasyon ay tapos na hakbang-hakbang tulad ng tinalakay dati at ang mga rehistro ay naka-configure nang naaayon. Gayunpaman, sa BSP library ng N76E003, mayroong isang bug na sa halip na P07_Input_Mode; mayroong P07_Quasi_Mode . Dahil dito, hindi gagana ang pagpapaandar ng UART na Tumanggap.
Ang rate ng Baud ay naka-configure din ayon sa input ng baud rate at ginagamit ang formula na ibinigay ng datasheet. Ngayon, sa pangunahing pagpapaandar o habang loop , ginagamit ang pagpapaandar ng printf. Upang magamit ang pagpapaandar ng printf , ang TI ay kailangang itakda bilang 1. Maliban dito, sa habang loop , ginagamit ang isang switch case at ayon sa natanggap na data ng UART, ang halaga ay na-print.
habang (1) { printf ("\ r \ nPress 1 o Pindutin ang 2 o Pindutin ang 3 o Pindutin ang 4"); oper = Tumanggap_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 ay pinindot"); pahinga; case '2': printf ("\ r \ n2 ay pinindot"); pahinga; case '3': printf ("\ r \ n3 ay pinindot"); pahinga; case '4': printf ("\ r \ n4 ay pinindot"); pahinga; default: printf ("\ r \ nWrong key pipi"); } Timer0_Delay1ms (300); } }
Kaya, para sa UART0 matanggap ang Makatanggap_Data_From_UART0 (); ginagamit ang pagpapaandar. Tinukoy din ito sa karaniwang.c library.
Tumanggap ang UINT8_Data_From_UART0 (walang bisa) { UINT8 c; habang (! RI); c = SBUF; RI = 0; ibalik (c); }
Hihintayin nito ang watawat ng RI upang makakuha ng 1 at ibalik ang natanggap na data gamit ang variable c.
Flashing ang Code at Output
Ang code ay nagbalik ng 0 babala at 0 Mga Error at na-flash gamit ang default na flashing na pamamaraan ng Keil. Kung hindi ka sigurado kung paano mag-ipon at mag-upload ng code, suriin ang pagsisimula sa artikulo ng nuvoton. Ang mga linya sa ibaba ay nagpapatunay na ang aming code ay matagumpay na na-upload.
Nagsimula muli: Proyekto: printf_UART0 Muling itaguyod ang target na 'GPIO' na nagtatala ng PUTCHAR.C… sa pag-iipon ng Print_UART0.C… pagsasama-sama ng Pag-antala.c… pagtitipid ng Common.c… pag-iipon ng StartUP.A51 … pag-uugnay… Laki ng Programa: data = 54.2 xdata = 0 code = 2341 paglikha ng hex file mula sa ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 Error, mga 0 Babala. Lumipas ang Oras ng Pagbuo: 00:00:02 I- load ang "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Burahin Tapos Na. Tapos ng Sumulat ng Flash: 2341 bytes na na-program. Tapos na Na-verify ang Flash: 2341 bytes na na-verify. Tapos na ang Flash Load ng 15:48:08
Ang Development board ay konektado sa mapagkukunan ng kuryente sa pamamagitan ng programmer at laptop gamit ang USB to UART module. Upang maipakita o maipadala ang data ng UART, kinakailangan ng isang serial monitor software. Gumagamit ako ng tera term para sa prosesong ito.
Tulad ng nakikita mo sa imahe sa ibaba, nagawa kong ipakita ang mga string na ipinadala mula sa aming nuvoton controller at ipakita ito sa serial monitor software. Nakabasa din ang mga halagang mula sa serial monitor.
Maaari mong suriin ang naka-link na video sa ibaba para sa kumpletong pagpapakita ng tutorial na ito. Inaasahan kong nasiyahan ka sa artikulo at natutunan ang isang bagay na kapaki-pakinabang. Kung mayroon kang anumang mga katanungan, maaari mong iwanan ang mga ito sa seksyon ng komento sa ibaba o gamitin ang aming mga forum upang mag-post ng iba pang mga teknikal na katanungan.