一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第二十四章 通用同步異步收發(fā)器(USART)

W55MH32 ? 來(lái)源:W55MH32 ? 作者:W55MH32 ? 2025-05-29 15:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開(kāi)啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)

W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來(lái)前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來(lái)說(shuō),一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開(kāi)發(fā)者提供極大便利。

在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN68和QFN100。

W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、3個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN以及1個(gè)USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價(jià)比優(yōu)勢(shì)顯著,尤其適合網(wǎng)關(guān)模組等對(duì)空間布局要求較高的場(chǎng)景。緊湊的尺寸和精簡(jiǎn)化外設(shè)配置,使其能夠在有限空間內(nèi)實(shí)現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計(jì)算節(jié)點(diǎn)等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場(chǎng)景,軟件使用方法一致。更多信息和資料請(qǐng)進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。

為助力開(kāi)發(fā)者快速上手與深入開(kāi)發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開(kāi)發(fā)板。開(kāi)發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開(kāi)發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開(kāi)發(fā)者全面評(píng)估芯片性能。

若您想獲取芯片和開(kāi)發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問(wèn)官方網(wǎng)頁(yè):http://www.w5500.com/,我們期待與您共同探索W55MH32的無(wú)限可能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第二十四章 通用同步異步收發(fā)器(USART)

1 USART 介紹

通用同步異步收發(fā)器(USART)提供了一種靈活的方法與使用工業(yè)標(biāo)準(zhǔn) NRZ 異步串行數(shù)據(jù)格式的外部設(shè)備之間進(jìn)行全雙工數(shù)據(jù)交換。USART 利用分?jǐn)?shù)波特率發(fā)生器提供寬范圍的波特率選擇。

它支持同步單向通信和半雙工單線通信,也支持 LIN(局部互連網(wǎng)),智能卡協(xié)議和 IrDA(紅外數(shù)據(jù)組織)SIRENDEC 規(guī)范,以及調(diào)制解調(diào)器(CTS/RTS)操作。它還允許多處理器通信。使用多緩沖器配置的 DMA 方式,可以實(shí)現(xiàn)高速數(shù)據(jù)通信。

2 USART 主要特性

W55MH32的USART的主要特性有:

?全雙工的,異步通信

?NRZ 標(biāo)準(zhǔn)格式

?分?jǐn)?shù)波特率發(fā)生器系統(tǒng)

······發(fā)送和接收共用的可編程波特率,最高達(dá) 4.5Mbits/s

?可編程數(shù)據(jù)字長(zhǎng)度(8 位或 9 位)

?可配置的停止位-支持 1 或 2 個(gè)停止位

?LIN 主發(fā)送同步斷開(kāi)符的能力以及 LIN 從檢測(cè)斷開(kāi)符的能力

······當(dāng) USART 硬件配置成 LIN 時(shí),生成 13 位斷開(kāi)符;檢測(cè) 10/11 位斷開(kāi)符

?發(fā)送方為同步傳輸提供時(shí)鐘

?IRDASIR 編碼器解碼器

······在正常模式下支持 3/16 位的持續(xù)時(shí)間

?智能卡模擬功能

······智能卡接口支持 ISO7816-3 標(biāo)準(zhǔn)里定義的異步智能卡協(xié)議

······智能卡用到的 0.5 和 1.5 個(gè)停止位

?單線半雙工通信

?可配置的使用 DMA 的多緩沖器通信

······在 SRAM 里利用集中式 DMA 緩沖接收/發(fā)送字節(jié)

?單獨(dú)的發(fā)送器和接收器使能位

?檢測(cè)標(biāo)志

······接收緩沖器滿

······發(fā)送緩沖器空

······傳輸結(jié)束標(biāo)志

?校驗(yàn)控制

······發(fā)送校驗(yàn)位

······對(duì)接收數(shù)據(jù)進(jìn)行校驗(yàn)

?四個(gè)錯(cuò)誤檢測(cè)標(biāo)志

······溢出錯(cuò)誤

······噪音錯(cuò)誤

······幀錯(cuò)誤

······校驗(yàn)錯(cuò)誤

?10 個(gè)帶標(biāo)志的中斷源

······CTS 改變

······LIN 斷開(kāi)符檢測(cè)

······發(fā)送數(shù)據(jù)寄存器

······發(fā)送完成

······接收數(shù)據(jù)寄存器滿

······檢測(cè)到總線為空閑

······溢出錯(cuò)誤

······幀錯(cuò)誤

······噪音錯(cuò)誤

······校驗(yàn)錯(cuò)誤

?多處理器通信--如果地址不匹配,則進(jìn)入靜默模式

?從靜默模式中喚醒(通過(guò)空閑總線檢測(cè)或地址標(biāo)志檢測(cè))

?兩種喚醒接收器的方式:地址位(MSB,第 9 位),總線空閑

3 USART 功能概述

接口通過(guò)三個(gè)引腳與其他設(shè)備連接在一起(見(jiàn)圖 249)。任何 USART 雙向通信至少需要兩個(gè)腳:接收數(shù)據(jù)輸入(RX)和發(fā)送數(shù)據(jù)輸出(TX)。

RX:接收數(shù)據(jù)串行輸。通過(guò)過(guò)采樣技術(shù)來(lái)區(qū)別數(shù)據(jù)和噪音,從而恢復(fù)數(shù)據(jù)。

TX:發(fā)送數(shù)據(jù)輸出。當(dāng)發(fā)送器被禁止時(shí),輸出引腳恢復(fù)到它的 I/O 端口配置。當(dāng)發(fā)送器被激活,并且不發(fā)送數(shù)據(jù)時(shí),TX 引腳處于高電平。在單線和智能卡模式里,此 I/O 口被同時(shí)用于數(shù)據(jù)的發(fā)送和接收。

?總線在發(fā)送或接收前應(yīng)處于空閑狀態(tài)

?一個(gè)起始位

?一個(gè)數(shù)據(jù)字(8 或 9 位),最低有效位在前

?0.5,1.5,2 個(gè)的停止位,由此表明數(shù)據(jù)幀的結(jié)束

?使用分?jǐn)?shù)波特率發(fā)生器——12 位整數(shù)和 4 位小數(shù)的表示方法。

?一個(gè)狀態(tài)寄存器(USART_SR)

?數(shù)據(jù)寄存器(USART_DR)

?一個(gè)波特率寄存器(USART_BRR),12 位的整數(shù)和 4 位小數(shù)

?一個(gè)智能卡模式下的保護(hù)時(shí)間寄存器(USART_GTPR)

關(guān)于以上寄存器中每個(gè)位的具體定義,請(qǐng)參考寄存器描述第 23.6 節(jié):USART 寄存器描述。在同步模式中需要下列引腳:

?CK:發(fā)送器時(shí)鐘輸出。此引腳輸出用于同步傳輸?shù)臅r(shí)鐘,(在 Start 位和 Stop 位上沒(méi)有時(shí)鐘脈沖,軟件可選地,可以在最后一個(gè)數(shù)據(jù)位送出一個(gè)時(shí)鐘脈沖)。數(shù)據(jù)可以在 RX 上同步被接收。

這可以用來(lái)控制帶有移位寄存器的外部設(shè)備(例如 LCD 驅(qū)動(dòng)器)。時(shí)鐘相位和極性都是軟件可編程的。在智能卡模式里,CK 可以為智能卡提供時(shí)鐘。在 IrDA 模式里需要下列引腳:

?IrDA_RDI:IrDA 模式下的數(shù)據(jù)輸入。

?IrDA_TDO:IrDA 模式下的數(shù)據(jù)輸出。下列引腳在硬件流控模式中需要:

接口通過(guò)三個(gè)引腳與其他設(shè)備連接在一起(見(jiàn)圖 249)。任何 USART 雙向通信至少需要兩個(gè)腳:接收數(shù)據(jù)輸入(RX)和發(fā)送數(shù)據(jù)輸出(TX)。

RX:接收數(shù)據(jù)串行輸。通過(guò)過(guò)采樣技術(shù)來(lái)區(qū)別數(shù)據(jù)和噪音,從而恢復(fù)數(shù)據(jù)。

TX:發(fā)送數(shù)據(jù)輸出。當(dāng)發(fā)送器被禁止時(shí),輸出引腳恢復(fù)到它的 I/O 端口配置。當(dāng)發(fā)送器被激活,并且不發(fā)送數(shù)據(jù)時(shí),TX 引腳處于高電平。在單線和智能卡模式里,此 I/O 口被同時(shí)用于數(shù)據(jù)的發(fā)送和接收。

總線在發(fā)送或接收前應(yīng)處于空閑狀態(tài)

?一個(gè)起始位

?一個(gè)數(shù)據(jù)字(8 或 9 位),最低有效位在前

?0.5,1.5,2 個(gè)的停止位,由此表明數(shù)據(jù)幀的結(jié)束

?使用分?jǐn)?shù)波特率發(fā)生器——12 位整數(shù)和 4 位小數(shù)的表示方法。

?一個(gè)狀態(tài)寄存器(USART_SR)

?數(shù)據(jù)寄存器(USART_DR)

?一個(gè)波特率寄存器(USART_BRR),12 位的整數(shù)和 4 位小數(shù)

?一個(gè)智能卡模式下的保護(hù)時(shí)間寄存器(USART_GTPR)

關(guān)于以上寄存器中每個(gè)位的具體定義,請(qǐng)參考寄存器描述第 23.6 節(jié):USART 寄存器描述。在同步模式中需要下列引腳:

?CK:發(fā)送器時(shí)鐘輸出。此引腳輸出用于同步傳輸?shù)臅r(shí)鐘,(在 Start 位和 Stop 位上沒(méi)有時(shí)鐘脈沖,軟件可選地,可以在最后一個(gè)數(shù)據(jù)位送出一個(gè)時(shí)鐘脈沖)。數(shù)據(jù)可以在 RX 上同步被接收。這可以用來(lái)控制帶有移位寄存器的外部設(shè)備(例如 LCD 驅(qū)動(dòng)器)。時(shí)鐘相位和極性都是軟件可編程的。在智能卡模式里,CK 可以為智能卡提供時(shí)鐘。在 IrDA 模式里需要下列引腳:

?IrDA_RDI:IrDA 模式下的數(shù)據(jù)輸入。

?IrDA_TDO:IrDA 模式下的數(shù)據(jù)輸出。下列引腳在硬件流控模式中需要:

wKgZPGgu7qOATfUlAASgN0Ir5xk640.png

USART 框圖

3.1 USART 特性描述

字長(zhǎng)可以通過(guò)編程 USART_CR1 寄存器中的 M 位,選擇成 8 或 9 位(見(jiàn)圖 230)。在起始位期間,TX腳處于低電平,在停止位期間處于高電平。

