- UART komunikācijas pamati
- Aparatūras prasības un iestatīšana
- Nuvoton N76E003 UART sakaru shēmas shēma
- UART piespraudes Nuvoton N76E003 mikrokontrollerim
- UART reģistrējas Nuvoton N76E003 mikrokontrollerī
- UART darbības režīmi N76E003
- Nuvoton N76E003 programmēšana UART komunikācijai
UART ir universāls asinhronais uztvērējs / raidītājs, un tā ir noderīga aparatūras funkcija jebkurā mikrokontrolleru blokā. Mikrokontrollerim ir jāsaņem dati, jāapstrādā tie un jānosūta uz citām ierīcēm. Mikrokontrollerī ir pieejami dažādi sakaru protokolu veidi, tomēr UART ir visizplatītākais starp citiem sakaru protokoliem, piemēram, SPI un I2C. Ja kādam ir jāsaņem vai jānosūta dati sērijveidā, UART vienmēr ir vienkāršākā un izplatītākā iespēja. UART priekšrocība ir tā, ka datu pārsūtīšanai starp ierīcēm nepieciešami tikai divi vadi. Turpinot mūsu Nuvoton mikrokontrolleru apmācību, šajā rakstā mēs uzzināsim, kā veikt sērijveida saziņu, izmantojot mikrokontrolleru N76E003.
UART komunikācijas pamati
Tagad, kad mēs zinām, kas ir UART, ir svarīgi zināt saistītos UART parametrus.
Divas UART ierīces saņem un pārraida datus ar tādu pašu frekvenci. Kad uztverošā UART ierīce nosaka sākuma bitu, tā sāk lasīt ienākošos bitus ar noteiktu frekvenci, kas pazīstama kā pārraides ātrums. Pārraides ātrums ir svarīga lieta UART saziņai, un to izmanto, lai izmērītu datu pārsūtīšanas ātrumu bitos sekundē (bps). Šim pārsūtīšanas un saņemšanas ātrumam jābūt vienādam ar ātrumu. Pārraides ātruma starpība starp raidošajiem un saņemošajiem UART var būt tikai aptuveni 10%, pirms bitu laiks kļūst pārāk tālu. Vispopulārākais datu pārraides ātrums ir 4800, 9600, 115200 bps utt. Iepriekš mēs izmantojām UART sakarus arī daudzos citos mikrokontrolleros, kas uzskaitīti zemāk.
- UART Saziņa starp ATmega8 un Arduino Uno
- UART sakari starp diviem mikrokontrolleriem ATmega8
- UART komunikācija, izmantojot PIC mikrokontrollerus
- UART komunikācija par STM8S mikrokontrolleru
N76E003 ir divi UART - UART0 un UART1. Šajā apmācībā mēs izmantosim UART perifērijas ierīci mikrokontrolleru blokā N76E003. Netērējot daudz laika, novērtēsim, kāda veida aparatūras iestatīšana ir nepieciešama šai lietojumprogrammai.
Aparatūras prasības un iestatīšana
Galvenais komponents, kas nepieciešams šim projektam, ir USB uz UART vai TTL pārveidotāja modulis, kas nodrošinās nepieciešamo saskarni starp datoru vai klēpjdatoru ar mikrokontrollera moduli. Šajā projektā mēs izmantosim CP2102 bāzes USB uz UART moduli, kas parādīts zemāk.
Nemaz nerunājot par to, ka, izņemot iepriekš minēto komponentu, mums ir nepieciešama uz mikrokontrolleru balstīta N76E003 izstrādes padome, kā arī Nu-Link programmētājs. Papildu 5 V barošanas bloks var būt vajadzīgs, ja programmētājs netiek izmantots kā strāvas avots.
Nuvoton N76E003 UART sakaru shēmas shēma
Kā redzam zemāk esošajā izstrādes paneļa shēmā, mikrokontrolleru bloka 2. un 3. tapa tiek izmantota attiecīgi kā UART0 Tx un Rx. Kreisajā malā tiek parādīts programmēšanas saskarnes savienojums.
UART piespraudes Nuvoton N76E003 mikrokontrollerim
N76E003 ir 20 tapas, no kurām 4 tapas var izmantot UART saziņai. Zemāk redzamajā attēlā ir redzamas UART tapas, kas iezīmētas sarkanā kvadrātveida lodziņā (Rx) un zilā kvadrātveida lodziņā (Tx).
Attiecībā uz UART0 2. un 3. kontaktu izmanto UART saziņai, bet UART1 - 8. un 18. kontaktu.
UART reģistrējas Nuvoton N76E003 mikrokontrollerī
N76E003 ir divi uzlaboti pilna dupleksa UART ar automātisku adreses atpazīšanu un kadrēšanas kļūdu noteikšanu - UART0 un UART1. Šie divi UART tiek kontrolēti, izmantojot reģistrus, kas iedalīti divos dažādos UART. N76E003 ir pieejami divi RX un TX tapu pāri UART darbībām. Tādējādi pirmais solis ir atlasīt operācijām vajadzīgo UART portu.
Šajā apmācībā mēs izmantosim UART0, tādējādi konfigurācija tiks parādīta tikai UART0. UART1 būs tāda pati konfigurācija, bet reģistri būs atšķirīgi.
Pēc vienas UART izvēles (šajā gadījumā UART0) I / O tapas, kas jāizmanto RX un TX sakariem, jākonfigurē kā ievade un izeja. UART0 RX tapa ir mikrokontrollera 3. tapa, kas ir ports 0.7. Tā kā šī ir seriālā porta saņemšanas tapa, ports 0,7 ir jāiestata kā ievade. No otras puses, ports 0.6, kas ir mikrokontrollera 2. kontakts, ir pārraides tapa vai izejas tapa. Tas jāiestata kā gandrīz divvirzienu režīms. Tos var izvēlēties, izmantojot PxM1 un PxM2 reģistru. Šie divi reģistri iestata I / O režīmus, kur x apzīmē porta numuru (Piemēram, P1.0 ports ir P1M1 un P1M2 reģistrs, P3.0 P3M1 un P3M2 utt.). Konfigurāciju var redzams zemāk esošajā attēlā-
UART darbības režīmi N76E003
Pēc tam nākamais solis ir noteikt UART darbību režīmu. Abi UART varēja darboties 4 režīmos. Režīmi ir
Kā redzam, SM0 un SM1 (SCON reģistra 7. un 6. bits) izvēlas UART darbību režīmu. 0 režīms ir sinhrona darbība, bet pārējie trīs režīmi ir asinhronas darbības. Tomēr Baud Rate ģenerators un Frame biti katram sērijas porta režīmam ir atšķirīgi. Jebkuru režīmu var izvēlēties atbilstoši lietojuma prasībām, un tas pats attiecas arī uz UART1. Šajā apmācībā tiek izmantota 10 bitu darbība ar taimera 3 pārpildes ātrumu, dalītu ar 32 vai 16.
Ir pienācis laiks iegūt informāciju un konfigurēt UART0 SCON reģistru (SCON_1 priekš UART1).
6. un 7. bits iestatīs UART režīmu, kā tika apspriests iepriekš. 5. bitu izmanto, lai iestatītu daudzprocesora sakaru režīmu, lai iespējotu opcijas. Tomēr process ir atkarīgs no tā, kurš UART režīms ir izvēlēts. Izņemot šos, REN bits tiks iestatīts uz 1, lai iespējotu uztveršanu, un TI karodziņš tiks iestatīts uz 1, lai printf funkciju izmantotu pielāgotās UART0 pārraides funkcijas vietā.
Nākamais svarīgais reģistrs ir jaudas kontroles reģistra (PCON) (taimera 3 bits 7 un 6 UART1) reģistrs. Ja taimeri ir jums jauni, skatiet Nuvoton N76E003 taimera apmācību, lai saprastu, kā taimerus izmantot mikrokontrollerī N76E003.
SMOD bits ir svarīgs, lai izvēlētos dubulto pārraides ātrumu UART0 režīmā 1. Tagad, kad mēs izmantojam taimeri 3, ir jākonfigurē taimera 3 vadības reģistrs T3CON. Tomēr 7. un 6. bits ir rezervēts UART1 dubultā datu pārraides ātruma iestatījumam.
Taimera 3 pirmsskalera vērtība-
5. bits BRCK iestatīs Taimeri 3 kā UART1 pārraides ātruma pulksteņa avotu. Tagad N76E003 datu lapai ir dota formula, lai aprēķinātu vēlamo pārraides ātrumu, kā arī izlases iestatītās vērtības taimera 3 (16 bitu) augsts un zems reģistriem.
Parauga vērtība 16 Mhz pulksteņa avotam-
Tādējādi datu pārraides ātrums ir jākonfigurē Taimera 3 reģistrā, izmantojot iepriekš minēto formulu. Mūsu gadījumā tā būs Formula 4. Pēc tam, startējot taimeri 3, iestatot TR3 reģistru uz 1, tiks pabeigts UART0 inicializācijas taimeris 3. Lai saņemtu un nosūtītu UART0 datus, izmantojiet zemāk esošo reģistru.
SBUF reģistrā automātiski tiek konfigurēts saņemt un pārsūtīt. Lai saņemtu datus no UART, pagaidiet, līdz RI karodziņš iestata 1, nolasa SBUF reģistru un nosūta datus uz UART0, nosūtiet datus uz SBUF un pagaidiet, kamēr TI karodziņš saņems 1, lai apstiprinātu veiksmīgu datu pārraidi.
Nuvoton N76E003 programmēšana UART komunikācijai
Kodēšanas daļa ir vienkārša, un pilns šajā apmācībā izmantotais kods ir atrodams šīs lapas apakšdaļā. Kods ir izskaidrots šādi. UART0 tiek inicializēts ar 9600 bitu pārraides ātrumu, izmantojot paziņojumu galvenajā funkcija-
InitialUART0_Timer3 (9600);
Iepriekš minētā funkcija ir definēta failā common.c, un tā konfigurē UART0 ar taimeri 3 kā pārraides ātruma avotu 1. režīmā un ar 9600 pārraides ātrumu. Funkcijas definīcija ir šāda-
void InitialUART0_Timer3 (UINT32 u32Baudrate) // izmantojiet taimeri3 kā Baudrate ģeneratoru { P06_Quasi_Mode; // UART pin iestatīšana kā kvazi režīms pārraidei P07_Input_Mode; // UART tapas iestatīšana kā ievades režīms saņemšanai SCON = 0x50; // UART0 režīms1, REN = 1, TI = 1 kopa_SMOD; // UART0 Double Rate Enable T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 pārraides ātruma pulksteņa avots = Taimeris3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / RL3 = LOBĪTS (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; // Funkcijai printf ir jāiestata TI = 1 }
Deklarācija tiek veikta soli pa solim, kā tika apspriests iepriekš, un reģistri tiek attiecīgi konfigurēti. Tomēr N76E003 BSP bibliotēkā ir kļūda, kas ir P07_Input_Mode vietā ; ir P07_Quasi_Mode . Tādēļ UART saņemšanas funkcija nedarbosies.
Bauda ātrums ir konfigurēts arī pēc datu pārraides ātruma ievades un izmantojot datu lapā sniegto formulu. Tagad galvenajā funkcijā vai while ciklā tiek izmantota funkcija printf. Lai izmantotu printf funkciju, TI ir jāiestata kā 1. Izņemot to, kamēr ciklā tiek izmantots slēdža gadījums un saskaņā ar saņemtajiem UART datiem tiek izdrukāta vērtība.
while (1) { printf ("\ r \ nNospiediet 1 vai nospiediet 2 vai nospiediet 3 vai nospiediet 4"); oper = Saņemt_Datus_No_UART0 (); slēdzis (oper) { gadījums '1': printf ("\ r \ n1 tiek nospiests"); pārtraukums; gadījums '2': printf ("\ r \ n2 tiek nospiests"); pārtraukums; gadījums '3': printf ("\ r \ n3 tiek nospiests"); pārtraukums; gadījums '4': printf ("\ r \ n4 tiek nospiests"); pārtraukums; noklusējums: printf ("\ r \ n Nepareizs taustiņš nospiests"); } Taimeris0_Delay1ms (300); } }
Nu, par UART0 saņem saņemšanas_datus_no_UART0 (); tiek izmantota funkcija. Tas ir definēts arī common.c bibliotēkā.
UINT8 Saņemt_Datus_No_UART0 (anulēts) { UINT8 c; kamēr (! RI); c = SBUF; RI = 0; atgriešanās (c); }
Tas gaidīs, kamēr RI karogs iegūs 1, un atgriezīs saņemšanas datus, izmantojot mainīgo c.
Mirgo kods un izvade
Kods atgrieza 0 brīdinājumu un 0 kļūdas un mirgo, izmantojot Keil noklusējuma mirgošanas metodi. Ja neesat pārliecināts, kā apkopot un augšupielādēt kodu, skatiet rakstu Darba sākšana ar nuvoton. Zemāk redzamās rindas apstiprina, ka mūsu kods ir veiksmīgi augšupielādēts.
Sākta pārbūve : Projekts: printf_UART0 Pārbūvēt mērķi 'GPIO', apkopojot PUTCHAR.C… sastādot Print_UART0.C… kompilējot Delay.c… kompilējot Common.c… montējot STARTUP.A51… saistot… Programmas lielums: dati = 54,2 xdata = 0 kods = 2341, veidojot sešstūra failu no ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 kļūda (-as), 0 brīdinājums (-i). Pagājušais būvēšanas laiks: 00:00:02 Ielādējiet "G: \\ n76E003 \\ programmatūru \ N76E003_BSP_Keil_C51_V1.0.6 \ Sample_Code \\ UART0_Printf \\ Output \ Printf_UART1" Flash Dzēšana pabeigta. Flash Write Done: ieprogrammēti 2341 baiti. Flash verificēšana pabeigta: pārbaudīti 2341 baiti. Zibspuldzes slodze tika pabeigta plkst. 15:48:08
Attīstības dēlis ir pievienots barošanas avotam, izmantojot programmētāju un klēpjdatoru, izmantojot moduli USB uz UART. Lai parādītu vai nosūtītu UART datus, nepieciešama sērijveida monitora programmatūra. Es šim procesam lietoju tera terminu.
Kā redzat zemāk esošajā attēlā, es varēju parādīt virknes, kas nosūtītas no mūsu nuvoton kontroliera, un parādīt to sērijveida monitora programmatūrā. Arī varēja nolasīt vērtības no sērijveida monitora.
Lai pilnībā parādītu šo apmācību, varat apskatīt zemāk saistīto videoklipu. Ceru, ka jums patika raksts un uzzinājāt kaut ko noderīgu. Ja jums ir kādi jautājumi, varat tos atstāt komentāru sadaļā zemāk vai izmantot mūsu forumus citu tehnisku jautājumu izlikšanai.