- Asas Komunikasi UART
- Keperluan dan Persediaan Perkakasan
- Diagram Litar untuk Nuvoton N76E003 UART Communication
- Pin UART pada Pengawal Mikro Nuvoton N76E003
- UART Mendaftar di Nuvoton N76E003 Mikrokontroler
- Mod Operasi UART di N76E003
- Pengaturcaraan Nuvoton N76E003 untuk UART Communication
UART bermaksud Universal Asynchronous Receiver / Transmitter dan ia merupakan ciri perkakasan yang berguna di mana-mana unit mikrokontroler. Pengawal mikro perlu menerima data, memprosesnya, dan menghantarnya ke peranti lain. Terdapat pelbagai jenis protokol komunikasi yang terdapat dalam mikrokontroler, namun UART adalah yang paling banyak digunakan di antara protokol komunikasi lain seperti SPI dan I2C. Sekiranya seseorang perlu menerima atau menghantar data secara bersiri, UART selalu menjadi pilihan paling mudah dan biasa. Kelebihan UART adalah hanya memerlukan dua wayar untuk menghantar data antara peranti. Melanjutkan dengan Tutorial Mikrokontroler Nuvoton kami, dalam artikel ini, kami akan belajar bagaimana melakukan komunikasi bersiri menggunakan mikrokontroler N76E003.
Asas Komunikasi UART
Sekarang, kerana kita tahu apa itu UART, penting untuk mengetahui parameter yang berkaitan dengan UART.
Dua peranti UART menerima dan menghantar data pada frekuensi yang sama. Apabila peranti UART penerima mengesan bit permulaan, ia mula membaca bit masuk pada frekuensi tertentu yang dikenali sebagai kadar baud. Baud rate adalah perkara penting untuk komunikasi UART dan ia digunakan untuk mengukur kelajuan pemindahan data dalam bit sesaat (bps). Kelajuan kadar baud ini, untuk penghantaran dan penerimaan, mestilah pada kadar baud yang sama. Perbezaan kelajuan kadar baud antara penghantaran dan penerimaan UART hanya boleh sekitar 10% sebelum masa bit terlalu jauh. Kelajuan kadar baud yang paling popular adalah 4800, 9600, 115200 bps, dan lain-lain. Sebelum ini kami telah menggunakan komunikasi UART di banyak mikrokontroler lain yang juga disenaraikan di bawah.
- Komunikasi UART antara ATmega8 dan Arduino Uno
- Komunikasi UART antara Dua Mikrokontroler ATmega8
- Komunikasi UART menggunakan PIC Microcontroller
- Komunikasi UART mengenai Pengawal Mikro STM8S
N76E003 mempunyai dua UART - UART0 dan UART1. Dalam tutorial ini, kita akan menggunakan periferal UART pada unit mikrokontroler N76E003. Tanpa membuang banyak masa, mari kita menilai jenis persediaan perkakasan yang kita perlukan untuk aplikasi ini.
Keperluan dan Persediaan Perkakasan
Komponen utama yang diperlukan untuk projek ini adalah modul penukar USB ke UART atau TTL yang akan menjadikan antara muka yang diperlukan antara PC atau Laptop dengan modul mikrokontroler. Untuk projek ini, kami akan menggunakan modul USB to UART berasaskan CP2102 yang ditunjukkan di bawah.
Tidak ketinggalan, selain komponen di atas, kita memerlukan papan pengembangan berasaskan mikrokontroler N76E003 dan juga Pengaturcara Nu-Link. Unit bekalan kuasa 5V tambahan mungkin diperlukan jika pengaturcara tidak digunakan sebagai sumber kuasa.
Diagram Litar untuk Nuvoton N76E003 UART Communication
Seperti yang dapat kita lihat dalam skema papan pengembangan di bawah, pin 2 dan 3 unit mikrokontroler masing-masing digunakan sebagai UART0 Tx dan Rx. Di kiri paling kiri, sambungan antara muka pengaturcaraan ditunjukkan.
Pin UART pada Pengawal Mikro Nuvoton N76E003
N76E003 mempunyai 20 pin di mana 4 pin boleh digunakan untuk komunikasi UART. Gambar di bawah menunjukkan pin UART yang diserlahkan dalam kotak persegi merah (Rx) dan kotak persegi Biru (Tx).
Untuk UART0, pin 2 dan 3 digunakan untuk komunikasi UART, dan untuk UART1, pin 8 dan pin 18 digunakan untuk komunikasi.
UART Mendaftar di Nuvoton N76E003 Mikrokontroler
N76E003 mempunyai dua UART dupleks penuh yang dipertingkatkan dengan pengecaman alamat automatik dan pengesanan ralat pembingkaian - UART0 dan UART1. Kedua UART ini dikendalikan menggunakan register yang dikategorikan kepada dua UART yang berbeza. Terdapat dua pasang pin RX dan TX yang terdapat di N76E003 untuk operasi UART. Oleh itu, langkah pertama adalah memilih port UART yang diinginkan untuk operasi.
Dalam tutorial ini, kami akan menggunakan UART0, oleh itu konfigurasi akan ditunjukkan untuk UART0 sahaja. UART1 akan mempunyai konfigurasi yang sama tetapi register akan berbeza.
Setelah memilih satu UART (UART0 dalam hal ini), pin I / O yang perlu digunakan untuk komunikasi RX dan TX perlu dikonfigurasi sebagai input dan output. Pin RX UART0 adalah pin 3 dari mikrokontroler iaitu Port 0.7. Oleh kerana ini adalah pin penerima port bersiri, Port 0.7 perlu diset sebagai input. Sebaliknya, Port 0.6 yang merupakan pin ke-2 mikrokontroler adalah pin transmit atau pin output. Ia perlu ditetapkan sebagai mod dua arah Quasi. Ini boleh dipilih menggunakan daftar PxM1 dan PxM2. Kedua-dua register ini menetapkan mod I / O di mana x bermaksud nombor Port (Sebagai contoh, Port P1.0 register akan menjadi P1M1 dan P1M2, untuk P3.0 ia akan menjadi P3M1 dan P3M2, dll.) Konfigurasi boleh lihat pada gambar di bawah-
Mod Operasi UART di N76E003
Kemudian, langkah seterusnya adalah menentukan mod operasi UART. Kedua UART boleh beroperasi dalam 4 mod. Mod adalah-
Seperti yang kita lihat, SM0 dan SM1 (daftar SCON bit ke-7 dan ke-6) memilih mod operasi UART. Mode 0 adalah operasi segerak dan tiga mod lain adalah operasi tak segerak. Walau bagaimanapun, penjana Baud Rate dan bit Frame berbeza untuk setiap mod port bersiri. Mana-mana mod boleh dipilih mengikut keperluan aplikasi dan ini juga sama untuk UART1. Untuk tutorial ini, operasi 10 bit dengan kadar limpahan pemasa 3 dibahagi dengan 32 atau 16 digunakan.
Sekarang, sudah tiba masanya untuk mendapatkan maklumat dan mengkonfigurasi daftar SCON (SCON_1 untuk UART1) untuk UART0.
Bit ke-6 dan ke-7 akan menetapkan mod UART seperti yang dibincangkan sebelumnya. Bit 5 digunakan untuk menetapkan mod komunikasi Multiprosesor untuk membolehkan pilihan. Walau bagaimanapun, prosesnya bergantung pada mod UART mana yang dipilih. Selain daripada ini, bit REN akan diatur ke 1 untuk membolehkan penerimaan dan bendera TI akan diatur ke 1 untuk fungsi printf digunakan dan bukan fungsi transmisi UART0 tersuai.
Daftar penting seterusnya adalah daftar Daftar kawalan kuasa (PCON) (Pemasa 3 bit 7 dan 6 untuk UART1). Sekiranya anda baru menggunakan pemasa, lihat tutorial Pemasa Nuvoton N76E003 untuk memahami cara menggunakan pemasa pada Mikrokontroler N76E003.
Bit SMOD penting untuk memilih kadar baud ganda dalam mod UART0 1. Sekarang, kerana kita menggunakan pemasa 3, daftar kawalan Timer 3 T3CON perlu dikonfigurasikan. Walau bagaimanapun, bit ke-7 dan ke-6 diperuntukkan untuk tetapan kadar data berganda untuk UART1.
Dan nilai pra-penimbang Pemasa 3-
BRCK bit ke-5 akan menetapkan Pemasa 3 sebagai sumber jam kadar baud untuk UART1. Sekarang, lembar data N76E003 diberi formula untuk mengira kadar Baud yang diinginkan serta nilai set sampel untuk daftar Timer 3 (16-bit) Tinggi dan Rendah.
Nilai sampel untuk sumber jam 16 Mhz-
Oleh itu, kadar baud perlu dikonfigurasi dalam daftar Pemasa 3 menggunakan formula di atas. Untuk kes kami, itu adalah Formula 4. Selepas itu, memulakan Pemasa 3 dengan menetapkan daftar TR3 ke 1 akan menyelesaikan Pemasa Permulaan UART0 3. Untuk menerima dan menghantar data UART0 untuk menggunakan daftar di bawah-
The SBUF daftar secara automatik akan dikonfigurasikan untuk menerima dan menghantar. Untuk menerima data dari UART, tunggu bendera RI ditetapkan 1 dan baca daftar SBUF dan hantarkan data ke UART0, kirim data ke SBUF dan tunggu bendera TI mendapat 1 untuk mengesahkan penghantaran data yang berjaya.
Pengaturcaraan Nuvoton N76E003 untuk UART Communication
Bahagian pengekodannya mudah dan kod lengkap yang digunakan dalam tutorial ini terdapat di bahagian bawah halaman ini. Penjelasan kodnya adalah seperti berikut, UART0 diinisialisasi pada kadar 9600 baud menggunakan pernyataan dalam fungsi utama
PermulaanUART0_Timer3 (9600);
Fungsi di atas ditentukan dalam fail common.c dan mengkonfigurasi UART0 dengan Timer 3 sebagai sumber kadar baud, dalam mod 1, dan dengan kadar baud 9600. Definisi fungsi adalah seperti berikut-
batal InitialUART0_Timer3 (UINT32 u32Baudrate) // gunakan pemasa3 sebagai penjana Baudrate { P06_Quasi_Mode; // Menetapkan pin UART sebagai mod Quasi untuk menghantar P07_Input_Mode; // Menetapkan pin UART sebagai mod input untuk menerima SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 Double Rate Dayakan T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 baud rate source 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 (65536 - (1037500 / u32Baudrate)); /*16.6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /*16.6 MHz * / #endif set_TR3; // Pencetus Pemasa3 set_TI; // Untuk fungsi printf mesti menetapkan TI = 1 }
Deklarasi dilakukan selangkah demi selangkah seperti yang dibincangkan sebelumnya dan daftar dikonfigurasi dengan sewajarnya. Walau bagaimanapun, di perpustakaan BSP N76E003, terdapat bug yang bukan P07_Input_Mode; ada P07_Quasi_Mode . Oleh kerana itu, fungsi Terima UART tidak akan berfungsi.
Baud rate juga dikonfigurasi sesuai dengan input baud rate dan menggunakan formula yang diberikan oleh datasheet. Sekarang, dalam fungsi utama atau while loop , fungsi printf digunakan. Untuk menggunakan fungsi printf , TI harus ditetapkan sebagai 1. Selain daripada ini, dalam gelung sementara , kotak suis digunakan dan mengikut data UART yang diterima, nilainya dicetak.
sementara (1) { printf ("\ r \ nTekan 1 atau Tekan 2 atau Tekan 3 atau Tekan 4"); oper = Terima_Data_Dari_UART0 (); suis (oper) { case '1': printf ("\ r \ n1 ditekan"); rehat; kes '2': printf ("\ r \ n2 ditekan"); rehat; kes '3': printf ("\ r \ n3 ditekan"); rehat; kes '4': printf ("\ r \ n4 ditekan"); rehat; lalai: printf ("\ r \ nKunci yang salah ditekan"); } Pemasa0_Delay1ms (300); } }
Baiklah, untuk UART0 terima Receive_Data_From_UART0 (); fungsi digunakan. Ia juga ditakrifkan di perpustakaan common.c .
UINT8 Terima_Data_From_UART0 (tidak sah) { UINT8 c; sementara (! RI); c = SBUF; RI = 0; pulangan (c); }
Ia akan menunggu bendera RI mendapat 1 dan mengembalikan data penerimaan menggunakan pemboleh ubah c.
Mengemaskan Kod dan Hasil
Kod tersebut mengembalikan 0 amaran dan 0 Kesalahan dan berkelip menggunakan kaedah flashing default oleh Keil. Sekiranya anda tidak pasti cara menyusun dan memuat naik kod, lihat artikel bermula dengan nuvoton. Garis di bawah mengesahkan bahawa kod kami berjaya dimuat naik.
Pembangunan semula dimulakan: Projek: printf_UART0 Membangun semula sasaran 'GPIO' menyusun PUTCHAR.C… menyusun Print_UART0.C… menyusun Delay.c… menyusun Common.c… memasang STARTUP.A51… menghubungkan… Saiz Program: data = 54.2 xdata = 0 kod = 2341 membuat fail hex dari ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 Ralat, 0 Amaran. Masa Binaan Berlalu: 00:00:02 Muatkan perisian "G: \\ n76E003 \\ \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Padam Selesai. Flash Write Done: 2341 bait diprogramkan. Flash Verify Selesai: 2341 bait disahkan. Beban Kilat selesai pada 15:48:08
Papan Pembangunan disambungkan dalam sumber kuasa melalui pengaturcara dan komputer riba menggunakan modul USB ke UART. Untuk memaparkan atau mengirim data UART, diperlukan perisian monitor bersiri. Saya menggunakan istilah tera untuk proses ini.
Seperti yang anda lihat pada gambar di bawah, saya dapat memaparkan rentetan yang dihantar dari pengawal nuvoton kami dan memaparkannya pada perisian monitor bersiri. Juga dapat membaca nilai dari monitor bersiri.
Anda boleh melihat video yang dipautkan di bawah untuk demonstrasi lengkap tutorial ini. Semoga anda menikmati artikel ini dan mempelajari sesuatu yang berguna. Sekiranya anda mempunyai pertanyaan, anda boleh meninggalkannya di bahagian komen di bawah atau menggunakan forum kami untuk menghantar soalan teknikal lain.