空閑符號(hào)被視為完全由'1'組成的一個(gè)完整的數(shù)據(jù)幀,后面跟著包含了數(shù)據(jù)的下一幀的開(kāi)始位(‘1'的位數(shù)也包括了停止位的位數(shù))。

斷開(kāi)符號(hào)被視為在一個(gè)幀周期內(nèi)全部收到'0'(包括停止位期間,也是'0')。在斷開(kāi)幀結(jié)束時(shí),發(fā)送器再插入 1 或 2 個(gè)停止位(‘1')來(lái)應(yīng)答起始位。

發(fā)送和接收由一共用的波特率發(fā)生器驅(qū)動(dòng),當(dāng)發(fā)送器和接收器的使能位分別置位時(shí),分別為其產(chǎn)生時(shí)鐘。

隨后將有每個(gè)功能塊的詳細(xì)說(shuō)明。

wKgZO2g4DiKANqnQAAHJY9uM2Uk609.png

字長(zhǎng)設(shè)置

3.2 發(fā)送器

發(fā)送器根據(jù) M 位的狀態(tài)發(fā)送 8 位或 9 位的數(shù)據(jù)字。當(dāng)發(fā)送使能位(TE)被設(shè)置時(shí),發(fā)送移位寄存器中的數(shù)據(jù)在 TX 腳上輸出,相應(yīng)的時(shí)鐘脈沖在 CK 腳上輸出。

字符發(fā)送

在 USART 發(fā)送期間,在 TX 引腳上首先移出數(shù)據(jù)的最低有效位。在此模式里,USART_DR 寄存器包含了一個(gè)內(nèi)部總線和發(fā)送移位寄存器之間的緩沖器(見(jiàn)圖 249)。

每個(gè)字符之前都有一個(gè)低電平的起始位;之后跟著的停止位,其數(shù)目可配置。USART 支持多種停止位的配置:0.5、1、1.5 和 2 個(gè)停止位。

注: 1.在數(shù)據(jù)傳輸期間不能復(fù)位 TE 位,否則將破壞 TX 腳上的數(shù)據(jù),因?yàn)椴ㄌ芈视?jì)數(shù)器停止計(jì)數(shù)。正在傳輸?shù)漠?dāng)前數(shù)據(jù)將丟失。

2.TE 位被激活后將發(fā)送一個(gè)空閑幀。

可配置的停止位

隨每個(gè)字符發(fā)送的停止位的位數(shù)可以通過(guò)控制寄存器 2 的位 13、12 進(jìn)行編程。

1. 1 個(gè)停止位:停止位位數(shù)的默認(rèn)值。

2. 2 個(gè)停止位:可用于常規(guī) USART 模式、單線模式以及調(diào)制解調(diào)器模式。

3. 0.5 個(gè)停止位:在智能卡模式下接收數(shù)據(jù)時(shí)使用。

4. 1.5 個(gè)停止位:在智能卡模式下發(fā)送和接收數(shù)據(jù)時(shí)使用。

空閑幀包括了停止位。

斷開(kāi)幀是 10 位低電平,后跟停止位(當(dāng) m=0 時(shí));或者 11 位低電平,后跟停止位(m=1 時(shí))。不可能傳輸更長(zhǎng)的斷開(kāi)幀(長(zhǎng)度大于 10 或者 11 位)。

wKgZO2g4DiKAFXeuAAIAs87Ghko991.png

配置停止位

配置步驟:

1. 通過(guò)在 USART_CR1 寄存器上置位 UE 位來(lái)激活 USART

2. 編程 USART_CR1 的 M 位來(lái)定義字長(zhǎng)。

3. 在 USART_CR2 中編程停止位的位數(shù)。

4. 如果采用多緩沖器通信,配置 USART_CR3 中的 DMA 使能位(DMAT)。按多緩沖器通信中的描述配置 DMA 寄存器。

5. 利用 USART_BRR 寄存器選擇要求的波特率。

6. 設(shè)置 USART_CR1 中的 TE 位,發(fā)送一個(gè)空閑幀作為第一次數(shù)據(jù)發(fā)送。

7. 把要發(fā)送的數(shù)據(jù)寫(xiě)進(jìn) USART_DR 寄存器(此動(dòng)作清除 TXE 位)。在只有一個(gè)緩沖器的情況下,

對(duì)每個(gè)待發(fā)送的數(shù)據(jù)重復(fù)步驟 7。

8. 在 USART_DR 寄存器中寫(xiě)入最后一個(gè)數(shù)據(jù)字后,要等待 TC=1,它表示最后一個(gè)數(shù)據(jù)幀的傳輸結(jié)束。當(dāng)需要關(guān)閉 USART 或需要進(jìn)入停機(jī)模式之前,需要確認(rèn)傳輸結(jié)束,避免破壞最后一次傳輸。

單字節(jié)通信

清零 TXE 位總是通過(guò)對(duì)數(shù)據(jù)寄存器的寫(xiě)操作來(lái)完成的。TXE 位由硬件來(lái)設(shè)置,它表明:

數(shù)據(jù)已經(jīng)從 TDR 移送到移位寄存器,數(shù)據(jù)發(fā)送已經(jīng)開(kāi)始

TDR 寄存器被清空

下一個(gè)數(shù)據(jù)可以被寫(xiě)進(jìn) USART_DR 寄存器而不會(huì)覆蓋先前的數(shù)據(jù)如果 TXEIE 位被設(shè)置,此標(biāo)志將產(chǎn)生一個(gè)中斷。

如果此時(shí) USART 正在發(fā)送數(shù)據(jù),對(duì) USART_DR 寄存器的寫(xiě)操作把數(shù)據(jù)存進(jìn) TDR 寄存器,并在當(dāng)前傳輸結(jié)束時(shí)把該數(shù)據(jù)復(fù)制進(jìn)移位寄存器。

如果此時(shí) USART 沒(méi)有在發(fā)送數(shù)據(jù),處于空閑狀態(tài),對(duì) USART_DR 寄存器的寫(xiě)操作直接把數(shù)據(jù)放進(jìn)移位寄存器,數(shù)據(jù)傳輸開(kāi)始,TXE 位立即被置起。當(dāng)一幀發(fā)送完成時(shí)(停止位發(fā)送后)并且設(shè)置了 TXE 位,TC 位被置起,如果 USART_CR1 寄存器中的 TCIE 位被置起時(shí),則會(huì)產(chǎn)生中斷。在 USART_DR 寄存器中寫(xiě)入了最后一個(gè)數(shù)據(jù)字后,在關(guān)閉 USART 模塊之前或設(shè)置微控制器進(jìn)入低功耗模式(詳見(jiàn)下圖)之前,必須先等待 TC=1。使用下列軟件過(guò)程清除 TC 位:

1.讀一次 USART_SR 寄存器;

2.寫(xiě)一次 USART_DR 寄存器。

注: TC 位也可以通過(guò)軟件對(duì)它寫(xiě)'0'來(lái)清除。此清零方式只推薦在多緩沖器通信模式下使用。

wKgZO2g4DiKAfVBwAALLK9CEFvU589.png

發(fā)送時(shí) TC/TXE 的變化情況

斷開(kāi)符號(hào)

設(shè)置 SBK 可發(fā)送一個(gè)斷開(kāi)符號(hào)。斷開(kāi)幀長(zhǎng)度取決 M 位(見(jiàn)圖 230)。如果設(shè)置 SBK=1,在完成當(dāng)前數(shù)據(jù)發(fā)送后,將在 TX 線上發(fā)送一個(gè)斷開(kāi)符號(hào)。斷開(kāi)字符發(fā)送完成時(shí)(在斷開(kāi)符號(hào)的停止位時(shí))SBK 被硬件復(fù)位。USART 在最后一個(gè)斷開(kāi)幀的結(jié)束處插入一邏輯'1',以保證能識(shí)別下一幀的起始位。

注意: 如果在開(kāi)始發(fā)送斷開(kāi)幀之前,軟件又復(fù)位了 SBK 位,斷開(kāi)符號(hào)將不被發(fā)送。如果要發(fā)送兩個(gè)連續(xù)的斷開(kāi)幀,SBK 位應(yīng)該在前一個(gè)斷開(kāi)符號(hào)的停止位之后置起。

空閑符號(hào):置位 TE 將使得 USART 在第一個(gè)數(shù)據(jù)幀前發(fā)送一空閑幀。

3.3 接收器

USART 可以根據(jù) USART_CR1 的 M 位接收 8 位或 9 位的數(shù)據(jù)字。

起始位偵測(cè)

在 USART 中,如果辨認(rèn)出一個(gè)特殊的采樣序列,那么就認(rèn)為偵測(cè)到一個(gè)起始位。

該序列為:1110X0X0X0000

wKgZPGg4DiOAH_ZqAAN1JYGwLvs714.png

起始位偵測(cè)

注意: 如果該序列不完整,那么接收端將退出起始位偵測(cè)并回到空閑狀態(tài)(不設(shè)置標(biāo)志位)等待下降沿。如果 3 個(gè)采樣點(diǎn)都為'0'(在第 3、5、7 位的第一次采樣,和在第 8、9、10 的第二次采樣都為'0'),則確認(rèn)收到起始位,這時(shí)設(shè)置 RXNE 標(biāo)志位,如果 RXNEIE=1,則產(chǎn)生中斷。

如果兩次 3 個(gè)采樣點(diǎn)上僅有 2 個(gè)是'0'(第 3、5、7 位的采樣點(diǎn)和第 8、9、10 位的采樣點(diǎn)),那么起始位仍然是有效的,但是會(huì)設(shè)置 NE 噪聲標(biāo)志位。如果不能滿足這個(gè)條件,則中止起始位的偵測(cè)過(guò)程,接收器會(huì)回到空閑狀態(tài)(不設(shè)置標(biāo)志位)。如果有一次 3 個(gè)采樣點(diǎn)上僅有 2 個(gè)是'0'(第 3、5、7 位的采樣點(diǎn)或第 8、9、10 位的采樣點(diǎn)),那么起始位仍然是有效的,但是會(huì)設(shè)置 NE 噪聲標(biāo)志位

字符接收

在 USART 接收期間,數(shù)據(jù)的最低有效位首先從 RX 腳移進(jìn)。在此模式里,USART_DR 寄存器包含的緩沖器位于內(nèi)部總線和接收移位寄存器之間。

配置步驟:

1. 將 USART_CR1 寄存器的 UE 置 1 來(lái)激活 USART。

2. 編程 USART_CR1 的 M 位定義字長(zhǎng)

