- UART İletişiminin Temelleri
- Donanım Gereksinimi ve Kurulum
- Nuvoton N76E003 UART İletişimi için Devre Şeması
- Nuvoton N76E003 Mikrodenetleyicideki UART Pinleri
- Nuvoton N76E003 Mikrodenetleyicide UART Kayıtları
- N76E003'te UART İşletim Modları
- UART İletişimi için Nuvoton N76E003'ün Programlanması
UART, Evrensel Asenkron Alıcı / Verici anlamına gelir ve herhangi bir mikro denetleyici biriminde kullanışlı bir donanım özelliğidir. Bir mikrodenetleyicinin verileri alması, işlemesi ve diğer cihazlara göndermesi gerekir. Mikrodenetleyicide farklı tipte iletişim protokolleri vardır, ancak UART, SPI ve I2C gibi diğer iletişim protokolleri arasında en çok kullanılanıdır. Birisinin verileri seri olarak alması veya iletmesi gerekiyorsa, UART her zaman en basit ve en yaygın seçenektir. UART'ın avantajı, cihazlar arasında veri iletimi için yalnızca iki kablo gerektirmesidir. Nuvoton Mikrodenetleyici Eğitimimiz ile devam ederek, bu yazıda N76E003 mikro denetleyiciyi kullanarak seri iletişimin nasıl gerçekleştirileceğini öğreneceğiz.
UART İletişiminin Temelleri
Şimdi, UART'ın ne olduğunu bildiğimiz için, UART'ın ilişkili parametrelerini bilmek önemlidir.
İki UART cihazı aynı frekansta veri alır ve iletir. Alıcı UART cihazı bir başlangıç biti algıladığında, gelen bitleri baud hızı olarak bilinen belirli bir frekansta okumaya başlar. Baud hızı, UART iletişimi için önemli bir şeydir ve veri aktarım hızını saniyede bit (bps) olarak ölçmek için kullanılır. Gönderme ve alma için bu baud hızı hızı aynı baud hızında olmalıdır. Gönderen ve alan UART'lar arasındaki baud hızı hızı farkı, bitlerin zamanlaması çok uzağa gitmeden önce yalnızca yaklaşık% 10 olabilir. En popüler baud hızı hızları 4800, 9600, 115200 bps, vs.'dir. Daha önce, aşağıda listelenen diğer birçok mikrodenetleyicide de UART iletişimini kullandık.
- ATmega8 ve Arduino Uno arasında UART İletişimi
- İki ATmega8 Mikrodenetleyici arasında UART İletişimi
- PIC Mikrodenetleyicilerini kullanarak UART İletişimi
- STM8S Mikrodenetleyicide UART İletişimi
N76E003 iki UART'a sahiptir - UART0 ve UART1. Bu eğitimde, N76E003 mikro denetleyici biriminde UART çevre birimini kullanacağız. Fazla vakit kaybetmeden bu uygulama için ne tür bir donanım kurulumuna ihtiyacımız olduğunu değerlendirelim.
Donanım Gereksinimi ve Kurulum
Bu proje için gerekli olan ana bileşen, mikro denetleyici modülü ile PC veya Laptop arasında gerekli olan arayüzü yapacak olan USB'den UART'a veya TTL'ye dönüştürücü modüldür. Bu proje için aşağıda gösterilen CP2102 tabanlı USB to UART modülünü kullanacağız.
Bahsetmiyorum bile, yukarıdaki bileşen dışında, N76E003 mikro denetleyici tabanlı geliştirme kartına ve Nu-Link Programlayıcıya ihtiyacımız var. Programlayıcı bir güç kaynağı olarak kullanılmıyorsa, ek bir 5V güç kaynağı ünitesi gerekebilir.
Nuvoton N76E003 UART İletişimi için Devre Şeması
Aşağıdaki geliştirme kartı şemasında da görebileceğimiz gibi, mikro denetleyici biriminin 2. ve 3. pini sırasıyla UART0 Tx ve Rx olarak kullanılmaktadır. En solda, programlama arayüzü bağlantısı gösterilmektedir.
Nuvoton N76E003 Mikrodenetleyicideki UART Pinleri
N76E003, 4 pini UART iletişimi için kullanılabilen 20 pime sahiptir. Aşağıdaki görüntü, kırmızı kare kutu (Rx) ve Mavi kare kutu (Tx) içinde vurgulanan UART pinlerini göstermektedir.
UART0 için, pin 2 ve 3, UART iletişimi için kullanılır ve UART1 için, pim 8 ve pim 18 iletişim için kullanılır.
Nuvoton N76E003 Mikrodenetleyicide UART Kayıtları
N76E003, otomatik adres tanıma ve çerçeveleme hatası algılama özellikli iki gelişmiş tam çift yönlü UART'a sahiptir - UART0 ve UART1. Bu iki UART, iki farklı UART olarak kategorize edilmiş kayıtlar kullanılarak kontrol edilir. UART işlemleri için N76E003'te iki çift RX ve TX pini mevcuttur. Bu nedenle ilk adım, işlemler için istenen UART bağlantı noktasını seçmektir.
Bu eğitimde, UART0'ı kullanacağız, bu nedenle konfigürasyon yalnızca UART0 için gösterilecektir. UART1 aynı konfigürasyona sahip olacak ancak kayıtlar farklı olacaktır.
Bir UART (bu durumda UART0) seçildikten sonra, RX ve TX iletişimi için kullanılması gereken I / O pinlerinin giriş ve çıkış olarak yapılandırılması gerekir. UART0'ın RX pini, mikrodenetleyicinin Port 0.7 olan 3. pinidir. Bu bir seri port alma pini olduğundan, Port 0.7'nin giriş olarak ayarlanması gerekir. Diğer yandan mikrodenetleyicinin 2. pini olan Port 0.6, bir iletim pini veya çıkış pimidir. Quasi çift yönlü mod olarak ayarlanması gerekir. Bunlar PxM1 ve PxM2 kaydı kullanılarak seçilebilir. Bu iki kayıt, x'in Port numarasını temsil ettiği G / Ç modlarını ayarlar (Örneğin, Port P1.0, kayıt P1M1 ve P1M2, P3.0 için P3M1 ve P3M2 vb.) Yapılandırma aşağıdaki resimde görülebilir-
N76E003'te UART İşletim Modları
Ardından, sonraki adım UART işlemlerinin modunu belirlemektir. İki UART, 4 modda çalışabilir. Modlar:
Gördüğümüz gibi, SM0 ve SM1 (SCON kaydının 7. ve 6. biti) UART işlemlerinin modunu seçer. Mod 0 eşzamanlı işlemdir ve diğer üç mod eşzamansız işlemlerdir. Ancak, Baud Hızı üreteci ve Çerçeve bitleri, her seri port modu için farklıdır. Modlardan herhangi biri uygulama gereksinimine göre seçilebilir ve bu UART1 için de aynıdır. Bu eğitimde, 32 veya 16'ya bölünmüş zamanlayıcı 3 taşma hızı ile 10 bitlik işlem kullanılır.
Şimdi, bilgi alma ve UART0 için SCON kaydını (UART1 için SCON_1) yapılandırma zamanı.
6. ve 7. bit, daha önce tartışıldığı gibi UART modunu ayarlayacaktır. Bit 5, seçenekleri etkinleştirmek için Çok İşlemcili iletişim modunu ayarlamak için kullanılır. Ancak süreç, hangi UART modunun seçildiğine bağlıdır. Bunların dışında, REN biti, alımı etkinleştirmek için 1'e ayarlanacak ve TI bayrağı, özel UART0 iletim işlevi yerine kullanılacak printf işlevi için 1'e ayarlanacaktır.
Bir sonraki önemli kayıt, Güç kontrol kaydı (PCON) (UART1 için Zamanlayıcı 3 bit 7 ve 6) kaydıdır. Zamanlayıcılar konusunda yeniyseniz, N76E003 Mikrodenetleyicide zamanlayıcıların nasıl kullanılacağını anlamak için Nuvoton N76E003 Zamanlayıcı eğitimine bakın.
SMOD biti, UART0 modu 1'de çift baud hızını seçmek için önemlidir. Şimdi, zamanlayıcı 3'ü kullandığımız için, Zamanlayıcı 3 kontrol kaydı T3CON'un yapılandırılması gerekir. Bununla birlikte, 7. ve 6. bitler, UART1 için çift veri hızı ayarı için ayrılmıştır.
Ve Timer 3 ön ölçekleyici değeri-
5. bit BRCK, Zamanlayıcı 3'ü UART1 için baud hızı saat kaynağı olarak ayarlayacaktır. Şimdi, N76E003'ün veri sayfasına, istenen Baud hızını hesaplamak için formül ve Timer 3 (16 bit) Yüksek ve Düşük kayıtları için örnek set değeri verilmiştir.
16 Mhz saat kaynağı için örnek değer
Bu nedenle, baud hızının, yukarıdaki formül kullanılarak Zamanlayıcı 3 kaydında yapılandırılması gerekir. Bizim durumumuz için, Formül 4 olacaktır. Bundan sonra, TR3 kaydını 1'e ayarlayarak Zamanlayıcı 3'ü başlatmak UART0 Başlatma Zamanlayıcısı 3'ü bitirecektir. Aşağıdaki kaydı kullanmak için UART0 verilerini almak ve göndermek için-
SBUF kayıt otomatik olarak alma ve İletim için yapılandırılmış olur. UART'tan veri almak için, RI bayrağının 1'i ayarlamasını ve SBUF kaydını okumasını ve verileri UART0'a göndermesini bekleyin, verileri SBUF'a gönderin ve başarılı veri aktarımını onaylamak için TI bayrağının 1 almasını bekleyin.
UART İletişimi için Nuvoton N76E003'ün Programlanması
Kodlama kısmı basittir ve bu eğitimde kullanılan kodun tamamı bu sayfanın alt kısmında bulunabilir. Kodun açıklaması aşağıdaki gibidir: UART0, ana işlevdeki ifade kullanılarak 9600 baud hızında başlatılır.
BaşlangıçUART0_Timer3 (9600);
Yukarıdaki işlev common.c dosyasında tanımlanmıştır ve UART0'ı, mod 1'de baud hızı kaynağı olarak Timer 3 ile ve 9600 baud hızı ile yapılandırmaktadır. İşlev tanımı aşağıdaki gibidir -
void InitialUART0_Timer3 (UINT32 u32Baudrate) // Baudrate generator { P06_Quasi_Mode olarak timer3'ü kullanın ; // P07_Input_Mode iletimi için UART pinini Quasi modu olarak ayarlama ; // SCON = 0x50 almak için UART pinini giriş modu olarak ayarlama ; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 Çift Hız Etkin T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 ( Ön Ölçek = 1) set_BRCK; // UART0 baud hızı saat kaynağı = 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; // Tetikleyici Timer3 set_TI; // printf işlevi için TI = 1 olarak ayarlanmalıdır }
Bildirim, daha önce tartışıldığı gibi adım adım yapılır ve kayıtlar buna göre yapılandırılır. Bununla birlikte, N76E003'ün BSP kütüphanesinde, P07_Input_Mode yerine bir hata vardır ; orada P07_Quasi_Mode . Bu nedenle, UART Alma işlevi çalışmayacaktır.
Baud hızı, ayrıca baud hızı girişine göre ve veri sayfasında verilen formül kullanılarak yapılandırılır. Şimdi ana işlevde veya while döngüsünde printf işlevi kullanılır. Printf işlevini kullanmak için TI'nin 1 olarak ayarlanması gerekir. Bunun dışında while döngüsünde bir anahtar durumu kullanılır ve alınan UART verilerine göre değer yazdırılır.
while (1) { printf ("\ r \ n1'e basın veya 2'ye basın veya 3'e basın veya 4'e basın"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1'e basıldı"); kırmak; case '2': printf ("\ r \ n2'ye basıldı"); kırmak; durum '3': printf ("\ r \ n3'e basıldı"); kırmak; durum '4': printf ("\ r \ n4'e basıldı"); kırmak; varsayılan: printf ("\ r \ nYanlış tuşa basıldı"); } Zamanlayıcı0_Gecik1ms (300); } }
Eh, UART0 için Receive_Data_From_UART0 (); işlevi kullanılır. Ayrıca, common.c kütüphanesinde de tanımlanmıştır.
UINT8 Receive_Data_From_UART0 (geçersiz) { UINT8 c; while (! RI); c = SBUF; RI = 0; dönüş (c); }
RI bayrağının 1 almasını bekleyecek ve c değişkenini kullanarak alınan veriyi döndürecektir.
Kodu ve Çıktının Yanıp Sönmesi
Kod 0 uyarı ve 0 Hata döndürdü ve Keil tarafından varsayılan yanıp sönme yöntemi kullanılarak yanıp söndü. Kodu nasıl derleyeceğiniz ve yükleyeceğinizden emin değilseniz, nuvoton ile başlama makalesine göz atın. Aşağıdaki satırlar kodumuzun başarıyla yüklendiğini onaylamaktadır.
Yeniden oluşturma başladı: Proje: printf_UART0 PUTCHAR.C'yi derleyen 'GPIO' hedefini yeniden oluştur … Print_UART0.C derleniyor… Delay.c derleniyor… Common.c derleniyor… STARTUP.A51 derleniyor … bağlanıyor… Program Boyutu: data = 54.2 xdata = 0 code = 2341 ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" dan hex dosya yaratılıyor - 0 Hata (lar), 0 Uyarı (lar). Geçen Oluşturma Süresi: 00:00:02 "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Silme Tamamlandı. Flaş Yazma Bitti: 2341 bayt programlandı. Flash Doğrulama Tamamlandı: 2341 bayt doğrulandı. Flash Yükleme 15:48:08 de tamamlandı
Geliştirme panosu güç kaynağına programlayıcı ve dizüstü bilgisayar aracılığıyla USB'den UART modülüne bağlanır. UART verilerini görüntülemek veya göndermek için bir seri monitör yazılımı gereklidir. Bu işlem için daha fazla terim kullanıyorum.
Aşağıdaki görselde de görebileceğiniz gibi nuvoton kontrolörümüzden gönderilen stringleri görüntüleyebildim ve seri monitör yazılımında görüntüleyebildim. Ayrıca seri monitörden değerleri okuyabildi.
Bu eğiticinin tam gösterimi için aşağıda bağlantısı verilen videoya göz atabilirsiniz. Umarım makaleyi beğenmişsinizdir ve faydalı bir şeyler öğrenmişsinizdir. Herhangi bir sorunuz varsa, bunları aşağıdaki yorum bölümünde bırakabilir veya diğer teknik sorularınızı göndermek için forumlarımızı kullanabilirsiniz.