USART 通用同步異步收發器
通用同步異步收發器(USART)提供了一種靈活的方法與使用工業標準NRZ異步串行數據格式的外部設備之間進行全雙工數據交換。USART利用分數波特率發生器提供寬范圍的波特率選擇。 它支持同步單向通信和半雙工單線通信,也支持LIN( 局部互連網) ,智能卡協議和IrDA(紅外數據組織)SIR ENDEC 規范,以及調制解調器(CTS/RTS) 操作。它還允許多處理器通信。使用多緩沖器配置的DMA方式,可以實現高速數據通信。
簡單點講:
USART模式支持:通用的全雙工異步通信模式(UART)、智能卡模式(ISO7816-3,單線半雙工異步模式,但與UART是有區別的)、同步模式(類SPI)、硬件流控模式(調制解調器)、IrDA 模式、LIN通信模式。
USART UART在功能上的區別如下圖[摘自用戶手冊]
USART的中斷可以查看用戶手冊,使能中斷,需要使能NVIC中的,同時還要使能USART模塊中的中斷使能位:【如果按照步驟做后,程序運行不正確,可直接通過偏移地址直接查看各硬件寄存器的相關位,來看程序配置的結果是否正確】
NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQChannel;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
部分主要特性:
● 全雙工的,異步通信
● NRZ標準格式
● 分數波特率發生器系統
─ 發送和接收共用的可編程波特率,最高達4.5Mbits/s
● 可編程數據字長度(8 位或9位)
● 可配置的停止位-支持1 或2個停止位
● LIN主發送同步斷開符的能力以及LIN從檢測斷開符的能力
─ 當USART硬件配置成LIN時,生成13位斷開符;檢測10/11位斷開符
● 發送方為同步傳輸提供時鐘
● IRDA SIR 編碼器解碼器
─ 在正常模式下支持3/16 位的持續時間
● 智能卡模擬功能
─ 智能卡接口支持ISO7816-3 標準里定義的異步智能卡協議
─ 智能卡用到的0.5和1.5個停止位
● 單線半雙工通信
● 可配置的使用DMA的多緩沖器通信
─ 在SRAM 里利用集中式DMA緩沖接收/發送字節
● 單線半雙工通信
● 單獨的發送器和接收器使能位
● 校驗控制 【硬件完成】
─ 發送校驗位
─ 對接收數據進行校驗
● 檢測標志
─ 接收緩沖器滿
─ 發送緩沖器空
─ 傳輸結束標志
● 四個錯誤檢測標志
─ 溢出錯誤
─ 噪音錯誤
─ 幀錯誤
─ 校驗錯誤
● 10個帶標志的中斷源
─ CTS改變
─ LIN斷開符檢測
─ 發送數據寄存器空
─ 發送完成
─ 接收數據寄存器滿
─ 檢測到總線為空閑
─ 溢出錯誤
─ 幀錯誤
─ 噪音錯誤
─ 校驗錯誤
● 多處理器通信 -- 如果地址不匹配,則進入靜默模式
● 兩種喚醒接收器的方式:地址位(MSB ,第9位),總線空閑
USART功能概述
接口通過三個引腳與其他設備連接在一起( 見圖248 ) 。任何USART雙向通信至少需要兩個腳:接
收數據輸入(RX)和發送數據輸出(TX) 。
RX:接收數據串行輸。通過過采樣技術來區別數據和噪音,從而恢復數據。
TX:發送數據輸出。當發送器被禁止時,輸出引腳恢復到它的I/O 端口配置。當發送器被激活,并且不發送數據時,TX引腳處于高電平。在單線和智能卡模式里,此I/O 口被同時用于數據的發送和接收。
USART的智能卡模式
簡介
CPU卡:也稱智能卡,卡內的集成電路中帶有微處理器CPU、存儲單元(包括隨機存儲器RAM、程序存儲器ROM(FLASH)、用戶數據存儲器EEPROM)以及芯片操作系統COS。裝有COS的CPU卡相當于一臺微型計算機,不僅具有數據存儲功能,同時具有命令處理和數據安全保護等功能。CPU卡芯片通俗地講就是指芯片內含有一個微處理器,它的功能相當于一臺微型計算機。人們經常使用的集成電路卡(IC卡)上的金屬片就是CPU卡芯片。
智能卡接口
智能卡時鐘發生器為與之相連的智能卡提供時鐘信號。智能卡使用這個時鐘產生在智能卡與USART模塊之間進行串行通信的波特率時鐘。如果智能卡上有CPU,該時鐘將同時提供給CPU使用。智能卡接口操作要求,在卡上的CPU運行代碼時可以調整時鐘速率,這樣可以改變通訊的波特率,或者可以提升智能卡的性能。在ISO7816-3標準中詳細描述了,協商時鐘速率和改變時鐘速率的協議。這個時鐘被用作智能卡內CPU的時鐘,因此更新微控制器輸出的時鐘頻率必須和智能卡時鐘同步,應注意保證沒有比短周期的40%更短的脈沖。
ISO 7816-3標準為異步協議定義了時間基準單位,稱作ETU(elementary time units),它與輸入至智能卡的時鐘頻率有關。一個ETU的長度是一個位時間。USART接收器和發送器在內部通過Rx_SW信號相連接。必須將USART模塊設置為智能卡模式,才能實現從STM32F10xxx向智能卡傳輸數據。
RST(智能卡復位)、3/5V(3V或5V)、VCC (管理VCC)以及OFF信號(智能卡檢測信號)由軟件控制GPIO
的端口實現(USART硬件只提供CLK、IO兩個引腳,其他的都是軟件模式實現)。為了使數據信號以
正確的驅動連接到智能卡IO引腳,應當把USART_TX端口的GPIO位編程為復用開漏輸出模式,為把
時鐘發生器連接到Smartcard_CLK的引腳,USART_CK端口的GPIO位應配置為復用推挽輸出模式。
智能卡接口是異步通信接口,但是是單線半雙工異步通信,通信與微處理器通信的過程沒有直接的關系,但是該時鐘輸送至智能卡,智能卡時鐘發生器為與之相連的智能卡提供時鐘信號。智能卡使用這個時鐘產生在智能卡與
USART模塊之間進行串行通信的波特率時鐘。如果智能卡上有CPU,該時鐘將同時提供給CPU使用。
智能卡是一個單線半雙工通信協議,當與智能卡相連接時,USART的TX驅動一根智能卡也驅動的雙向線【usart端收發都在一個引腳上,在智能卡模式下在芯片內部通過媒介連接,這也是與智能卡的異步模式與UART通用的異步模式的區別,且智能卡的異步模式處理器還要外送時鐘給智能卡使用】。為了做到這點,SW_RX必須和TX連接到相同的I/O 口。在發送開始位和數據字節期間,發送器的輸出使能位TX_EN被置起,在發送停止位期間被釋放( 弱上拉) ,因此在發現校驗錯誤的情況下接收器可以將數據線拉低。如果TX_EN不被使用,在停止位期間TX被拉到高電平:這樣的話,只要TX配置成開漏,接收器也可以驅動這根線。