3. 在 USART_CR2 中編寫(xiě)停止位的個(gè)數(shù)

4. 如果需多緩沖器通信,選擇 USART_CR3 中的 DMA 使能位(DMAR)。按多緩沖器通信所要求的配置 DMA 寄存器。

5. 利用波特率寄存器 USART_BRR 選擇希望的波特率。

6. 設(shè)置 USART_CR1 的 RE 位。激活接收器,使它開(kāi)始尋找起始位。當(dāng)一字符被接收到時(shí),

?RXNE位被置位。它表明移位寄存器的內(nèi)容被轉(zhuǎn)移到 RDR。換句話說(shuō),數(shù)據(jù)已經(jīng)被接收并且可以被讀出(包括與之有關(guān)的錯(cuò)誤標(biāo)志)。

?如果 RXNEIE 位被設(shè)置,產(chǎn)生中斷。

?在接收期間如果檢測(cè)到幀錯(cuò)誤,噪音或溢出錯(cuò)誤,錯(cuò)誤標(biāo)志將被置起,

?在多緩沖器通信時(shí),RXNE 在每個(gè)字節(jié)接收后被置起,并由 DMA 對(duì)數(shù)據(jù)寄存器的讀操作而清零。

?在單緩沖器模式里,由軟件讀 USART_DR 寄存器完成對(duì) RXNE 位清除。RXNE 標(biāo)志也可以通過(guò)對(duì)它寫(xiě) 0 來(lái)清除。RXNE 位必須在下一字符接收結(jié)束前被清零,以避免溢出錯(cuò)誤。

注意: 在接收數(shù)據(jù)時(shí),RE 位不應(yīng)該被復(fù)位。如果 RE 位在接收時(shí)被清零,當(dāng)前字節(jié)的接收被丟失。

斷開(kāi)符號(hào)

當(dāng)接收到一個(gè)斷開(kāi)幀時(shí),USART 像處理幀錯(cuò)誤一樣處理它。

空閑符號(hào)

當(dāng)一空閑幀被檢測(cè)到時(shí),其處理步驟和接收到普通數(shù)據(jù)幀一樣,但如果 IDLEIE 位被設(shè)置將產(chǎn)生一個(gè)中斷。

溢出錯(cuò)誤

如果 RXNE 還沒(méi)有被復(fù)位,又接收到一個(gè)字符,則發(fā)生溢出錯(cuò)誤。數(shù)據(jù)只有當(dāng) RXNE 位被清零后才能從移位寄存器轉(zhuǎn)移到 RDR 寄存器。RXNE 標(biāo)記是接收到每個(gè)字節(jié)后被置位的。如果下一個(gè)數(shù)據(jù)已被收到或先前 DMA 請(qǐng)求還沒(méi)被服務(wù)時(shí),RXNE 標(biāo)志仍是置起的,溢出錯(cuò)誤產(chǎn)生。當(dāng)溢出錯(cuò)誤產(chǎn)生時(shí):

?ORE 位被置位。

?RDR 內(nèi)容將不會(huì)丟失。讀 USART_DR 寄存器仍能得到先前的數(shù)據(jù)。

?移位寄存器中以前的內(nèi)容將被覆蓋。隨后接收到的數(shù)據(jù)都將丟失。

?如果 RXNEIE 位被設(shè)置或 EIE 和 DMAR 位都被設(shè)置,中斷產(chǎn)生。

?順序執(zhí)行對(duì) USART_SR 和 USART_DR 寄存器的讀操作,可復(fù)位 ORE 位

注意: 當(dāng) ORE 位置位時(shí),表明至少有 1 個(gè)數(shù)據(jù)已經(jīng)丟失。有兩種可能性:

?如果 RXNE=1,上一個(gè)有效數(shù)據(jù)還在接收寄存器 RDR 上,可以被讀出。

?如果 RXNE=0,這意味著上一個(gè)有效數(shù)據(jù)已經(jīng)被讀走,RDR已經(jīng)沒(méi)有東西可讀。當(dāng)上一個(gè)有效數(shù)據(jù)在 RDR 中被讀取的同時(shí)又接收到新的(也就是丟失的)數(shù)據(jù)時(shí),此種情況可能發(fā)生。在讀序列期間(在 USART_SR 寄存器讀訪問(wèn)和 USART_DR 讀訪問(wèn)之間)接收到新的數(shù)據(jù),此種情況也可能發(fā)生。

噪音錯(cuò)誤

使用過(guò)采樣技術(shù)(同步模式除外),通過(guò)區(qū)別有效輸入數(shù)據(jù)和噪音來(lái)進(jìn)行數(shù)據(jù)恢復(fù)。

wKgZO2g4DiCARrh7AADX1CY5oMY209.png

檢測(cè)噪聲的數(shù)據(jù)采樣

檢測(cè)噪聲的數(shù)據(jù)采樣

采樣值 NE 狀態(tài) 接收的位 數(shù)據(jù)有效性
000 0 0 有效
001 1 0 無(wú)效
010 1 0 無(wú)效
011 1 1 無(wú)效
100 1 0 無(wú)效
101 1 1 無(wú)效
110 1 1 無(wú)效
111 0 1 有效

當(dāng)在接收幀中檢測(cè)到噪音時(shí):

?在 RXNE 位的上升沿設(shè)置 NE 標(biāo)志。

?無(wú)效數(shù)據(jù)從移位寄存器傳送到 USART_DR 寄存器。

?在單個(gè)字節(jié)通信情況下,沒(méi)有中斷產(chǎn)生。然而,因?yàn)?NE 標(biāo)志位和 RXNE 標(biāo)志位是同時(shí)被設(shè)置,RXNE 將產(chǎn)生中斷。在多緩沖器通信情況下,如果已經(jīng)設(shè)置了 USART_CR3 寄存器中 EIE 位,將產(chǎn)生一個(gè)中斷。先讀出 USART_SR,再讀出 USART_DR 寄存器,將清除 NE 標(biāo)志位。

幀錯(cuò)誤

當(dāng)以下情況發(fā)生時(shí)檢測(cè)到幀錯(cuò)誤:

由于沒(méi)有同步上或大量噪音的原因,停止位沒(méi)有在預(yù)期的時(shí)間上接和收識(shí)別出來(lái)。

當(dāng)幀錯(cuò)誤被檢測(cè)到時(shí):

?FE 位被硬件置起

?無(wú)效數(shù)據(jù)從移位寄存器傳送到 USART_DR 寄存器。

?在單字節(jié)通信時(shí),沒(méi)有中斷產(chǎn)生。然而,這個(gè)位和 RXNE 位同時(shí)置起,后者將產(chǎn)生中斷。在多緩沖器通信情況下,如果 USART_CR3 寄存器中 EIE 位被置位的話,將產(chǎn)生中斷。順序執(zhí)行對(duì) USART_SR 和 USART_DR 寄存器的讀操作,可復(fù)位 FE 位。接收期間的可配置的停止位被接收的停止位的個(gè)數(shù)可以通過(guò)控制寄存器 2的控制位來(lái)配置,在正常模式時(shí),可以是 1或 2個(gè),在智能卡模式里可能是 0.5 或 1.5 個(gè)。

1. 0.5 個(gè)停止位(智能卡模式中的接收):不對(duì) 0.5 個(gè)停止位進(jìn)行采樣。因此,如果選擇 0.5 個(gè)停止位則不能檢測(cè)幀錯(cuò)誤和斷開(kāi)幀。

2. 1 個(gè)停止位:對(duì) 1 個(gè)停止位的采樣在第 8,第 9 和第 10 采樣點(diǎn)上進(jìn)行。

3. 1.5 個(gè)停止位(智能卡模式):當(dāng)以智能卡模式發(fā)送時(shí),器件必須檢查數(shù)據(jù)是否被正確的發(fā)送出去。所以接收器功能塊必須被激活(USART_CR1 寄存器中的 RE=1),并且在停止位的發(fā)送期間采樣數(shù)據(jù)線上的信號(hào)。如果出現(xiàn)校驗(yàn)錯(cuò)誤,智能卡會(huì)在發(fā)送方采樣 NACK 信號(hào)時(shí),即總線上停止位對(duì)應(yīng)的時(shí)間內(nèi)時(shí),拉低數(shù)據(jù)線,以此表示出現(xiàn)了幀錯(cuò)誤。FE 在 1.5 個(gè)停止位結(jié)束時(shí)和RXNE 一起被置起。對(duì) 1.5 個(gè)停止位的采樣是在第 16,第 17 和第 18 采樣點(diǎn)進(jìn)行的。1.5 個(gè)的停止位可以被分成 2 部分:一個(gè)是 0.5 個(gè)時(shí)鐘周期,期間不做任何事情。隨后是 1 個(gè)時(shí)鐘周期的停止位,在這段時(shí)間的中點(diǎn)處采樣。詳見(jiàn)第 23.3.11 節(jié):智能卡。

4. 2 個(gè)停止位:對(duì) 2 個(gè)停止位的采樣是在第一停止位的第 8,第 9 和第 10 個(gè)采樣點(diǎn)完成的。如果第一個(gè)停止位期間檢測(cè)到一個(gè)幀錯(cuò)誤,幀錯(cuò)誤標(biāo)志將被設(shè)置。第二個(gè)停止位不再檢查幀錯(cuò)誤。在第一個(gè)停止位結(jié)束時(shí) RXNE 標(biāo)志將被設(shè)置。

3.4 分?jǐn)?shù)波特率的產(chǎn)生

接收器和發(fā)送器的波特率在 USARTDIV 的整數(shù)和小數(shù)寄存器中的值應(yīng)設(shè)置成相同。

Tx/Rx波特率 = fck/(16 ? USARTDIV)這里的 fCK 是給外設(shè)的時(shí)鐘(PCLK1 用于 USART2、3、4、5,PCLK2 用于 USART1)USARTDIV 是一個(gè)無(wú)符號(hào)的定點(diǎn)數(shù)。這 12 位的值設(shè)置在 USART_BRR 寄存器。

注: 在寫(xiě)入 USART_BRR 之后,波特率計(jì)數(shù)器會(huì)被波特率寄存器的新值替換。因此,不要在通信進(jìn)行中改變波特率寄存器的數(shù)值

如何從 USART_BRR 寄存器值得到 USARTDIV

例 1:

如果 DIV_Mantissa=0d27,DIV_Fraction=0d12(USART_BRR=0x1BC),

于是:

Mantissa(USARTDIV)=0d27

Fraction(USARTDIV)=12/16=0d0.75

所以 USARTDIV=0d27.75

例 2:

要求 USARTDIV=0d25.62,

就有:

