? USART0和USART1是串行通信接口,兩個USART具有同樣的功能,能夠分別運行于異步UART模式和同步API模式。
1 串口模式
? UART模式提供異步串行接口,在UART模式中,有2中接口選擇方式:2線接口和4線接口:
2線接口:使用RXD(P0_2)、TXD(P0_3)。
4線接口:使用引腳RXD(P0_2)、TXD(P0_3)、RTS(P0_5)和CTS(P0_4)。
? UART模式的操作具有以下特點:
8位或者9位負載數(shù)據(jù)。
奇校驗、偶校驗或者無奇偶校驗。
配置起始位和停止位。
配置LSB(最低有效位)或者MSB(最高有效位)首先傳送。
獨立收發(fā)中斷。
獨立收發(fā)DMA觸發(fā)。
奇偶校驗和幀校驗出錯狀態(tài)。
? UART模式提供全雙工傳送,接收器中的位同步不影響收發(fā)功能。傳送一個UART字節(jié)包括1個起始位,8個數(shù)據(jù)位,1個作為可選的第9位數(shù)據(jù)或者奇偶校驗位,再加上1個或者2個停止位。UART操作由USART和狀態(tài)寄存器UxCSR以及UART控制寄存器UxUCR來控制,這里的x是USART的編號,其數(shù)值為0或1、
位
名稱
復(fù)位
R/W
描述
7
MODE
0
R/W
USART模式選擇:
? 0:SPI模式
? 1:UART模式
6
RE
0
R/W
啟動UART接收器。注意UART完全配置之前不能接收。
? 0:禁止接收器
? 1:使能接收器
5
SLAVE
0
R/W
SPI主或者從模式選擇
? 0:SPI主模式
? 1:SPI從模式
4
FE
0
R/W0
UART幀錯誤狀態(tài)
? 0:無幀錯誤檢測
? 1:字節(jié)收到不正確停止位級別
3
FRR
0
R/W0
UART奇偶校驗錯誤狀態(tài)
? 0:無奇偶校驗
? 1:字節(jié)收到奇偶錯誤
2
RX_BYTE
0
R/W0
接收字節(jié)狀態(tài),UART模式和SPI模式。當讀U0DBUF時該位自動清零,通過寫0清除它,這樣能有效丟棄U0BUF中的數(shù)據(jù)。
? 0:沒有接收字節(jié)
? 1:接收字節(jié)就緒
1
TX_BYTE
0
R/W0
傳送字節(jié)狀態(tài),UART和SPI從模式
? 0:字節(jié)沒有傳送
? 1:寫到數(shù)據(jù)緩存寄存器的最后字節(jié)已傳送
0
ACTIVE
0
R
USART傳送/接收主動狀態(tài):
0:USART空閑
1:USART在傳送或者接收模式忙碌
? 選擇USART模式為UART模式并允許接收寄存器設(shè)置示例:
//設(shè)置UART模式 U0CSR?|=?0X80; //允許接收 U0CSR?|=?0x40;
位
名稱
復(fù)位
R/W
描述
7
FLUSH
0
R/W1
清除單元。當設(shè)置時,該事件將會立即停止當前操作并返回單元的空閑狀態(tài)。
6
FLOW
0
R/W
UART硬件流使能。從RTS和CTS引腳選擇硬件流控制的使用
? 0:流控制禁止
? 1:流控制使能
5
D9
0
R/W
UART奇偶校驗位。當使能奇偶校驗,寫入D9的值決定發(fā)送的第9位的值。如果收到的第9位不匹配收到的字節(jié)的奇偶校驗,接收報告ERR。
? 0:奇校驗
? 1:偶校驗
4
BIT9
0
R/W
UART9位數(shù)據(jù)使能。當該位是1時,使能奇偶校驗位傳輸即第9位。如果通過PARITY使能奇偶校驗,第9位的內(nèi)容通過D9給出。
? 0:8位傳輸
? 1:9位傳輸
3
PARITY
0
R/W
UART奇偶校驗使能。除了為奇偶校驗設(shè)置該位用于計算,必須使能9位模式
? 0:禁用奇偶校驗
? 1:使能奇偶校驗
2
SPB
0
R/W
UART停止位數(shù)。選擇要傳送的停止位的位數(shù)
? 0:1位停止位
? 1:2位停止位
1
STOP
0
R/W
UART停止位的電平,必須不同于開始為的電平
? 0:停止位低電平
? 1:停止位高電平
0
START
0
R/W
UART起始位電平,閑置先的極性采用選擇的起始位級別的電平相反的電平
? 0:起始位低電平
? 1:起始位高電平
? 當UxCSR.MODE設(shè)置為1時,就選擇了UART模式。當USART收發(fā)數(shù)據(jù)緩沖器UxDBUF寫入數(shù)據(jù)時,該字節(jié)發(fā)送至輸出引腳TXD。UxDBUF寄存器是雙緩沖的。
位 名稱 復(fù)位 R/W 描述 7:0 DATA[7:0] 0x00 R/W ? USART接收和傳送數(shù)據(jù)。當寫這個寄存器的時候數(shù)據(jù)被寫到內(nèi)部的傳送數(shù)據(jù)寄存器,當讀取該寄存器的時候,數(shù)據(jù)倆字內(nèi)部讀取的數(shù)據(jù)寄存器。 ? 需讀出U0DBUF接收的字符串數(shù)據(jù),寄存器的設(shè)置示例:
//定義一個字符型變量 unsigned?char?temp; //讀出U0DBUF中的數(shù)據(jù) temp?=?U0DBUF;
1)UART的發(fā)送過程
2)UART的接收過程
3)UART的硬件流控制
4)UART的特征格式
5)波特率的產(chǎn)生
6)系統(tǒng)時鐘的設(shè)置