中文名 | USART | 外文名 | Universal Synchronous/Asynchronous Receiver/Transmitter |
---|---|---|---|
主要特點 | 支持同步和異步操作 | 結構組成 | 時鐘發(fā)生器、數(shù)據(jù)發(fā)送器和接收器 |
三大部分 | 時鐘發(fā)生器、數(shù)據(jù)發(fā)送器和接收器 |
USART收發(fā)模塊一般分為三大部分:時鐘發(fā)生器、數(shù)據(jù)發(fā)送器和接收器??刂萍拇嫫鳛樗械哪K共享。
時鐘發(fā)生器由同步邏輯電路(在同步從模式下由外部時鐘輸入驅動)和波特率發(fā)生器組成。發(fā)送時鐘引腳XCK僅用于同步發(fā)送模式下,
發(fā)送器部分由一個單獨的寫入緩沖器(發(fā)送UDR)、一個串行移位寄存器、校驗位發(fā)生器和用于處理不同幀結構的控制邏輯電路構成。使用寫入緩沖器,實現(xiàn)了連續(xù)發(fā)送多幀數(shù)據(jù)無延時的通信。
接收器是USART模塊最復雜的部分,最主要的是時鐘和數(shù)據(jù)接收單元。數(shù)據(jù)接收單元用作異步數(shù)據(jù)的接收。除了接收單元,接收器還包括校驗位校驗器、控制邏輯、移位寄存器和兩級接收緩沖器(接收UDR)。接收器支持與發(fā)送器相同的幀結構,同時支持幀錯誤、數(shù)據(jù)溢出和校驗錯誤的檢測。
與UART兼容性
AVR USART 和AVR UART 兼容性 USART 在如下方面與AVR UART 完全兼容:
· 所有USART 寄存器的位定義。
· 波特率發(fā)生器。
· 發(fā)送器操作。
· 發(fā)送緩沖器的功能。
· 接收器操作。
然而,接收器緩沖器有兩個方面的改進,在某些特殊情況下會影響兼容性:
· 增加了一個緩沖器。兩個緩沖器的操作好象是一個循環(huán)的FIFO。因此對于每個接收到的數(shù)據(jù)只能讀一次!更重要的是錯誤標志FE 和DOR,以及第9 個數(shù)據(jù)位RXB8與數(shù)據(jù)一起存放于接收緩沖器。因此必須在讀取UDR 寄存器之前訪問狀態(tài)標志位。否則將丟失錯誤狀態(tài)。
· 接收移位寄存器可以作為第三級緩沖。在兩個緩沖器都沒有空的時候,數(shù)據(jù)可以保存于串行移位寄存器之中( 參見 Figure 61),直到檢測到新的起始位。從而增強了 USART 抵抗數(shù)據(jù)過速(DOR) 的能力。
下面的控制位的名稱做了改動,但其功能和在寄存器中的位置并沒有改變:
· CHR9改為UCSZ2。
· OR改為DOR。
時鐘產(chǎn)生時鐘產(chǎn)生邏輯為發(fā)送器和接收器產(chǎn)生基礎時鐘。USART 支持4 種模式的時鐘: 正常的異步模式,倍速的異步模式,主機同步模式,以及從機同步模式。USART 控制位UMSEL和狀態(tài)寄存器C (UCSRC) 用于選擇異步模式和同步模式。倍速模式( 只適用于異步模式) 受控于UCSRA 寄存器的U2X。使用同步模式 (UMSEL = 1) 時,XCK 的數(shù)據(jù)方向寄存器 (DDR_XCK)決定時鐘源是由內部產(chǎn)生(主機模式)還是由外部生產(chǎn)(從機模式)。僅在同步模式下XCK 有效。
片內時鐘產(chǎn)生-波特率發(fā)生器內部時鐘用于異步模式與同步主機模式。
USART 的波特率寄存器UBRR 和降序計數(shù)器相連接,一起構成可編程的預分頻器或波特率發(fā)生器。降序計數(shù)器對系統(tǒng)時鐘計數(shù),當其計數(shù)到零或UBRRL 寄存器被寫時,會自動裝入UBRR 寄存器的值。當計數(shù)到零時產(chǎn)生一個時鐘,該時鐘作為波特率發(fā)生器的輸出時鐘,輸出時鐘的頻率為fosc/(UBRR 1)。發(fā)生器對波特率發(fā)生器的輸出時鐘進行2、8或16 的分頻,具體情況取決于工作模式。波特率發(fā)生器的輸出被直接用于接收器與數(shù)據(jù)恢復單元。數(shù)據(jù)恢復單元使用了一個有2、8或16個狀態(tài)的狀態(tài)機,具體狀態(tài)數(shù)由UMSEL、U2X 與 DDR_XCK 位設定的工作模式?jīng)Q定。
STM32 USART的使用(基于庫函數(shù)版本)
對中斷需要用到的的默認的兩個管腳PA9和PA10的模式進行設置.
* 注意:不要忘記RCC的設置!STM32的結構決定了用任何一個外設 * 就必須設置相應的使能時鐘。USART1的使能時鐘位是在APB2中的 * 本例中對應函數(shù)UART1_GPIO_Configuration()
* 2: 對USART的數(shù)據(jù)格式進行設置,即發(fā)送數(shù)據(jù)的數(shù)據(jù)位、校驗位等.
* 本例對應函數(shù)為UART1_GPIO_Configuration()
* 注:對于數(shù)據(jù)是以上升沿還是下降沿有效,可以設置也可以不設 * 置,如果不設置,則系統(tǒng)采用默認值。本例中將其屏蔽。 * 3: 在主函數(shù)中調用以上兩個函數(shù),然后用庫函數(shù)USART_SendData()
* 發(fā)送數(shù)據(jù),用USART_GetFlagStatus(USART1, USART_FLAG_TXE) * 查詢中斷即可。
#include
void delay(u32 x) //延時函數(shù),u32是庫函數(shù)中定義好的宏,意為無符號32位整數(shù) {
while(x--);}
/********************************************************************** * Name : UART1_GPIO_Configuration * Deion : Configures the uart1 GPIO ports. * Input : None * Output : None * Return : None
void UART1_GPIO_Configuration(void) //注意:不是庫函數(shù),而是自己定義的GPIO初始化函數(shù),
{
GPIO_InitTypeDef GPIO_InitStructure;
//定義GPIO管腳初始化結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//本函數(shù)(使能時鐘)參數(shù)中,RCC_APB2Periph_USART1是必不可少的,有人會問,對于串口用到的PA9和
//PA10不用使能時鐘嗎?其實由于USART1默認的就是PA9和PA10,所以這一個就行了,當然你要是加上 //這個|RCC_APB2Periph_GPIOA也是不報錯的,只是重復了。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
//選中串口默認輸出管腳
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定義輸出最大速率
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //定義管腳9的模式
GPIO_Init(GPIOA, &GPIO_InitStructure); //調用函數(shù),把結構體參數(shù)輸入進行初始化
// Configure USART1_Rx as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //同上
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//設置上浮模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
//同上
* Name : UART1_Configuration * Deion : Configures the uart1 * Input : None * Output : None * Return : None
*******************************************************************************/ void USART_Configuration(void) {
USART_InitTypeDef USART_InitStructure; //定義串口初始化結構體
/*USART_ClockInitTypeDef USART_ClockInitStructure;//定義串口模式初始化結構體
USART_ClockInitStructure.USART_Clock = USART_Clock_Enable;// USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit(USART1,&USART_ClockInitStructure); */
USART_InitStructure.USART_BaudRate = 9600; //設置串口通信時的波特率9600
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//設置數(shù)據(jù)位的長度8個位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //設置1個停止位 USART_InitStructure.USART_Parity = USART_Parity_No //設置校驗位“無”
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //設置硬件控制流失能(失能:就是不管用的意思。使能:就是讓某個功能起作用。) USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //設置發(fā)送使能,接收使能 USART_Init(USART1, &USART_InitStructure);
//將以上賦完值的結構體帶入庫函數(shù)USART_Init進行初始化
USART_Cmd(USART1, ENABLE);//開啟USART1,注意與上面RCC_APB2PeriphClockCmd()設置的區(qū)別
}
int main(void)
UART1_GPIO_Configuration(); //調用GPIO初始化函數(shù) USART_Configuration(); //調用USART配置函數(shù) while(1)
//大循環(huán)
{
USART_SendData(USART1, 'A'); //發(fā)送一位數(shù)據(jù)
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //判斷是否發(fā)送完畢 delay(0XFFFFF); //延時
2100433B
1. 全雙工操作(相互獨立的接收數(shù)據(jù)和發(fā)送數(shù)據(jù));
2. 同步操作時,可主機時鐘同步,也可從機時鐘同步;
3. 獨立的高精度波特率發(fā)生器,不占用定時/計數(shù)器;
4. 支持5、6、7、8和9位數(shù)據(jù)位,1或2位停止位的串行數(shù)據(jù)幀結構;
5. 由硬件支持的奇偶校驗位發(fā)生和檢驗;
6. 數(shù)據(jù)溢出檢測;
7. 幀錯誤檢測;
8. 包括錯誤起始位的檢測噪聲濾波器和數(shù)字低通濾波器;
9. 三個完全獨立的中斷,TX發(fā)送完成、TX發(fā)送數(shù)據(jù)寄存器空、RX接收完成;
10.支持多機通信模式;
11.支持倍速異步通信模式。
UART與USART單片機串口通信的區(qū)別
UART與USART都是單片機上的串口通信,他們之間的區(qū)別如下:
首先從名字上看:
UART:universal asynchronous receiver and transmitter通用異步收/發(fā)器
USART:universal synchronous asynchronous receiver and transmitter通用同步/異步收/發(fā)器
從名字上可以看出,USART在UART基礎上增加了同步功能,即USART是UART的增強型,事實也確實是這樣。但是具體增強到了什么地方呢?
其實當我們使用USART在異步通信的時候,它與UART沒有什么區(qū)別,但是用在同步通信的時候,區(qū)別就很明顯了:大家都知道同步通信需要時鐘來觸發(fā)數(shù)據(jù)傳輸,也就是說USART相對UART的區(qū)別之一就是能提供主動時鐘。如STM32的USART可以提供時鐘支持ISO7816的智能卡接口。
任何一個微處理器都要與一定數(shù)量的部件和外圍設備連接,但如果將各部件和每一種外圍設備都分別用一組線路與CPU直接連接,那么連線將會錯綜復雜,甚至難以實現(xiàn)。為了簡化硬件電路設計、簡化系統(tǒng)結構,常用一組線路,配置以適當?shù)慕涌陔娐罚c各部件和外圍設備連接,這組共用的連接線路被稱為總線。采用總線結構便于部件和設備的擴充,尤其制定了統(tǒng)一的總線標準則容易使不同設備間實現(xiàn)互連。
微機中總線一般有內部總線、系統(tǒng)總線和外部總線。內部總線是微機內部各外圍芯片與處理器之間的總線,用于芯片一級的互連;而系統(tǒng)總線是微機中各插件板與系統(tǒng)板之間的總線,用于插件板一級的互連;外部總線則是微機和外部設備之間的總線,微機作為一種設備,通過該總線和其他設備進行信息與數(shù)據(jù)交換,它用于設備一級的互連。
另外,從廣義上說,計算機通信方式可以分為并行通信和串行通信,相應的通信總線被稱為并行總線和串行總線。并行通信速度快、實時性好,但由于占用的口線多,不適于小型化產(chǎn)品;而串行通信速率雖低,但在數(shù)據(jù)通信吞吐量不是很大的微處理電路中則顯得更加簡易、方便、靈活。串行通信一般可分為異步模式和同步模式。
隨著微電子技術和計算機技術的發(fā)展,總線技術也在不斷地發(fā)展和完善,而使計算機總線技術種類繁多,各具特色。下面僅對微機各類總線中目前比較流行的總線技術分別加以介紹。
一、內部總線
1.I2C總線
I2C(Inter-IC)總線10多年前由Philips公司推出,是近年來在微電子通信控制領域廣泛采用的一種新型總線標準。它是同步通信的一種特殊形式,具有接口線少,控制方式簡化,器件封裝形式小,通信速率較高等優(yōu)點。在主從通信中,可以有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。
2.SPI總線
串行外圍設備接口SPI(serialperipheralinterface)總線技術是Motorola公司推出的一種同步串行接口。Motorola公司生產(chǎn)的絕大多數(shù)MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI總線是一種三線同步總線,因其硬件功能很強,所以,與SPI有關的軟件就相當簡單,使CPU有更多的時間處理其他事務。
3.SCI總線
串行通信接口SCI(serialcommunicationinterface)也是由Motorola公司推出的。它是一種通用異步通信接口UART,與MCS-51的異步通信功能基本相同。
4.CAN總線
屬于現(xiàn)場總線的范疇,它是一種有效支持分布式控制或實時控制的串行通信網(wǎng)絡。較之目前許多RS-485基于R線構建的分布式控制系統(tǒng)而言,基于CAN總線的分布式控制系統(tǒng)在以下方面具有明顯的優(yōu)越性。只有2根線與外部相連,并且內部集成了錯誤探測和管理模塊。
二、系統(tǒng)總線
1.ISA總線
ISA(industrialstandardarchitecture)總線標準是IBM公司1984年為推出PC/AT機而建立的系統(tǒng)總線標準,所以也叫AT總線。它是對XT總線的擴展,以適應8/16位數(shù)據(jù)總線要求。它在80286至80486時代應用非常廣泛,以至于現(xiàn)在奔騰機中還保留有ISA總線插槽。ISA總線有98只引腳。
2.EISA總線
EISA總線是1988年由Compaq等9家公司聯(lián)合推出的總線標準。它是在ISA總線的基礎上使用雙層插座,在原來ISA總線的98條信號線上又增加了98條信號線,也就是在兩條ISA信號線之間添加一條EISA信號線。在實用中,EISA總線完全兼容ISA總線信號。
3.VESA總線
VESA(videoelectronicsstandardassociation)總線是1992年由60家附件卡制造商聯(lián)合推出的一種局部總線,簡稱為VL(VESAlocalbus)總線。它的推出為微機系統(tǒng)總線體系結構的革新奠定了基礎。該總線系統(tǒng)考慮到CPU與主存和Cache的直接相連,通常把這部分總線稱為CPU總線或主總線,其他設備通過VL總線與CPU總線相連,所以VL總線被稱為局部總線。它定義了32位數(shù)據(jù)線,且可通過擴展槽擴展到64位,使用33MHz時鐘頻率,最大傳輸率達132MB/s,可與CPU同步工作。是一種高速、高效的局部總線,可支持386SX、386DX、486SX、486DX及奔騰微處理器。
4.PCI總線
PCI(peripheralcomponentinterconnect)總線是當前最流行的總線之一,它是由Intel公司推出的一種局部總線。它定義了32位數(shù)據(jù)總線,且可擴展為64位。PCI總線主板插槽的體積比原ISA總線插槽還小,其功能比VESA、ISA有極大的改善,支持突發(fā)讀寫操作,最大傳輸速率可達132MB/s,可同時支持多組外圍設備。PCI局部總線不能兼容現(xiàn)有的ISA、EISA、MCA(microchannelarchitecture)總線,但它不受制于處理器,是基于奔騰等新一代微處理器而發(fā)展的總線。
5.CompactPCI
以上所列舉的幾種系統(tǒng)總線一般都用于商用PC機中,在計算機系統(tǒng)總線中,還有另一大類為適應工業(yè)現(xiàn)場環(huán)境而設計的系統(tǒng)總線,比如STD總線、VME總線、PC/104總線等。這里僅介紹當前工業(yè)計算機的熱門總線之一——CompactPCI。
CompactPCI的意思是“堅實的PCI”,是當今第一個采用無源總線底板結構的PCI系統(tǒng),是PCI總線的電氣和軟件標準加歐式卡的工業(yè)組裝標準,是當今最新的一種工業(yè)計算機標準。CompactPCI是在原來PCI總線基礎上改造而來,它利用PCI的優(yōu)點,提供滿足工業(yè)環(huán)境應用要求的高性能核心系統(tǒng),同時還考慮充分利用傳統(tǒng)的總線產(chǎn)品,如ISA、STD、VME或PC/104來擴充系統(tǒng)的I/O和其他功能。
三、外部總線
1.RS-232-C總線
RS-232-C是美國電子工業(yè)協(xié)會EIA(ElectronicIndustryAssociation)制定的一種串行物理接口標準。RS是英文“推薦標準”的縮寫,232為標識號,C表示修改次數(shù)。RS-232-C總線標準設有25條信號線,包括一個主通道和一個輔助通道,在多數(shù)情況下主要使用主通道,對于一般雙工通信,僅需幾條信號線就可實現(xiàn),如一條發(fā)送線、一條接收線及一條地線。RS-232-C標準規(guī)定的數(shù)據(jù)傳輸速率為每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。RS-232-C標準規(guī)定,驅動器允許有2500pF的電容負載,通信距離將受此電容限制,例如,采用150pF/m的通信電纜時,最大通信距離為15m;若每米電纜的電容量減小,通信距離可以增加。傳輸距離短的另一原因是RS-232屬單端信號傳送,存在共地噪聲和不能抑制共模干擾等問題,因此一般用于20m以內的通信。
2.RS-485總線
在要求通信距離為幾十米到上千米時,廣泛采用RS-485串行總線標準。RS-485采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力。加上總線收發(fā)器具有高靈敏度,能檢測低至200mV的電壓,故傳輸信號能在千米以外得到恢復。RS-485采用半雙工工作方式,任何時候只能有一點處于發(fā)送狀態(tài),因此,發(fā)送電路須由使能信號加以控制。RS-485用于多點互連時非常方便,可以省掉許多信號線。應用RS-485可以聯(lián)網(wǎng)構成分布式系統(tǒng),其允許最多并聯(lián)32臺驅動器和32臺接收器。
3.IEEE-488總線
上述兩種外部總線是串行總線,而IEEE-488總線是并行總線接口標準。IEEE-488總線用來連接系統(tǒng),如微計算機、數(shù)字電壓表、數(shù)碼顯示器等設備及其他儀器儀表均可用IEEE-488總線裝配起來。它按照位并行、字節(jié)串行雙向異步方式傳輸信號,連接方式為總線方式,儀器設備直接并聯(lián)于總線上而不需中介單元,但總線上最多可連接15臺設備。最大傳輸距離為20米,信號傳輸速度一般為500KB/s,最大傳輸速度為1MB/s。
4.USB總線
通用串行總線USB(universalserialbus)是由Intel、Compaq、Digital、IBM、Microsoft、NEC、NorthernTelecom等7家世界著名的計算機和通信公司共同推出的一種新型接口標準。它基于通用連接技術,實現(xiàn)外設的簡單快速連接,達到方便用戶、降低成本、擴展PC連接外設范圍的目的。它可以為外設提供電源,而不像普通的使用串、并口的設備需要單獨的供電系統(tǒng)。另外,快速是USB技術的突出特點之一,USB的最高傳輸率可達12Mbps比串口快100倍,比并口快近10倍,而且USB還能支持多媒體。
系列:ATMEGA
閃存容量:32KB
EEPROM存儲器容量:1KB
存儲器容量,:RAM 2KB
輸入/輸出線數(shù):32
模數(shù)轉換器輸入數(shù):7
計時器數(shù):3
PWM通道數(shù):4
時鐘頻率:16MHz
接口類型:JTAG, SPI, USART
電源電壓:2.7V to 5.5V
封裝類型:QFP
針腳數(shù):44
工作溫度范圍:-40°C to 85°C