DIV_Fraction=16*0.62=0d9.92

最接近的整數(shù)是:10=0x0A

DIV_Mantissa=mantissa(0d25.620)=0d25=0x19

于是,USART_BRR=0x19A 因此 USARTDIV = 0d25.625

例 3:

要求 USARTDIV=0d50.99

就有:

DIV_Fraction=16*0d0.99=0d15.84

最接近的整數(shù)是:16=0x10=>DIV_frac[3:0]溢出=>進(jìn)位必須加到小數(shù)部分

DIV_Mantissa=mantissa(0d50.990+進(jìn)位)=0d51=0x33

于是:USART_BRR=0x330,USARTDIV=0d51.000

設(shè)置波特率時(shí)的誤差計(jì)算

序號(hào) 波特率 (Kbps) fPCLK=36MHz fPCLK=72MHz
實(shí)際 置于波特率寄存器中的值 誤差 % 實(shí)際 置于波特率寄存器中的值 誤差 %
1 2.4 2.400 937.5 0% 2.4 1875 0%
2 9.6 9.600 234.375 0% 9.6 468.75 0%
3 19.2 19.2 117.1875 0% 19.2 234.375 0%
4 57.6 57.6 39.0625 0% 57.6 78.125 0%
5 115.2 115.384 19.5 0.15% 115.2 39.0625 0%
6 230.4 230.769 9.75 0.16% 230.769 19.5 0.16%
7 460.8 461.538 4.875 0.16% 461.538 9.75 0.16%
8 921.6 923.076 2.4375 0.16% 923.076 4.875 0.16%
9 2250 2250 1 0% 2250 2 0%

分享波特率和誤差%之間有什么關(guān)系?

fPCLK為72MHz時(shí),置于波特率寄存器中的值能否小于實(shí)際值?

如何根據(jù)實(shí)際需求選擇合適的波特率?

注: 1.CPU 的時(shí)鐘頻率越低,則某一特定波特率的誤差也越低??梢赃_(dá)到的波特率上限可以由這組數(shù)據(jù)得到。

只有 USART1 使用 PCLK2(最高 72MHz)。其它 USART 使用 PCLK1(最高 36MHz)。

3.5 USART 接收器容忍時(shí)鐘的變化

只有當(dāng)整體的時(shí)鐘系統(tǒng)地變化小于 USART 異步接收器能夠容忍的范圍,USART 異步接收器才能正常地工作。影響這些變化的因素有:

?DTRA:由于發(fā)送器誤差而產(chǎn)生的變化(包括發(fā)送器端振蕩器的變化)

?DQUANT:接收器端波特率取整所產(chǎn)生的誤差

?DREC:接收器端振蕩器的變化

?DTCL:由于傳輸線路產(chǎn)生的變化(通常是由于收發(fā)器在由低變高的轉(zhuǎn)換時(shí)序,與由高變低轉(zhuǎn)換時(shí)序之間的不一致性所造成)。需要滿足:?DTRA+DQUANT+DREC+DTCL

?由 USART_CR1 寄存器的 M 位定義的 10 或 11 位字符長(zhǎng)度

?是否使用分?jǐn)?shù)波特率產(chǎn)生

當(dāng) DIV_Fraction=0 時(shí),USART 接收器的容忍度

M 位 認(rèn)為 NF 是錯(cuò)誤 不認(rèn)為 NF 是錯(cuò)誤
0 3.75% 4.375%
1 3.41% 3.97%

當(dāng) DIV_Fraction!=0 時(shí),USART 接收器的容忍度

M 位 認(rèn)為 NF 是錯(cuò)誤 不認(rèn)為 NF 是錯(cuò)誤
0 3.33% 3.88%
1 3.03% 3.53%

注: 在特殊的情況下,即當(dāng)收到的幀包含一些在 M=0 時(shí),正好是 10 位(M=1 時(shí)是 11 位)的空閑幀,上面 2 個(gè)表格中的數(shù)據(jù)可能會(huì)有少許出入

3.6 多處理器通信

通過(guò) USART 可以實(shí)現(xiàn)多處理器通信(將幾個(gè) USART 連在一個(gè)網(wǎng)絡(luò)里)。例如某個(gè) USART 設(shè)備可以是主,它的 TX 輸出和其他 USART 從設(shè)備的 RX 輸入相連接;USART 從設(shè)備各自的 TX 輸出邏輯地與在一起,并且和主設(shè)備的 RX 輸入相連接。

在多處理器配置中,我們通常希望只有被尋址的接收者才被激活,來(lái)接收隨后的數(shù)據(jù),這樣就可以減少由未被尋址的接收器的參與帶來(lái)的多余的 USART 服務(wù)開(kāi)銷。未被尋址的設(shè)備可啟用其靜默功能置于靜默模式。在靜默模式里:

?任何接收狀態(tài)位都不會(huì)被設(shè)置。

?所有接收中斷被禁止。

?USART_CR1 寄存器中的 RWU 位被置 1。RWU 可以被硬件自動(dòng)控制或在某個(gè)條件下由軟件寫(xiě)入。

根據(jù) USART_CR1 寄存器中的 WAKE 位狀態(tài),USART 可以用二種方法進(jìn)入或退出靜默模式。

?如果 WAKE 位被復(fù)位:進(jìn)行空閑總線檢測(cè)。

?如果 WAKE 位被設(shè)置:進(jìn)行地址標(biāo)記檢測(cè)。

空閑總線檢測(cè)(WAKE=0)

當(dāng) RWU 位被寫(xiě) 1 時(shí),USART 進(jìn)入靜默模式。當(dāng)檢測(cè)到一空閑幀時(shí),它被喚醒。然后 RWU 被硬件清零,但是 USART_SR 寄存器中的 IDLE 位并不置起。RWU 還可以被軟件寫(xiě) 0。下圖給出利用空閑總線檢測(cè)來(lái)喚醒和進(jìn)入靜默模式的一個(gè)例子

wKgZPGg4DiCAeUDPAACQriPodPE443.png

利用空閑總線檢測(cè)的靜默模式

地址標(biāo)記(addressmark)檢測(cè)(WAKE=1)

在這個(gè)模式里,如果 MSB 是 1,該字節(jié)被認(rèn)為是地址,否則被認(rèn)為是數(shù)據(jù)。在一個(gè)地址字節(jié)中,目標(biāo)接收器的地址被放在 4 個(gè) LSB 中。這個(gè) 4 位地址被接收器同它自己地址做比較,接收器的地址被編程在 USART_CR2 寄存器的 ADD。

如果接收到的字節(jié)與它的編程地址不匹配時(shí),USART 進(jìn)入靜默模式。此時(shí),硬件設(shè)置 RWU 位。接收該字節(jié)既不會(huì)設(shè)置 RXNE 標(biāo)志也不會(huì)產(chǎn)生中斷或發(fā)出 DMA 請(qǐng)求,因?yàn)?USART 已經(jīng)在靜默模式。當(dāng)接收到的字節(jié)與接收器內(nèi)編程地址匹配時(shí),USART 退出靜默模式。然后 RWU 位被清零,隨后的字節(jié)被正常接收。收到這個(gè)匹配的地址字節(jié)時(shí)將設(shè)置 RXNE 位,因?yàn)?RWU 位已被清零。當(dāng)接收緩沖器不包含數(shù)據(jù)時(shí)(USART_SR 的 RXNE=0),RWU 位可以被寫(xiě) 0 或 1。否則,該次寫(xiě)操作被忽略。下圖給出利用地址標(biāo)記檢測(cè)來(lái)喚醒和進(jìn)入靜默模式的例子。

wKgZO2g4DiGARWmOAAEJken1UEE729.png

利用地址標(biāo)記檢測(cè)的靜默模式

3.7 校驗(yàn)控制

設(shè)置 USART_CR1 寄存器上的 PCE 位,可以使能奇偶控制(發(fā)送時(shí)生成一個(gè)奇偶位,接收時(shí)進(jìn)行奇偶校驗(yàn))。根據(jù) M 位定義的幀長(zhǎng)度,可能的 USART 幀格式列在下表中。

幀格式

M 位 PCE 位 USART 幀
0 0 起始位、8 位數(shù)據(jù)、停止位
0 1 起始位、7 位數(shù)據(jù)、奇偶檢驗(yàn)位、停止位
1 0 起始位、9 位數(shù)據(jù)、停止位
1 1 起始位、8 位數(shù)據(jù)、奇偶檢驗(yàn)位、停止位

注意: 在用地址標(biāo)記喚醒設(shè)備時(shí),地址的匹配只考慮到數(shù)據(jù)的 MSB 位,而不用關(guān)心校驗(yàn)位。(MSB 是數(shù)據(jù)位中最后發(fā)出的,后面緊跟校驗(yàn)位或者停止位)

偶校驗(yàn):校驗(yàn)位使得一幀中的 7 或 8 個(gè) LSB 數(shù)據(jù)以及校驗(yàn)位中'1'的個(gè)數(shù)為偶數(shù)。

例如:數(shù)據(jù)=00110101,有 4 個(gè)'1',如果選擇偶校驗(yàn)(在 USART_CR1 中的 PS=0),校驗(yàn)位將是'0'。

奇校驗(yàn):此校驗(yàn)位使得一幀中的 7 或 8 個(gè) LSB 數(shù)據(jù)以及校驗(yàn)位中'1'的個(gè)數(shù)為奇數(shù)。

例如:數(shù)據(jù)=00110101,有 4 個(gè)'1',如果選擇奇校驗(yàn)(在 USART_CR1 中的 PS=1),校驗(yàn)位將是'1'。

傳輸模式:如果 USART_CR1 的 PCE 位被置位,寫(xiě)進(jìn)數(shù)據(jù)寄存器的數(shù)據(jù)的 MSB 位被校驗(yàn)位替換后發(fā)送出去(如果選擇偶校驗(yàn)偶數(shù)個(gè)'1',如果選擇奇校驗(yàn)奇數(shù)個(gè)'1')。如果奇偶校驗(yàn)失敗,USART_SR寄存器中的 PE 標(biāo)志被置'1',并且如果 USART_CR1 寄存器的 PEIE 在被預(yù)先設(shè)置的話,中斷產(chǎn)生。

3.8 LIN(局域互聯(lián)網(wǎng))模式

LIN 模式是通過(guò)設(shè)置 USART_CR2 寄存器的 LINEN 位選擇。在 LIN 模式下,下列位必須保持為 0:

?USART_CR2 寄存器的 CLKEN 位

?USART_CR3 寄存器的 STOP[1:0],SCEN,HDSEL 和 IREN

LIN 發(fā)送

