cz flag en flag

UART (USART) – komunikujte sériově po dvou vodičích

USART je synchronní a asynchronní sériové rozhraní pro přenos dat mezi zařízeními v obou směrech (plný duplex). Používá se pro komunikaci mezi mikrokontroléry, počítači a dalšími zařízeními podporující tento standard.

 

Pro přenos se používají rámce, které mohou mít 5 až 9 bitů a jsou od sebe odděleny jedním start bitem a jedním nebo dvěma stop bity (obr. 1). Každý rámec může obsahovat ještě paritní bit pro kontrolu rámce. Dále je možné nastavit rychlost přenosu dat od 1 200 bps až do 250 kbps.
usart
Některé vlastnosti USART u mikrokontroléru ATmega32

  • Plný duplex (může současně přijímat i vysílat).
  • Synchronní nebo asynchronní režim.
  • Možnost nastavení přenosové rychlosti v rozsahu 1 200 bps až 250 kbps.
  • Podpora rámců délky 5 až 9 datových bitů a 1 až 2 stop bity.
  • Generátor sudé/liché parity pro vysílač a hardwarové testování parity pro přijímač.
  • Detekce ztráty znaku (OverRun).
  • Detekce chyby rámce (Frame Error).
  • Obsahuje digitální dolnofrekvenční propust pro detekci falešného start bitu a filtraci zákmitů datových bitů.
  • Tři nezávislá přerušení (odvysílání znaku, vyprázdnění vysílacího registru a příjem znaku).
  • Možnost zdvojnásobit přenosovou rychlost v asynchronním režimu.

Nastavení a popis registrů USART u mikrokontroléru ATmega32

Pro používání USART se pro správnou práci používají osmibitové registry. Některé slouží pouze k nastavení, některé k odeslání znaku a některé pro příjem. Tyhle registry jsou popsány zde:

  • Aby USART správně fungoval je třeba jej inicializovat a to se řeší pomocí registrů UCSRA, UCSRB a UCSRC, kde každý z bitů těchto registrů má svoji funkci. Jednotlivé bity jsou popsány v tabulce 1.
  • Pro příjem a poslání znaku se používá registr UDR.
  • Registry UBRRL a UBRRH slouží pro nastavení přenosové rychlosti (hodnotu lze vypočítat podle vzorců (1.1 a 1.2) nebo najít v tabulce 2).

Vzorec na výpočet hodnoty registru UBRR pro klasický režim

BAUD = fOSC/(16*(UBRR+1))   (vzorec 1.1)

UBRR = (fOSC/(16*BAUD))-1

a pro režim dvojnásobné rychlosti

BAUD = fOSC/(8*(UBRR+1)) (vzorec 1.2)

UBRR = (fOSC/(8*BAUD))-1

kde BAUD je přenosová rychlost a fOSC je frekvence krystalu. Vzorec pro synchronní režim zde neuvádím z toho důvodu, že synchronní režim USART ve své práci nevyužívám.

 

Tabulka 1: Popis jednotlivých bitů registrů UCSRA, UCSRB a UCSRC.

BIT UCSRA
7 RXC příjem kompletní
6 TXC vysílání kompletní
5 UDRE prázdný buffer
4 FE chyba rámce
3 DOR přetečení bufferu
2 PE chyba parity
1 U2X dvojnásobná přenosová rychlost
0 MPCM multiprocesorový komunikační režim
BIT UCSRB
7 RXCIE povolení přerušení při příjmu
6 TXCIE povolení přerušení při odvysílání
5 UDRIE povolení přerušení při prázdném bufferu
4 RXEN povolení příjmu
3 TXEN povolení vysílání
2 UCSZ2 určuje počet bitů (viz. tabulka 4)
1 RXB8 9. přijatý bit
0 TXB8 9. odvysílaný bit
BIT UCSRC
7 URSEL určuje přístup k registrům UBRRH a UCSRC
6 UMSEL výběr mezi synchronním a asynchronním režimem
5 UPM1 parita (viz. tabulka 3)
4 UPM0 parita (viz. tabulka 3)
3 USBS počet stop bitů
2 UCSZ1 určuje počet bitů (viz. tabulka 4)
1 UCSZ0 určuje počet bitů (viz. tabulka 4)
0 UCPOL polarita dat synchronního režimu

Tabulka 2: Příklady nastavení registrů UBRRL a UBRRH při frekvenci krystalu 16 MHz

Baud Rate (bps) UBRR
U2X = 0 U2X = 1
2400 416

832

4800 207 416
9600 103 207
14 400 68 138
19 200 51 103
28 800 34 68
38 400 25 51
57 600 16 34
76 800 12 25
115 200 8 16
230 400 3 8
250 000 3 7

Tabulka 3: Nastavení parity

UPM1 UPM0 Režim
0 0 deaktivováno
0 1 vyhrazeno
1 0 sudá parita
1 1 lichá parita

Tabulka 4: Nastavení počtu bitů rámce

UCSZ2 UCSZ1 UCSZ0 Počet bitů
0 0 0 5
0 0 1 6
0 1 0 7
0 1 1 8
1 0 0 vyhrazeno
1 0 1 vyhrazeno
1 1 0 vyhrazeno
1 1 1 9

Připravuje se:

  1. Knihovna I2C ke stažení pro ATMEL AVR
  2. Knihovna I2C ke stažení pro STM32F4 Discovery

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*

0
0
0
1
6
1
1
0
0
Verified by ExactMetrics