- UART-viestinnän perusteet
- Laitteistovaatimukset ja asennus
- Piirikaavio Nuvoton N76E003 UART -yhteydelle
- UART-nastat Nuvoton N76E003 -mikrokontrollerissa
- UART-rekisterit Nuvoton N76E003 -mikrokontrollerissa
- UART-toimintatilat N76E003: ssa
- Nuvoton N76E003: n ohjelmointi UART-tiedonsiirtoa varten
UART on lyhenne sanoista Universal Asynchronous Receiver / Transmitter ja se on hyödyllinen laitteisto-ominaisuus kaikissa mikro-ohjainyksiköissä. Mikrokontrollerin on vastaanotettava tietoja, käsiteltävä ne ja lähetettävä muille laitteille. Mikrokontrollerissa on käytettävissä erityyppisiä tiedonsiirtoprotokollia, mutta UART on kuitenkin eniten käytetty muiden tietoliikenneprotokollien, kuten SPI ja I2C, joukossa. Jos jonkun on vastaanotettava tai lähetettävä dataa sarjaan, UART on aina yksinkertaisin ja yleisin vaihtoehto. UART: n etuna on, että tietojen siirtämiseen laitteiden välillä tarvitaan vain kaksi johtoa. Jatkamalla Nuvoton-mikrokontrollerioppaamme, tässä artikkelissa opit, miten sarjamuotoinen tiedonsiirto tapahtuu N76E003-mikrokontrollerilla.
UART-viestinnän perusteet
Nyt kun tiedämme mikä UART on, on tärkeää tietää siihen liittyvät parametrit.
Kaksi UART-laitetta vastaanottaa ja lähettää dataa samalla taajuudella. Kun vastaanottava UART-laite havaitsee aloitusbitin, se alkaa lukea saapuvia bittejä tietyllä taajuudella, jota kutsutaan baudinopeudeksi. Siirtonopeus on tärkeä asia UART-viestinnässä, ja sitä käytetään mittaamaan tiedonsiirtonopeus bitteinä sekunnissa (bps). Lähetys- ja vastaanotto-tiedonsiirtonopeuden on oltava samalla nopeudella. Siirtonopeuden ja lähetettävän UART-tiedonsiirtonopeuden ero voi olla vain noin 10%, ennen kuin bittien ajoitus on liian kaukana. Suosituimmat siirtonopeudet ovat 4800, 9600, 115200 bps, jne. Aikaisemmin olemme käyttäneet UART-tiedonsiirtoa myös monissa muissa alla luetelluissa mikro-ohjaimissa.
- UART-viestintä ATmega8: n ja Arduino Unon välillä
- UART-yhteys kahden ATmega8-mikrokontrollerin välillä
- UART-tiedonsiirto PIC-mikrokontrollereita käyttäen
- UART-tiedonsiirto STM8S-mikrokontrollerista
N76E003: ssa on kaksi UART: ta - UART0 ja UART1. Tässä opetusohjelmassa käytämme N76E003-mikrokontrolleriyksikön UART-oheislaitetta. Arvioimatta, millaista laitteistoasetusta tarvitsemme tälle sovellukselle tuhlaamatta paljon aikaa.
Laitteistovaatimukset ja asennus
Suurin osa tätä projektia varten tarvitaan USB-UART- tai TTL-muunninmoduuli, joka tekee tarvittavan käyttöliittymän tietokoneen tai kannettavan ja mikrokontrollerimoduulin välillä. Tässä projektissa käytämme CP2102- pohjaista USB-UART-moduulia, joka on esitetty alla.
Puhumattakaan, tarvitsemme muuta kuin yllä olevaa komponenttia, tarvitsemme N76E003-mikrokontrolleripohjaisen kehityskortin sekä Nu-Link-ohjelmoijan. Ylimääräinen 5 V: n virtalähde voidaan tarvita, jos ohjelmoijaa ei käytetä virtalähteenä.
Piirikaavio Nuvoton N76E003 UART -yhteydelle
Kuten voimme nähdä alla olevasta kehityskortin kaaviosta, mikro-ohjainyksikön toista ja 3. nastaa käytetään vastaavasti UART0 Tx: nä ja Rx: nä. Vasemmassa reunassa näkyy ohjelmointirajapinnan yhteys.
UART-nastat Nuvoton N76E003 -mikrokontrollerissa
N76E003: ssa on 20 nastaa, joista 4 nastaa voidaan käyttää UART-viestintään. Alla olevassa kuvassa on UART-nastat korostettu punaisella neliölaatikolla (Rx) ja sinisellä neliölaatikolla (Tx).
UART0: ssa nastoja 2 ja 3 käytetään UART-viestintään ja UART1: ssä nastoja 8 ja 18 käytetään viestintään.
UART-rekisterit Nuvoton N76E003 -mikrokontrollerissa
N76E003: ssa on kaksi parannettua täysdupleksista UART: ta, automaattinen osoitetunnistus ja kehystysvirheiden havaitseminen - UART0 ja UART1. Näitä kahta UART: ta ohjataan rekistereihin, jotka on luokiteltu kahteen eri UART: iin. N76E003: ssa on saatavana kaksi paria RX- ja TX-nastoja UART-toimintoja varten. Siksi ensimmäinen vaihe on valita haluamasi UART-portti toimintoja varten.
Tässä opetusohjelmassa käytämme UART0: ta, joten kokoonpano näytetään vain UART0: lle. UART1: llä on sama kokoonpano, mutta rekisterit ovat erilaisia.
Kun olet valinnut yhden UART: n (tässä tapauksessa UART0), I / O-nastat, joita tarvitaan käytettäväksi RX- ja TX-viestinnässä, on määritettävä tuloksi ja lähdöksi. UART0: n RX-nasta on mikrokontrollerin nasta 3, joka on portti 0.7. Koska tämä on sarjaportin vastaanottotappi, portti 0.7 on asetettava tuloksi. Toisaalta portti 0.6, joka on mikro-ohjaimen toinen tappi, on lähetystappi tai ulostulotappi. Se on asetettava lähes kaksisuuntaiseksi tilaksi. Ne voidaan valita käyttämällä PxM1- ja PxM2-rekisteriä. Nämä kaksi rekisteriä asettavat I / O-tilat, joissa x tarkoittaa portin numeroa (esimerkiksi portti P1.0, rekisteri on P1M1 ja P1M2, P3.0: lle P3M1 ja P3M2 jne.) Konfigurointi voidaan näkyy alla olevassa kuvassa-
UART-toimintatilat N76E003: ssa
Sitten seuraava vaihe on määrittää UART-toimintatila. Kaksi UART-laitetta voisivat toimia 4 tilassa. Tilat ovat
Kuten voimme nähdä, SM0 ja SM1 (SCON-rekisterin 7. ja 6. bitti) valitsevat UART-toimintatilan. Tila 0 on synkronoitu toiminta ja muut kolme tilaa ovat asynkronisia toimintoja. Kuitenkin siirtonopeus generaattori ja Frame bitit ovat erilaiset kullekin sarjaportin tilassa. Mikä tahansa tiloista voidaan valita sovellusvaatimusten mukaan, ja tämä on sama myös UART1: lle. Tässä opetusohjelmassa käytetään 10-bittistä toimintaa ajastimen 3 ylivuotonopeudella jaettuna 32: lla tai 16: lla.
Nyt on aika hankkia tietoja ja konfiguroida SCON- rekisteri (SCON_1 UART1: lle) UART0: lle.
Kuudes ja seitsemäs bitti asettavat UART-tilan, kuten aiemmin keskusteltiin. Bittiä 5 käytetään asettamaan moniprosessorinen tiedonsiirtotila ottamaan vaihtoehdot käyttöön. Prosessi riippuu kuitenkin siitä, mikä UART-tila on valittu. Näitä lukuun ottamatta REN-bitti asetetaan arvoon 1 vastaanoton mahdollistamiseksi ja TI-lippu asetetaan arvoon 1, kun käytetään printf- toimintoa mukautetun UART0-lähetystoiminnon sijaan.
Seuraava tärkeä rekisteri on Power control register (PCON) (ajastin 3 bitti 7 ja 6 UART1: lle) -rekisteri. Jos olet uusi ajastimille, tutustu Nuvoton N76E003 Timer -oppaaseen, jotta voit ymmärtää ajastimien käyttöä N76E003-mikrokontrollerissa.
SMOD-bitti on tärkeä kaksoissiirtonopeuden valitsemiseksi UART0-tilassa 1. Nyt kun käytämme ajastinta 3, ajastin 3 -ohjausrekisteri T3CON on määritettävä. Bitit 7 ja 6 on kuitenkin varattu UART1: n kaksoisdatanopeusasetukselle.
Ja Timer 3 -esivahvistimen arvo-
Viides bitti BRCK asettaa ajastimen 3 siirtonopeuden kellolähteeksi UART1: lle. N76E003: n tietolomakkeelle annetaan nyt kaava halutun siirtonopeuden laskemiseksi sekä näyteajoarvo ajastimen 3 (16-bittiset) korkea- ja matala-rekistereille.
Näytearvo 16 MHz: n kellolähteelle-
Siirtonopeus on siis määritettävä ajastin 3 -rekisterissä käyttäen yllä olevaa kaavaa. Meidän tapauksessamme se on kaava 4. Sen jälkeen, kun ajastin 3 käynnistetään asettamalla TR3-rekisteri arvoon 1, UART0-alustusajastin 3 päättyy. UART0-tietojen vastaanottaminen ja lähettäminen alla olevan rekisterin käyttöä varten
SBUF rekisteri automaattisesti saa konfiguroitu vastaanottaminen ja lähetys. Jos haluat vastaanottaa tietoja UART: lta, odota, että RI-lippu asettaa 1 ja lukee SBUF-rekisterin, ja lähettää tiedot UART0: lle, lähetä tiedot SBUF: lle ja odota, että TI-lippu saa 1 vahvistamaan onnistuneen tiedonsiirron.
Nuvoton N76E003: n ohjelmointi UART-tiedonsiirtoa varten
Koodausosa on yksinkertainen, ja tässä opetusohjelmassa käytetty täydellinen koodi löytyy tämän sivun alaosasta. Koodin selitys on seuraava: UART0 alustetaan 9600 baudinopeudella käyttämällä pääfunktion lausetta -
InitialUART0_Timer3 (9600);
Edellä toiminto on määritelty common.c tiedosto ja se on konfiguroidaan UART0 ajastin 3, kuten siirtonopeus lähde, tilassa 1, ja jossa baudinopeus 9600. toiminto määritelmä on seuraavat-
void InitialUART0_Timer3 (UINT32 u32Baudrate) // käytä ajastinta3 siirtonopeuden generaattorina { P06_Quasi_Mode; // UART-nastan asettaminen lähes tilaksi lähetykselle P07_Input_Mode; // UART-nastan asettaminen tulotilaksi vastaanottajalle SCON = 0x50; // UART0-tila1, REN = 1, TI = 1 sarja_SMOD; // UART0 Double Rate Enable T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 ( Prescale = 1) set_BRCK; // UART0-siirtonopeuden kellolähde = Ajastin3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / #endif ifdef FOSC_166000 Th3 = HIBYTE (65536 - (1037500 / u32Baudrate)); /*16,6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /*16,6 MHz * / #endif set_TR3; // Trigger Timer3 set_TI; // Tulostustoiminnon on asetettava TI = 1 }
Ilmoitus tehdään askel askeleelta, kuten aiemmin on keskusteltu, ja rekisterit konfiguroidaan vastaavasti. N76E003: n BSP-kirjastossa on kuitenkin vika, joka on P07_Input_Mode-tilan sijaan ; on P07_Quasi_Mode . Tämän vuoksi UART-vastaanotto-toiminto ei toimi.
Siirtonopeus määritetään myös tiedonsiirtonopeuden syötteen mukaan ja käyttäen taulukkolaskennan kaavaa. Nyt päätoiminnossa tai while-silmukassa käytetään printf-toimintoa. Käyttää printf toiminto, TI täytyy asettaa 1. Muut kuin tämä, kun taas silmukka , kytkimen tapauksessa käytetään ja kohti UART vastaanotetun datan, arvo tulostetaan.
while (1) { printf ("\ r \ nPaina 1 tai paina 2 tai paina 3 tai paina 4"); oper = Vastaanota_tietoja_UART0 (); kytkin (oper) { tapaus '1': printf ("\ r \ n1 painetaan"); tauko; tapaus '2': printf ("\ r \ n2 painetaan"); tauko; tapaus '3': printf ("\ r \ n3 painetaan"); tauko; tapaus '4': printf ("\ r \ n4 painetaan"); tauko; oletus: printf ("\ r \ nVäärä näppäintä painettu"); } Ajastin0_viive1ms (300); } }
No, vastaanottaa UART0: lle Receive_Data_From_UART0 (); toimintoa käytetään. Se määritetään myös common.c- kirjastossa.
UINT8 Vastaanoton_tiedot_UART0 (mitätöity) { UINT8 c; kun (! RI); c = SBUF; RI = 0; paluu (c); }
Se odottaa RI-lipun saavan 1 ja palauttavan vastaanottodatan muuttujan c avulla.
Koodin ja lähdön vilkkuminen
Koodi palautti 0 varoituksen ja 0 virhettä ja välähti käyttäen Keilin oletus vilkkumenetelmää. Jos et ole varma koodin kääntämisestä ja lähettämisestä, tutustu nuvoton-artikkelin käyttöönottoon. Alla olevat rivit vahvistavat, että koodimme on lähetetty onnistuneesti.
Uudelleenrakennus aloitettu: Projekti: printf_UART0 Rakenna kohde 'GPIO' kääntämällä PUTCHAR.C… kääntäen Print_UART0.C… kääntäen Delay.c… kääntäen Common.c… koota STARTUP.A51… linkittäminen… Ohjelman koko: data = 54,2 xdata = 0 koodi = 2341 heksatiedoston luominen tiedostosta ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 virhettä, 0 varoitusta. Kulunut koontiaika: 00:00:02 Lataa "G: \\ n76E003 \\ ohjelmisto \\ N76E003_BSP_Keil_C51_V1.0.6 \ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Erase Done. Flash-kirjoitus valmis: 2341 tavua ohjelmoitu. Flash-vahvistus valmis: 2341 tavua vahvistettu. Salaman lataus päättyi klo 15:48:08
Kehityskortti on kytketty virtalähteeseen ohjelmoijan ja kannettavan tietokoneen kautta USB-UART-moduulilla. UART-tietojen näyttämiseen tai lähettämiseen tarvitaan sarjamonitoriohjelmisto. Käytän tera-termiä tähän prosessiin.
Kuten alla olevasta kuvasta näet, pystyin näyttämään nuvoton-ohjaimestamme lähetetyt merkkijonot ja näyttämään ne sarjavalvontaohjelmistossa. Pystyi myös lukemaan arvot sarjakuvaruudulta.
Voit tutustua alla olevaan linkitettyyn videoon saadaksesi täydellisen esityksen tästä opetusohjelmasta. Toivottavasti pidit artikkelista ja opit jotain hyödyllistä. Jos sinulla on kysyttävää, voit jättää ne alla olevaan kommenttiosioon tai käyttää foorumeitamme muiden teknisten kysymysten lähettämiseen.