23.3.2 節(jié)里所描述的同樣步驟適用于 LIN 主發(fā)送,但和正常 USART 發(fā)送有以下區(qū)別:

?清零 M 位以配置 8 位字長(zhǎng)

?置位LINEN位以進(jìn)入LIN模式。這時(shí),置位SBK將發(fā)送13位'0'作為斷開(kāi)符號(hào)。然后發(fā)一位'1',以允許對(duì)下一個(gè)開(kāi)始位的檢測(cè)。

LIN 接收

當(dāng) LIN 模式被使能時(shí),斷開(kāi)符號(hào)檢測(cè)電路被激活。該檢測(cè)完全獨(dú)立于 USART 接收器。斷開(kāi)符號(hào)只要一出現(xiàn)就能檢測(cè)到,不管是在總線空閑時(shí)還是在發(fā)送某數(shù)據(jù)幀其間,數(shù)據(jù)幀還未完成,又插入了斷開(kāi)符號(hào)的發(fā)送。

當(dāng)接收器被激活時(shí)(USART_CR1 的 RE=1),電路監(jiān)測(cè) RX 上的起始信號(hào)。監(jiān)測(cè)起始位的方法同檢測(cè)斷開(kāi)符號(hào)或數(shù)據(jù)是一樣的。當(dāng)起始位被檢測(cè)到后,電路對(duì)每個(gè)接下來(lái)的位,在每個(gè)位的第 8,9,10 個(gè)過(guò)采樣時(shí)鐘點(diǎn)上進(jìn)行采樣。如果 10 個(gè)(當(dāng) USART_CR2 的 LBDL=0)或 11 個(gè)(當(dāng) USART_CR2 的LBDL=1)連續(xù)位都是'0',并且又跟著一個(gè)定界符,USART_SR 的 LBD 標(biāo)志被設(shè)置。如果 LBDIE 位=1,中斷產(chǎn)生。在確認(rèn)斷開(kāi)符號(hào)前,要檢查定界符,因?yàn)樗馕?RX 線已經(jīng)回到高電平。如果在第 10 或 11 個(gè)采樣點(diǎn)之前采樣到了'1',檢測(cè)電路取消當(dāng)前檢測(cè)并重新尋找起始位。如果 LIN模式被禁止,接收器繼續(xù)如正常 USART 那樣工作,不需要考慮檢測(cè)斷開(kāi)符號(hào)。如果 LIN 模式?jīng)]有被激活(LINEN=0),接收器仍然正常工作于 USART 模式,不會(huì)進(jìn)行斷開(kāi)檢測(cè)。如果 LIN 模式被激活(LINEN=1),只要一發(fā)生幀錯(cuò)誤(也就是停止位檢測(cè)到'0',這種情況出現(xiàn)在斷開(kāi)幀),接收器就停止,直到斷開(kāi)符號(hào)檢測(cè)電路接收到一個(gè)'1'(這種情況發(fā)生于斷開(kāi)符號(hào)沒(méi)有完整的發(fā)出來(lái)),或一個(gè)定界符(這種情況發(fā)生于已經(jīng)檢測(cè)到一個(gè)完整的斷開(kāi)符號(hào))。

wKgZO2g4DiKAKS9NAAIzHjMeAjc040.png

LIN 模式下的斷開(kāi)檢測(cè)(11 位斷開(kāi)長(zhǎng)度–設(shè)置了 LBDL 位)

wKgZO2g4DiGAMxvlAAE_HBQkdEo410.png

LIN 模式下的斷開(kāi)檢測(cè)與幀錯(cuò)誤的檢測(cè)

3.9 USART 同步模式

通過(guò)在 USART_CR2 寄存器上寫(xiě) CLKEN 位選擇同步模式

在同步模式里,下列位必須保持清零狀態(tài):

USART_CR2 寄存器中的 LINEN 位

USART_CR3 寄存器中的 SCEN,HDSEL 和 IREN 位

USART 允許用戶以主模式方式控制雙向同步串行通信。CK 腳是 USART 發(fā)送器時(shí)鐘的輸出。在起始位和停止位期間,CK 腳上沒(méi)有時(shí)鐘脈沖。根據(jù) USART_CR2 寄存器中 LBCL 位的狀態(tài),決定在最后一個(gè)有效數(shù)據(jù)位期間產(chǎn)生或不產(chǎn)生時(shí)鐘脈沖。USART_CR2 寄存器的 CPOL 位允許用戶選擇時(shí)鐘極性,USART_CR2 寄存器上的 CPHA 位允許用戶選擇外部時(shí)鐘的相位(見(jiàn)圖 239、圖 260 和圖 261)。在總線空閑期間,實(shí)際數(shù)據(jù)到來(lái)之前以及發(fā)送斷開(kāi)符號(hào)的時(shí)候,外部 CK 時(shí)鐘不被激活。同步模式時(shí),USART 發(fā)送器和異步模式里工作一模一樣。但是因?yàn)?CK 是與 TX 同步的(根據(jù) CPOL和 CPHA),所以 TX 上的數(shù)據(jù)是隨 CK 同步發(fā)出的。

同步模式的 USART 接收器工作方式與異步模式不同。如果 RE=1,數(shù)據(jù)在 CK 上采樣(根據(jù) CPOL 和CPHA 決定在上升沿還是下降沿),不需要任何的過(guò)采樣。但必須考慮建立時(shí)間和持續(xù)時(shí)間(取決于波特率,1/16 位時(shí)間)。

注意: 1.CK 腳同 TX 腳一起聯(lián)合工作。因而,只有在使能了發(fā)送器(TE=1),并且發(fā)送數(shù)據(jù)時(shí)(寫(xiě)入數(shù)據(jù)至 USART_DR 寄存器)才提供時(shí)鐘。這意味著在沒(méi)有發(fā)送數(shù)據(jù)時(shí)是不可能接收一個(gè)同步數(shù)據(jù)的。

2.LBCL,CPOL 和 CPHA 位的正確配置,應(yīng)該在發(fā)送器和接收器都被禁止時(shí);當(dāng)使能了發(fā)送器或接收器時(shí),這些位不能被改變

3.建議在同一條指令中設(shè)置 TE 和 RE,以減少接收器的建立時(shí)間和保持時(shí)間。

4.USART 只支持主模式:它不能用來(lái)自其他設(shè)備的輸入時(shí)鐘接收或發(fā)送數(shù)據(jù)(CK 永遠(yuǎn)是輸出)。

wKgZO2g4DiGAJ75yAABU1LZkzho406.png

USART 同步傳輸?shù)睦?/p>

wKgZPGg4DiGAH1SlAAHNATyVCv8425.png

USART 數(shù)據(jù)時(shí)鐘時(shí)序示例(M=0)

wKgZPGg4DiKAbQ4NAAHfhtizHu8868.png

USART 數(shù)據(jù)時(shí)鐘時(shí)序示例(M=1)

wKgZO2g4DiGAWYrjAAB5s-LzzNM506.png

RX 數(shù)據(jù)采樣/保持時(shí)間

注: 在智能卡模式下 CK 的功能不同,有關(guān)細(xì)節(jié)請(qǐng)參考智能卡模式部分。

3.10 單線半雙工通信

單線半雙方模式通過(guò)設(shè)置 USART_CR3 寄存器的 HDSEL 位選擇。在這個(gè)模式里,下面的位必須保

持清零狀態(tài):

?USART_CR2 寄存器的 LINEN 和 CLKEN 位

?USART_CR3 寄存器的 SCEN 和 IREN 位

?USART 可以配置成遵循單線半雙工協(xié)議。在單線半雙工模式下,TX 和 RX 引腳在芯片內(nèi)部互連。使用控制位”HALF DUPLEX SEL”(USART_CR3 中的 HDSEL 位)選擇半雙工和全雙工通信。當(dāng) HDSEL為'1'時(shí)

?RX 不再被使用

?當(dāng)沒(méi)有數(shù)據(jù)傳輸時(shí),TX 總是被釋放。因此,它在空閑狀態(tài)的或接收狀態(tài)時(shí)表現(xiàn)為一個(gè)標(biāo)準(zhǔn)I/O 口。這就意味該 I/O 在不被 USART 驅(qū)動(dòng)時(shí),必須配置成懸空輸入(或開(kāi)漏的輸出高)。

除此以外,通信與正常 USART 模式類似。由軟件來(lái)管理線上的沖突(例如通過(guò)使用一個(gè)中央仲裁器)。特別的是,發(fā)送從不會(huì)被硬件所阻礙。當(dāng) TE 位被設(shè)置時(shí),只要數(shù)據(jù)一寫(xiě)到數(shù)據(jù)寄存器上,發(fā)送就繼續(xù)。

3.11 智能卡

設(shè)置 USART_CR3 寄存器的 SCEN 位選擇智能卡模式。在智能卡模式下,下列位必須保持清零:

?USART_CR2 寄存器的 LINEN 位

?USART_CR3 寄存器的 HDSEL 位和 IREN 位

此外,CLKEN 位可以被設(shè)置,以提供時(shí)鐘給智能卡。

該接口符合 ISO7816-3 標(biāo)準(zhǔn),支持智能卡異步協(xié)議。USART 應(yīng)該被設(shè)置為:

?8 位數(shù)據(jù)位加校驗(yàn)位:此時(shí) USART_CR1 寄存器中 M=1、PCE=1

?發(fā)送和接收時(shí)為 1.5 個(gè)停止位:即 USART_CR2 寄存器的 STOP=11

注: 也可以在接收時(shí)選擇 0.5 個(gè)停止位,但為了避免在 2 種配置間轉(zhuǎn)換,建議在發(fā)送和接收時(shí)使用1.5 個(gè)停止位。下圖給出的例子說(shuō)明了數(shù)據(jù)線上,在有校驗(yàn)錯(cuò)誤和沒(méi)校驗(yàn)錯(cuò)誤兩種情況下的信號(hào)。

wKgZPGg4DiGAPqP5AAC7xCTQRAE260.png

ISO7816-3 異步協(xié)議

當(dāng)與智能卡相連接時(shí),USART 的 TX 驅(qū)動(dòng)一根智能卡也驅(qū)動(dòng)的雙向線。為了做到這點(diǎn),SW_RX 必須和 TX 連接到相同的 I/O 口。在發(fā)送開(kāi)始位和數(shù)據(jù)字節(jié)期間,發(fā)送器的輸出使能位 TX_EN 被置起,在發(fā)送停止位期間被釋放(弱上拉),因此在發(fā)現(xiàn)校驗(yàn)錯(cuò)誤的情況下接收器可以將數(shù)據(jù)線拉低。

如果 TX_EN 不被使用,在停止位期間 TX 被拉到高電平:這樣的話,只要 TX 配置成開(kāi)漏,接收器也可以驅(qū)動(dòng)這根線。智能卡是一個(gè)單線半雙工通信協(xié)議

?從發(fā)送移位寄存器把數(shù)據(jù)發(fā)送出去,要被延時(shí)最小 1/2 波特時(shí)鐘。在正常操作時(shí),一個(gè)滿的發(fā)送移位寄存器將在下一個(gè)波特時(shí)鐘沿開(kāi)始向外移出數(shù)據(jù)。在智能卡模式里,此發(fā)送被延遲1/2 波特時(shí)鐘。

? 如果在接收一個(gè)設(shè)置為 0.5 或 1.5 個(gè)停止位的數(shù)據(jù)幀期間,檢測(cè)到一奇偶校驗(yàn)錯(cuò)誤,在完成接收該幀后(即停止位結(jié)束時(shí)),發(fā)送線被拉低一個(gè)波特時(shí)鐘周期。這是告訴智能卡發(fā)送到USART 的數(shù)據(jù)沒(méi)有被正確地接收到。此 NACK 信號(hào)(拉低發(fā)送線一個(gè)波特時(shí)鐘周期)在發(fā)送端將產(chǎn)生一個(gè)幀錯(cuò)誤(發(fā)送端被配置成 1.5 個(gè)停止位)。應(yīng)用程序可以根據(jù)協(xié)議處理重新發(fā)送數(shù)據(jù)。如果設(shè)置了 NACK 控制位,發(fā)生校驗(yàn)錯(cuò)誤時(shí)接收器會(huì)給出一個(gè) NACK 信號(hào);否則就不會(huì)發(fā)送 NACK。

?TC 標(biāo)志的置起可以通過(guò)編程保護(hù)時(shí)間寄存器得以延時(shí)。在正常操作時(shí),當(dāng)發(fā)送移位寄存器變空并且沒(méi)有新的發(fā)送請(qǐng)求出現(xiàn)時(shí),TC 被置起。在智能卡模式里,空的發(fā)送移位寄存器將觸發(fā)保護(hù)時(shí)間計(jì)數(shù)器開(kāi)始向上計(jì)數(shù),直到保護(hù)時(shí)間寄存器中的值。TC 在這段時(shí)間被強(qiáng)制拉低。當(dāng)保護(hù)時(shí)間計(jì)數(shù)器達(dá)到保護(hù)時(shí)間寄存器中的值時(shí),TC 被置高。

?TC 標(biāo)志的撤銷不受智能卡模式的影響。

?如果發(fā)送器檢測(cè)到一個(gè)幀錯(cuò)誤(收到接收器的 NACK 信號(hào)),發(fā)送器的接收功能模塊不會(huì)把NACK 當(dāng)作起始位檢測(cè)。根據(jù) ISO 協(xié)議,接收到的 NACK 的持續(xù)時(shí)間可以是 1 或 2 波特時(shí)鐘周期。

?在接收器這邊,如果一個(gè)校驗(yàn)錯(cuò)誤被檢測(cè)到,并且 NACK 被發(fā)送,接收器不會(huì)把 NACK 檢測(cè)成起始位。

注意: 1.斷開(kāi)符號(hào)在智能卡模式里沒(méi)有意義。一個(gè)帶幀錯(cuò)誤的 00h 數(shù)據(jù)將被當(dāng)成數(shù)據(jù)而不是斷開(kāi)符號(hào)。

2.當(dāng)來(lái)回切換 TE 位時(shí),沒(méi)有 IDLE 幀被發(fā)送。ISO 協(xié)議沒(méi)有定義 IDLE 幀。

下圖詳述了 USART 是如何采樣 NACK 信號(hào)的。在這個(gè)例子里,USART 正在發(fā)送數(shù)據(jù),并且被配置成 1.5 個(gè)停止位。為了檢查數(shù)據(jù)的完整性和 NACK 信號(hào),USART 的接收功能塊被激活。

wKgZO2g4DiGAAomQAADby-Y9YYw542.png

使用 1.5 停止位檢測(cè)奇偶檢驗(yàn)錯(cuò)

USART 可以通過(guò) CK 輸出為智能卡提供時(shí)鐘。在智能卡模式里,CK 不和通信直接關(guān)聯(lián),而是先通過(guò)一個(gè) 5 位預(yù)分頻器簡(jiǎn)單地用內(nèi)部的外設(shè)輸入時(shí)鐘來(lái)驅(qū)動(dòng)智能卡的時(shí)鐘。分頻率在預(yù)分頻寄存器USART_GTPR 中配置。CK 頻率可以從 fCK/2 到 fCK/62,這里的 fCK 是外設(shè)輸入時(shí)鐘。

3.12 IrDA SIR ENDEC 功能模塊

通過(guò)設(shè)置 USART_CR3 寄存器的 IREN 位選擇 IrDA 模式。在 IRDA 模式里,下列位必須保持清零:

?USART_CR2 寄存器的 LINEN,STOP 和 CLKEN 位

?USART_CR3 寄存器的 SCEN 和 HDSEL 位。

IrDA SIR 物理層規(guī)定使用反相歸零調(diào)制方案(RZI),該方案用一個(gè)紅外光脈沖代表邏輯'0'(見(jiàn)圖 265)。

SIR 發(fā)送編碼器對(duì)從 USART 輸出的 NRZ(非歸零)比特流進(jìn)行調(diào)制。輸出脈沖流被傳送到一個(gè)外部輸出驅(qū)動(dòng)器和紅外 LED。USART 為 SIR ENDEC 最高只支持到 115.2Kbps 速率。在正常模式里,脈沖寬度規(guī)定為一個(gè)位周期的 3/16。SIR 接收解碼器對(duì)來(lái)自紅外接收器的歸零位比特流進(jìn)行解調(diào),并將接收到的 NRZ 串行比特流輸出到 USART。在空閑狀態(tài)里,解碼器輸入通常是高(標(biāo)記狀態(tài) markingstate)。發(fā)送編碼器輸出的極性和解碼器的輸入相反。當(dāng)解碼器輸入低時(shí),檢測(cè)到一個(gè)起始位。

?IrDA 是一個(gè)半雙工通信協(xié)議。如果發(fā)送器忙(也就是 USART 正在送數(shù)據(jù)給 IrDA 編碼器)IrDA 接收線上的任何數(shù)據(jù)將被 IrDA 解碼器忽視。如果接收器忙(也就是 USART 正在接收從 IrDA解碼器來(lái)的解碼數(shù)據(jù)),從 USART 到 IrDA 的 TX 上的數(shù)據(jù)將不會(huì)被 IrDA 編碼。當(dāng)接收數(shù)據(jù)時(shí),應(yīng)該避免發(fā)送,因?yàn)閷⒈话l(fā)送的數(shù)據(jù)可能被破壞。

?SIR 發(fā)送邏輯把'0'作為高脈沖發(fā)送,把'1'作為低電平發(fā)送。脈沖的寬度規(guī)定為正常模式時(shí)位周期的 3/16(見(jiàn)圖 266)。

?SIR 接收邏輯把高電平狀態(tài)解釋為'1',把低脈沖解釋為'0'。

?發(fā)送編碼器輸出與解碼器輸入有著相反的極性。當(dāng)空閑時(shí),SIR 輸出處于低狀態(tài)。

?SIR 解碼器把 IrDA 兼容的接收信號(hào)轉(zhuǎn)變成給 USART 的比特流。

?IrDA 規(guī)范要求脈沖要寬于 1.41us。脈沖寬度是可編程的。接收器端的尖峰脈沖檢測(cè)邏輯濾除寬度小于 2 個(gè) PSC 周期的脈沖(PSC 是在 IrDA 低功耗波特率寄存器 USART_GTPR 中編程的預(yù)分頻值)。寬度小于 1 個(gè) PSC 周期的脈沖一定被濾除掉,但是那些寬度大于 1 個(gè)而小于 2 個(gè)PSC 周期的脈沖可能被接收或?yàn)V除,那些寬度大于 2 個(gè)周期的將被視為一個(gè)有效的脈沖。當(dāng)PSC=0 時(shí),IrDA 編碼器/解碼器不工作。

?接收器可以與一低功耗發(fā)送器通信。

?在 IrDA 模式里,USART_CR2 寄存器上的 STOP 位必須配置成 1 個(gè)停止位。

IrDA 低功耗模式

發(fā)送器

在低功耗模式,脈沖寬度不再持續(xù) 3/16 個(gè)位周期。取而代之,脈沖的寬度是低功耗波特率的 3 倍,它最小可以是 1.42MHz。通常這個(gè)值是 1.8432MHz(1.42MHz

接收器

低功耗模式的接收類似于正常模式的接收。為了濾除尖峰干擾脈沖,USART 應(yīng)該濾除寬度短于 1個(gè) PSC 的脈沖。只有持續(xù)時(shí)間大于 2 個(gè)周期的 IrDA 低功耗波特率時(shí)鐘(USART_GTPR 中的 PSC)的低電平信號(hào)才被接受為有效的信號(hào)。

注意: 1.寬度小于 2 個(gè)大于 1 個(gè) PSC 周期的脈沖可能會(huì)也可能不會(huì)被濾除。

2.接收器的建立時(shí)間應(yīng)該由軟件管理。IrDA 物理層技術(shù)規(guī)范規(guī)定了在發(fā)送和接收之間最小要有10ms 的延時(shí)(IrDA 是一個(gè)半雙工協(xié)議)。

wKgZPGg4DiGAFeKAAACmLh9NLuk917.png

IrDA SIR ENDEC 框圖

wKgZO2g4DiGAbQ9PAAB3jSpJRLs834.png

IrDA 數(shù)據(jù)調(diào)制(3/16)普通模式

3.13 利用 DMA 連續(xù)通信

USART 可以利用 DMA 連續(xù)通信。Rx 緩沖器和 Tx 緩沖器的 DMA 請(qǐng)求是分別產(chǎn)生的。

利用 DMA 發(fā)送

使用 DMA 進(jìn)行發(fā)送,可以通過(guò)設(shè)置 USART_CR3 寄存器上的 DMAT 位激活。當(dāng) TXE 位被置為'1'時(shí),DMA 就從指定的 SRAM 區(qū)傳送數(shù)據(jù)到 USART_DR 寄存器。為 USART 的發(fā)送分配一個(gè) DMA 通道的步驟如下(x 表示通道號(hào)):

1. 在 DMA 控制寄存器上將 USART_DR 寄存器地址配置成 DMA 傳輸?shù)哪康牡刂?。在每個(gè) TXE 事件后,數(shù)據(jù)將被傳送到這個(gè)地址。

2. 在 DMA 控制寄存器上將存儲(chǔ)器地址配置成 DMA 傳輸?shù)脑吹刂?。在每個(gè) TXE 事件后,將從此存儲(chǔ)器區(qū)讀出數(shù)據(jù)并傳送到 USART_DR 寄存器。

3. 在 DMA 控制寄存器中配置要傳輸?shù)目偟淖止?jié)數(shù)。

4. 在 DMA 寄存器上配置通道優(yōu)先級(jí)。

5. 根據(jù)應(yīng)用程序的要求,配置在傳輸完成一半還是全部完成時(shí)產(chǎn)生 DMA 中斷。

6. 在 DMA 寄存器上激活該通道。

當(dāng)傳輸完成 DMA 控制器指定的數(shù)據(jù)量時(shí),DMA 控制器在該 DMA 通道的中斷向量上產(chǎn)生一中斷。在發(fā)送模式下,當(dāng) DMA 傳輸完所有要發(fā)送的數(shù)據(jù)時(shí),DMA 控制器設(shè)置 DMA_ISR 寄存器的 TCIF 標(biāo)志;監(jiān)視 USART_SR 寄存器的 TC 標(biāo)志可以確認(rèn) USART 通信是否結(jié)束,這樣可以在關(guān)閉 USART 或進(jìn)入停機(jī)模式之前避免破壞最后一次傳輸?shù)臄?shù)據(jù);軟件需要先等待 TXE=1,再等待 TC=1。

wKgZO2g4DiSAO8P9AAMyCEKEWd8050.png

利用 DMA 發(fā)送

利用 DMA 接收

可以通過(guò)設(shè)置 USART_CR3 寄存器的 DMAR 位激活使用 DMA 進(jìn)行接收,每次接收到一個(gè)字節(jié),DMA控制器就就把數(shù)據(jù)從 USART_DR 寄存器傳送到指定的 SRAM 區(qū)(參考 DMA 相關(guān)說(shuō)明)。為 USART 的接收分配一個(gè) DMA 通道的步驟如下(x 表示通道號(hào)):

1. 通過(guò) DMA 控制寄存器把 USART_DR 寄存器地址配置成傳輸?shù)脑吹刂贰T诿總€(gè) RXNE 事件后,將從此地址讀出數(shù)據(jù)并傳輸?shù)酱鎯?chǔ)器。

2. 通過(guò) DMA 控制寄存器把存儲(chǔ)器地址配置成傳輸?shù)哪康牡刂?。在每個(gè) RXNE 事件后,數(shù)據(jù)將從USART_DR 傳輸?shù)酱舜鎯?chǔ)器區(qū)。

3. 在 DMA 控制寄存器中配置要傳輸?shù)目偟淖止?jié)數(shù)。

4. 在 DMA 寄存器上配置通道優(yōu)先級(jí)。

5. 根據(jù)應(yīng)用程序的要求配置在傳輸完成一半還是全部完成時(shí)產(chǎn)生 DMA 中斷。

6. 在 DMA 控制寄存器上激活該通道。

當(dāng)接收完成 DMA 控制器指定的傳輸量時(shí),DMA 控制器在該 DMA 通道的中斷矢量上產(chǎn)生一中斷。

wKgZPGg4DiKAPuOfAAKWN85jNwc282.png

利用 DMA 接收

多緩沖器通信中的錯(cuò)誤標(biāo)志和中斷產(chǎn)生在多緩沖器通信的情況下,通信期間如果發(fā)生任何錯(cuò)誤,在當(dāng)前字節(jié)傳輸后將置起錯(cuò)誤標(biāo)志。如果中斷使能位被設(shè)置,將產(chǎn)生中斷。在單個(gè)字節(jié)接收的情況下,和 RXNE 一起被置起的幀錯(cuò)誤、溢出錯(cuò)誤和噪音標(biāo)志,有單獨(dú)的錯(cuò)誤標(biāo)志中斷使能位;如果設(shè)置了,會(huì)在當(dāng)前字節(jié)傳輸結(jié)束后,產(chǎn)生中斷。

3.14 硬件流控制

利用 nCTS 輸入和 nRTS 輸出可以控制 2 個(gè)設(shè)備間的串行數(shù)據(jù)流。下圖表明在這個(gè)模式里如何連接2 個(gè)設(shè)備。

wKgZPGg4DiGAKiDiAACIxUdJrLw944.png

兩個(gè) USART 間的硬件流控制

通過(guò)將 UASRT_CR3 中的 RTSE 和 CTSE 置位,可以分別獨(dú)立地使能 RTS 和 CTS 流控制。

RTS 流控制

如果 RTS 流控制被使能(RTSE=1),只要 USART 接收器準(zhǔn)備好接收新的數(shù)據(jù),nRTS 就變成有效(接低電平)。當(dāng)接收寄存器內(nèi)有數(shù)據(jù)到達(dá)時(shí),nRTS 被釋放,由此表明希望在當(dāng)前幀結(jié)束時(shí)停止數(shù)據(jù)傳輸。下圖是一個(gè)啟用 RTS 流控制的通信的例子。

wKgZPGg4DiGANRmZAACP5dXZG2g833.png

RTS 流控制

CTS 流控制

如果 CTS 流控制被使能(CTSE=1),發(fā)送器在發(fā)送下一幀前檢查 nCTS 輸入。如果 nCTS 有效(被拉成低電平),則下一個(gè)數(shù)據(jù)被發(fā)送(假設(shè)那個(gè)數(shù)據(jù)是準(zhǔn)備發(fā)送的,也就是 TXE=0),否則下一幀數(shù)據(jù)不被發(fā)出去。若 nCTS 在傳輸期間被變成無(wú)效,當(dāng)前的傳輸完成后停止發(fā)送。

當(dāng) CTSE=1 時(shí),只要 nCTS 輸入一變換狀態(tài),硬件就自動(dòng)設(shè)置 CTSIF 狀態(tài)位。它表明接收器是否準(zhǔn)備好進(jìn)行通信。如果設(shè)置了 USART_CT3 寄存器的 CTSIE 位,則產(chǎn)生中斷。下圖是一個(gè)啟用 CTS 流控制通信的例子。

wKgZPGg4DiKAKWvdAADI-SiPnTA276.png

CTS 流控制

4 USART 中斷請(qǐng)求

中斷事件 事件標(biāo)志 使能位
發(fā)送數(shù)據(jù)寄存器空 TXE TXEIE
CTS 標(biāo)志 CTS CTSIE
發(fā)送完成 TC TCIE
接收數(shù)據(jù)就緒可讀 RXNE RXNEIE
檢測(cè)到數(shù)據(jù)溢出 ORE RXNEIE
檢測(cè)到空閑線路 IDLE IDLEIE
奇偶檢驗(yàn)錯(cuò) PE PEIE
斷開(kāi)標(biāo)志 LBD LBDIE
噪聲標(biāo)志,多緩沖通信中的溢出錯(cuò)誤和幀錯(cuò)誤 NE 或 ORT 或 FE EIE(1)

(1)僅當(dāng)使用 DMA 接收數(shù)據(jù)時(shí),才使用這個(gè)標(biāo)志位。USART 的各種中斷事件被連接到同一個(gè)中斷向量(見(jiàn)下圖),有以下各種中斷事件:

發(fā)送期間:發(fā)送完成、清除發(fā)送、發(fā)送數(shù)據(jù)寄存器空。

接收期間:空閑總線檢測(cè)、溢出錯(cuò)誤、接收數(shù)據(jù)寄存器非空、校驗(yàn)錯(cuò)誤、LIN 斷開(kāi)符號(hào)檢測(cè)、噪音標(biāo)志(僅在多緩沖器通信)和幀錯(cuò)誤(僅在多緩沖器通信)。

如果設(shè)置了對(duì)應(yīng)的使能控制位,這些事件就可以產(chǎn)生各自的中斷。

wKgZPGg4DiKAKWvdAADI-SiPnTA276.png

USART 中斷映像圖

5 例程設(shè)計(jì)

5.1 USART_Asyn

1.初始化部分調(diào)用delay_init()函數(shù)進(jìn)行延時(shí)初始化。

調(diào)用UART_Configuration(115200)函數(shù)對(duì)串口 1 進(jìn)行初始化,波特率設(shè)置為 115200。

獲取系統(tǒng)時(shí)鐘頻率并打印相關(guān)信息。

2.主循環(huán)部分接收數(shù)據(jù):禁用 DMA1 通道 5。

while (1)
{
    // 禁用DMA1通道5(確保配置前停止通道)
    DMA_Cmd(DMA1_Channel5, DISABLE);
    
    // i. 使能串口1接收DMA請(qǐng)求
    USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
    
    // ii. 配置DMA接收(通道5)
    DMA_RecvConfiguration();
    
    // iii. 等待接收完成標(biāo)志(DMA1通道5傳輸完成)
    while (DMA_GetFlagStatus(DMA1_FLAG_TC5) == RESET);
    
    // iv. 打印接收完成信息及數(shù)據(jù)
    printf("USART Asyn DMA Recv Completen");
    for (i = 0; i < BUFFSIZE; i++)
    {
        printf("%c  ,", Buff[i]);
    }
    printf("n");

    // 發(fā)送數(shù)據(jù)流程(與接收類似)...
}

使能串口 1 的接收 DMA 請(qǐng)求。

調(diào)用DMA_RecvConfiguration()函數(shù)配置 DMA 接收。

等待 DMA 接收完成標(biāo)志(DMA1_FLAG_TC5)置位。

打印接收完成信息,并輸出接收到的數(shù)據(jù)。

3.發(fā)送數(shù)據(jù):禁用 DMA1 通道 4。

while (1)
{
    // (接收流程代碼略)...

    // 禁用DMA1通道4(確保配置前停止通道)
    DMA_Cmd(DMA1_Channel4, DISABLE);
    
    // i. 使能串口1發(fā)送DMA請(qǐng)求
    USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
    
    // ii. 配置DMA發(fā)送(通道4)
    DMA_SendConfiguration();
    
    // iii. 等待發(fā)送完成標(biāo)志(DMA1通道4傳輸完成)
    while (DMA_GetFlagStatus(DMA1_FLAG_TC4) == RESET);
    
    // iv. 打印發(fā)送完成信息
    printf("USART Asyn DMA Send Completen");
    delay_ms(100); // 可選延時(shí)避免高頻循環(huán)
}

使能串口 1 的發(fā)送 DMA 請(qǐng)求。

調(diào)用DMA_SendConfiguration()函數(shù)配置 DMA 發(fā)送。

等待 DMA 發(fā)送完成標(biāo)志(DMA1_FLAG_TC4)置位。

打印發(fā)送完成信息。

4.函數(shù)實(shí)現(xiàn)部分UART_Configuration:對(duì)串口 1 的 GPIO 和串口參數(shù)進(jìn)行初始化。

void DMA_RecvConfiguration(void)
{
    DMA_InitTypeDef DMA_InitStructure;

    // 使能DMA1時(shí)鐘
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

    // 復(fù)位并配置DMA1通道5(USART1接收)
    DMA_DeInit(DMA1_Channel5);
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR; // 外設(shè)地址:USART數(shù)據(jù)寄存器
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Buff;           // 內(nèi)存地址:接收緩沖區(qū)
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;               // 方向:外設(shè)→內(nèi)存
    DMA_InitStructure.DMA_BufferSize = BUFFSIZE;                     // 緩沖區(qū)大小:8字節(jié)
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外設(shè)地址不變
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;         // 內(nèi)存地址遞增
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 8位數(shù)據(jù)
    DMA_Init(DMA1_Channel5, &DMA_InitStructure);
    DMA_Cmd(DMA1_Channel5, ENABLE); // 啟動(dòng)DMA接收
}
void DMA_SendConfiguration(void)
{
    DMA_InitTypeDef DMA_InitStructure;

    // 使能DMA1時(shí)鐘(已使能可省略,但代碼中保留健壯性)
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

    // 復(fù)位并配置DMA1通道4(USART1發(fā)送)
    DMA_DeInit(DMA1_Channel4);
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR; // 外設(shè)地址:USART數(shù)據(jù)寄存器
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Buff;           // 內(nèi)存地址:發(fā)送緩沖區(qū)
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;               // 方向:內(nèi)存→外設(shè)
    DMA_InitStructure.DMA_BufferSize = BUFFSIZE;                     // 緩沖區(qū)大?。?字節(jié)
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外設(shè)地址不變
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;         // 內(nèi)存地址遞增
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 8位數(shù)據(jù)
    DMA_Init(DMA1_Channel4, &DMA_InitStructure);
    DMA_Cmd(DMA1_Channel4, ENABLE); // 啟動(dòng)DMA發(fā)送
}

DMA_RecvConfiguration:對(duì) DMA1 通道 5 進(jìn)行初始化,用于串口 1 的接收。

DMA_SendConfiguration:對(duì) DMA1 通道 4 進(jìn)行初始化,用于串口 1 的發(fā)送。

SER_PutChar:實(shí)現(xiàn)字符發(fā)送功能。

fputc:重定向標(biāo)準(zhǔn)輸出函數(shù),使printf函數(shù)可以通過(guò)串口輸出。

6 下載驗(yàn)證

6.1 USART_Asyn

初始化階段

程序啟動(dòng)后,會(huì)進(jìn)行一系列初始化操作,包括延時(shí)初始化、串口 1 初始化,并且獲取系統(tǒng)時(shí)鐘頻率。

初始化完成后,會(huì)通過(guò)串口打印系統(tǒng)時(shí)鐘頻率信息,內(nèi)容涵蓋 SYSCLK、HCLK、PCLK1、PCLK2 和 ADCCLK 的頻率,單位為 MHz。

隨后會(huì)打印出USART Asyn DMA Test.,表明開(kāi)始進(jìn)行串口異步 DMA 測(cè)試。

主循環(huán)階段

接收數(shù)據(jù)

程序會(huì)先禁用 DMA1 通道 5,然后使能串口 1 的接收 DMA 請(qǐng)求,并對(duì) DMA 接收進(jìn)行配置。

程序會(huì)等待 DMA 接收完成標(biāo)志(DMA1_FLAG_TC5)置位,當(dāng)接收完成后,會(huì)打印USART Asyn DMA Recv Complete信息。

接著將接收到的BUFFSIZE(即 8 個(gè))字節(jié)數(shù)據(jù)逐字符打印出來(lái),每個(gè)字符后會(huì)有一個(gè)逗號(hào)分隔。

發(fā)送數(shù)據(jù)

之后程序會(huì)禁用 DMA1 通道 4,使能串口 1 的發(fā)送 DMA 請(qǐng)求,并對(duì) DMA 發(fā)送進(jìn)行配置。

等待 DMA 發(fā)送完成標(biāo)志(DMA1_FLAG_TC4)置位,發(fā)送完成后,會(huì)打印USART Asyn DMA Send Complete信息。

持續(xù)運(yùn)行

上述接收和發(fā)送的過(guò)程會(huì)在主循環(huán)中不斷重復(fù),只要程序不停止運(yùn)行,就會(huì)持續(xù)進(jìn)行串口數(shù)據(jù)的接收和發(fā)送操作,并在每次操作完成后輸出相應(yīng)的提示信息。

wKgZPGg4DiKAXMAgAAGoG2_TCRY997.png

WIZnet 是一家無(wú)晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。

香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44960

    瀏覽量

    648772
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5610

    瀏覽量

    175319
  • 異步收發(fā)器
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    10994
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    201

    瀏覽量

    31767
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    通用同步異步收發(fā)器(USART)

    標(biāo)準(zhǔn)庫(kù)3.5實(shí)現(xiàn):《嵌入式-STM32開(kāi)發(fā)指南》第二部分 基礎(chǔ)篇 - 第6章串口通信6.1串口簡(jiǎn)介通用同步異步收發(fā)器(
    發(fā)表于 08-20 07:37

    UART通用同步異步收發(fā)器的相關(guān)資料分享

    文章目錄一、UART介紹二、項(xiàng)目建立及編譯1.新建項(xiàng)目2.代碼3.編譯三、電路連接及燒錄1.串口連接2.燒錄四、串口輸出五、總結(jié)參考鏈接一、UART介紹通用同步異步收發(fā)器(Univer
    發(fā)表于 11-29 08:30

    通用異步收發(fā)器通用同步異步串行接收/發(fā)送有哪些差異呢

    UART是什么?USART又是什么?通用異步收發(fā)器通用同步
    發(fā)表于 12-10 06:45

    通用同步異步收發(fā)器常用的串口相關(guān)寄存有哪些

    通用同步異步收發(fā)器的原理是什么?通用同步異步
    發(fā)表于 12-10 08:01

    通用同步異步收發(fā)器USART怎樣使用DMA進(jìn)行連續(xù)通信呢

    通用同步異步收發(fā)器USART的主要特性有哪些?通用同步
    發(fā)表于 12-10 07:50

    USART通用同步異步收發(fā)器介紹

    1、USART介紹通用同步異步收發(fā)器(Universal Synchronous Asynchronous Receiver and Tra
    發(fā)表于 02-10 07:56

    USART通用同步異步收發(fā)器介紹

    一、USARTUSART介紹通用同步異步收發(fā)器(Universal Synchronous Asynchronous Receiver and Transmitter)是一個(gè)串行通信設(shè)
    發(fā)表于 02-15 07:08

    模擬電路網(wǎng)絡(luò)課件 第二十四節(jié):甲乙類互補(bǔ)對(duì)稱功率放大電路

    模擬電路網(wǎng)絡(luò)課件 第二十四節(jié):甲乙類互補(bǔ)對(duì)稱功率放大電路 5.2 甲乙類互補(bǔ)對(duì)稱功率放大電路 乙類放大電路的失真:
    發(fā)表于 09-17 11:14 ?3178次閱讀
    模擬電路網(wǎng)絡(luò)課件 <b class='flag-5'>第二十四</b>節(jié):甲乙類互補(bǔ)對(duì)稱功率放大電路

    STM32F2技術(shù)培訓(xùn)_通用同步異步收發(fā)器_USART

    STM32F2技術(shù)培訓(xùn)_通用同步異步收發(fā)器_USART
    發(fā)表于 12-03 17:51 ?0次下載

    通用異步收發(fā)器(UART)

    串行通信又分為異步同步兩類。UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器
    發(fā)表于 01-13 16:36 ?15次下載

    實(shí)驗(yàn)四 異步收發(fā)器USART

    嵌入式異步收發(fā)器USART
    發(fā)表于 12-17 20:48 ?12次下載

    F2產(chǎn)品技術(shù)培訓(xùn)_18.通用同步異步收發(fā)器USART

    F2產(chǎn)品技術(shù)培訓(xùn)_18.通用同步異步收發(fā)器USART
    發(fā)表于 03-15 14:27 ?5次下載

    2022年第二十四屆高交會(huì)綠色低碳路線

    2022年第二十四屆高交會(huì)綠色低碳路線 第二十四屆中國(guó)國(guó)際高新技術(shù)成果交易會(huì)(簡(jiǎn)稱:高交會(huì))于2022年11月15-19日在深圳火熱舉辦中! 本次展會(huì)以”科技改革驅(qū)動(dòng)創(chuàng)新,科技創(chuàng)新驅(qū)動(dòng)發(fā)展”為主
    發(fā)表于 11-17 15:07 ?629次閱讀
    2022年<b class='flag-5'>第二十四</b>屆高交會(huì)綠色低碳路線

    第二十四屆高交會(huì)閉幕,普渡科技獲評(píng)“最佳品牌獎(jiǎng)”

    第二十四屆高交會(huì)閉幕,普渡科技機(jī)器人獲評(píng)“最佳品牌獎(jiǎng)” 備受矚目的第二十四屆中國(guó)國(guó)際高新技術(shù)成果交易會(huì)(以下簡(jiǎn)稱高交會(huì))在深圳順利閉幕。展會(huì)期間,普渡科技的精彩亮相吸引了眾多展商、觀眾、媒體記者等
    的頭像 發(fā)表于 12-13 11:06 ?966次閱讀
    <b class='flag-5'>第二十四</b>屆高交會(huì)閉幕,普渡科技獲評(píng)“最佳品牌獎(jiǎng)”

    普源精電(RIGOL)獲頒第二十四屆“中國(guó)專利金獎(jiǎng)”

    2023年10月14日至16日,由國(guó)家知識(shí)產(chǎn)權(quán)局和遼寧省人民政府主辦,大連市人民政府承辦的第十三屆中國(guó)國(guó)際專利技術(shù)與產(chǎn)品交易會(huì)暨第二十四屆中國(guó)專利獎(jiǎng)?lì)C獎(jiǎng)大會(huì)在大連市世界博覽廣場(chǎng)隆重舉辦,普源精電(RIGOL)作為第二十四屆“中國(guó)專利金獎(jiǎng)”獲獎(jiǎng)?wù)?,攜眾多亮眼產(chǎn)品亮相本次會(huì)議
    的頭像 發(fā)表于 10-19 10:20 ?807次閱讀