單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機
W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。
在封裝規格上,W55MH32 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、3個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN以及1個USB2.0。在保持與同系列其他版本一致的核心性能基礎上,僅減少了部分GPIO以及SDIO接口,其他參數保持一致,性價比優勢顯著,尤其適合網關模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設配置,使其能夠在有限空間內實現高效的網絡連接與數據交互,成為物聯網網關、邊緣計算節點等緊湊型設備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設資源,適用于需要多接口擴展的復雜工控場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。
此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網絡通信安全再添保障。
為助力開發者快速上手與深入開發,基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。
若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

第七章 串口通信
本章我們將學習 W55MH32 的串口,教大家如何使用W55MH32的串口來發送和接收數據。
本章分為如下幾個小節:
1 串口簡介
2 串口通信協議
3 W55MH32 的串口簡介
4 DMA簡介
5 程序設計
1 串口簡介
學習串口前,我們先來了解一下數據通信的一些基礎概念。
1.1 數據通信的基礎概念
在單片機的應用中,數據通信是必不可少的一部分,比如:單片機和上位機、單片機和外圍器件之間,它們都有數據通信的需求。由于設備之間的電氣特性、傳輸速率、可靠性要求各不相同,于是就有了各種通信類型、通信協議,我們最常用的有:USART、IIC、SPI、CAN、USB 等。下面,我們先來學習數據通信的一些基礎概念。
1. 數據通信方式
按數據通信方式分類,可分為串行通信和并行通信兩種。串行和并行的對比如下圖所示:

串行通信的基本特征是數據逐位順序依次傳輸,優點是傳輸線少、布線成本低、靈活度高等優點,一般用于近距離人機交互,特殊處理后也可以用于遠距離,缺點就是傳輸速率低。
而并行通信是數據各位可以通過多條線同時傳輸,優點是傳輸速率高,缺點就是線多成本就高了,抗干擾能力差因而適用于短距離、高速率的通信。
2. 數據傳輸方向
根據數據傳輸方向,通信又可分為全雙工、半雙工和單工通信。全雙工、半雙工和單工通信的比較如下圖所示:

數據傳輸方式:
單工是指數據傳輸僅能沿一個方向,不能實現反方向傳輸。
半雙工是指數據傳輸可以沿著兩個方向,但是需要分時進行。
全雙工是指數據可以同時進行雙向傳輸。
這里注意全雙工和半雙工通信的區別:半雙工通信是共用一條線路實現雙向通信,而全雙工是利用兩條線路,一條用于發送數據,另一條用于接收數據。
3. 數據同步方式
根據數據同步方式,通信又可分為同步通信和異步通信。同步通信和異步通信比較如下圖所示:

同步通信要求通信雙方共用同一時鐘信號,在總線上保持統一的時序和周期完成信息傳輸。
優點:可以實現高速率、大容量的數據傳輸,以及點對多點傳輸。缺點:要求發送時鐘和接收時鐘保持嚴格同步,收發雙方時鐘允許的誤差較小,同時硬件復雜。
異步通信不需要時鐘信號,而是在數據信號中加入開始位和停止位等一些同步信號,以便使接收端能夠正確地將每一個字符接收下來,某些通信中還需要雙方約定傳輸速率。優點:沒有時鐘信號硬件簡單,雙方時鐘可允許一定誤差。缺點:通信速率較低,只適用點對點傳輸。
4. 通信速率
在數字通信系統中,通信速率(傳輸速率)指數據在信道中傳輸的速度,它分為兩種:傳信率和傳碼率。
傳信率:每秒鐘傳輸的信息量,即每秒鐘傳輸的二進制位數,單位為 bit/s(即比特每秒),因而又稱為比特率。
傳碼率:每秒鐘傳輸的碼元個數,單位為 Baud(即波特每秒),因而又稱為波特率。
比特率和波特率這兩個概念又常常被人們混淆。比特率很好理解,我們來看看波特率,波特率被傳輸的是碼元,碼元是信號被調制后的概念,每個碼元都可以表示一定bit 的數據信息量。舉個例子,在 TTL 電平標準的通信中,用 0V 表示邏輯 0,5V 表示邏輯 1,這時候這個碼元就可以表示兩種狀態。如果電平信號 0V、2V、4V 和 6V 分別表示二進制數 00、01、10、11,這時候每一個碼元就可以表示四種狀態。由上述可以看出,碼元攜帶一定的比特信息,所以比特率和波特率也是有一定的關系的。
比特率和波特率的關系可以用以下式子表示:比特率 = 波特率 * log2M其中 M 表示碼元承載的信息量。我們也可以理解 M 為碼元的進制數。
舉個例子:波特率為 100 Baud,即每秒傳輸 100 個碼元,如果碼元采用十六進制編碼(即 M=2,代入上述式子),那么這時候的比特率就是 400 bit/s。如果碼元采用二進制編碼(即 M=2,代入上述式子),那么這時候的比特率就是 100 bit/s
可以看出采用二進制的時候,波特率和比特率數值上相等。但是這里要注意,它們的相等只是數值相等,其意義上不同,看波特率和波特率單位就知道。由于我們的所用的數字系統都是二進制的,所以有部分人久而久之就直接把波特率和比特率混淆了。
2 串口通信協議
2 .1 串口通信協議簡介
串口通信是一種設備間常用的串行通信方式,串口按位(bit)發送和接收字節。盡管比特字節(byte)的串行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。串口通信協議是指規定了數據包的內容,內容包含了起始位、主體數據、校驗位及停止位,雙方需要約定一致的數據包格式才能正常收發數據的有關規范。在串口通信中,常用的協議包括 UART、RS-232、RS-422 和 RS-485 等。
隨著科技的發展,RS-232 在工業上還有廣泛的使用,但是在商業技術上,已經逐漸的使用 USB 轉串口取代了RS-232 串口。我們只需要在電路中添加一個 USB 轉串口芯片,就可以實現 USB 通信協議和標準 UART 串行通信協議的轉換,而我們開發板上的 USB 轉串口芯片是CH340C 這個芯片。
下面我們來學習串口通信協議,這里主要學習串口通信的協議層。
UART串口通信的數據包由發送設備的 TXD 接口傳輸到接收設備的 RXD 接口。在串口通信的協議層中,規定了數據包的內容,它由起始位、主體數據、校驗位以及停止位組成,通訊雙方的數據包格式要約定一致才能正常收發數據。串口通信協議數據幀格式如下圖所示:
串口通信協議數據包組成可以分為波特率和數據幀格式兩部分。
1. 波特率
本章主要講解的是串口異步通信,異步通信是不需要時鐘信號的,但是這里需要我們約定好兩個設備的波特率。波特率表示每秒鐘傳送的碼元符號的個數,所以它決定了數據幀里面每一個位的時間長度。兩個要通信的設備的波特率一定要設置相同,我們常見的波特率是 4800、9600、115200 等。
2. 數據幀格式
數據幀格式需要我們提前約定好,串口通信的數據幀包括起始位、停止位、有效數據位以及校驗位。
起始位和停止位
串口通信的一個數據幀是從起始位開始,直到停止位。數據幀中的起始位是由一個邏輯 0 的數據位表示,而數據幀的停止位可以是 0.5、1、1.5 或 2 個邏輯 1 的數據位表示,只要雙方約定一致即可。
有效數據位
數據幀的起始位之后,就接著是數據位,也稱有效數據位,這就是我們真正需要的數據,有效數據位通常會被約定為 5、6、7 或者 8 個位長。有效數據位是低位(LSB)在前,高位(MSB)在后。
校驗位
校驗位可以認為是一個特殊的數據位。校驗位一般用來判斷接收的數據位有無錯誤,檢驗方法有:奇檢驗、偶檢驗、0 檢驗、1 檢驗以及無檢驗。下面分別介紹一下:
奇校驗是指有效數據位和校驗位中“1”的個數為奇數,比如一個 8 位長的有效數據為:10101001,總共有 4 個“1”,為達到奇校驗效果,校驗位設置為“1”,最后傳輸的數據是 8 位的有效數據加上 1 位的校驗位總共 9 位。
偶校驗與奇校驗要求剛好相反,要求幀數據和校驗位中“1”的個數為偶數,比如數據幀:11001010,此時數據幀“1”的個數為 4 個,所以偶校驗位為“0”。
0 校驗是指不管有效數據中的內容是什么,校驗位總為“0”,1 校驗是校驗位總為“1”。
無校驗是指數據幀中不包含校驗位。我們一般是使用無檢驗的情況。
3 W55MH32 的串口簡介
3.1 USART 介紹
通用同步異步收發器(USART)提供了一種靈活的方法與使用工業標準 NRZ 異步串行數據格式的外部設備之間進行全雙工數據交換。USART 利用分數波特率發生器提供寬范圍的波特率選擇。
它支持同步單向通信和半雙工單線通信,也支持 LIN(局部互連網),智能卡協議和 IrDA(紅外數據組織)SIRENDEC 規范,以及調制解調器(CTS/RTS)操作。它還允許多處理器通信。使用多緩沖器配置的 DMA 方式,可以實現高速數據通信。
3.2 USART 主要特性
?全雙工,支持同步和異步通信
?NRZ 標準格式
?分數波特率發生器系統
······發送和接收共用的可編程波特率,最高達 4.5Mbits/s
?可編程數據字長度(8 位或 9 位)
?可配置的停止位-支持 1 或 2 個停止位
?LIN 主發送同步斷開符的能力以及 LIN 從檢測斷開符的能力
······當 USART 硬件配置成 LIN 時,生成 13 位斷開符;檢測 10/11 位斷開符
?發送方為同步傳輸提供時鐘
?IRDASIR 編碼器解碼器
······在正常模式下支持 3/16 位的持續時間
?智能卡模擬功能
······智能卡接口支持 ISO7816-3 標準里定義的異步智能卡協議
······智能卡用到的 0.5 和 1.5 個停止位
?單線半雙工通信
?可配置的使用 DMA 的多緩沖器通信
······在 SRAM 里利用集中式 DMA 緩沖接收/發送字節
?單獨的發送器和接收器使能位
?檢測標志
······接收緩沖器滿
······發送緩沖器空
······傳輸結束標志
?校驗控制
······發送校驗位
······對接收數據進行校驗
?四個錯誤檢測標志
······溢出錯誤
······噪音錯誤
······幀錯誤
?校驗錯誤
?10 個帶標志的中斷源
······CTS 改變
······LIN 斷開符檢測
······發送數據寄存器空
······發送完成
······接收數據寄存器滿
······檢測到總線為空閑
······溢出錯誤
······幀錯誤
······噪音錯誤
······校驗錯誤
?多處理器通信
······如果地址不匹配,則進入靜默模式
?從靜默模式中喚醒(通過空閑總線檢測或地址標志檢測)
?兩種喚醒接收器的方式:地址位(MSB,第 9 位),總線空閑
3.3 USART 功能概述
接口通過三個引腳與其他設備連接在一起。任何 USART 雙向通信至少需要兩個腳:接收數據輸入(RX)和發送數據輸出(TX)。
RX:接收數據串行輸。通過過采樣技術來區別數據和噪音,從而恢復數據。
TX:發送數據輸出。當發送器被禁止時,輸出引腳恢復到它的 I/O 端口配置。當發送器被激活,并且不發送數據時,TX 引腳處于高電平。在單線和智能卡模式里,此 I/O 口被同時用于數據的發送和接收。
?總線在發送或接收前應處于空閑狀態
?一個起始位
?一個數據字(8 或 9 位),最低有效位在前
?0.5,1.5,2 個的停止位,由此表明數據幀的結束
?使用分數波特率發生器——12 位整數和 4 位小數的表示方法。
?一個狀態寄存器(USART_SR)
?數據寄存器(USART_DR)
?一個波特率寄存器(USART_BRR),12 位的整數和 4 位小數
?一個智能卡模式下的保護時間寄存器(USART_GTPR)
?在同步模式中需要下列引腳:
?CK:發送器時鐘輸出。此引腳輸出用于同步傳輸的時鐘,(在 Start 位和 Stop 位上沒有時鐘脈沖,軟件可選地,可以在最后一個數據位送出一個時鐘脈沖)。數據可以在 RX 上同步被接收。這可以用來控制帶有移位寄存器的外部設備(例如 LCD 驅動器)。時鐘相位和極性都是軟件可編程的。在智能卡模式里,CK 可以為智能卡提供時鐘。在 IrDA 模式里需要下列引腳:
?IrDA_RDI:IrDA 模式下的數據輸入。
?IrDA_TDO:IrDA 模式下的數據輸出。下列引腳在硬件流控模式中需要:
······CTS:清除發送,若是高電平,在當前數據傳輸結束時阻斷下一次的數據發送。
······nRTS:發送請求,若是低電平,表明 USART 準備好接收數據。
USART 框圖如下:

4 DMA簡介
直接存儲器存取(DMA)用來提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸。無須 CPU 干預,數據可以通過 DMA 快速地移動,這就節省了 CPU 的資源來做其他操作。兩個 DMA 控制器有 12 個通道(DMA1 有 7 個通道,DMA2 有 5 個通道),每個通道專門用來管理來自于一個或多個外設對存儲器訪問的請求。還有一個仲裁器來協調各個 DMA 請求的優先權。
4.1 DMA 主要特性
DMA的主要特性如下:
?12 個獨立的可配置的通道(請求):DMA1 有 7 個通道,DMA2 有 5 個通道。
?每個通道都直接連接專用的硬件 DMA 請求,每個通道都同樣支持軟件觸發。這些功能通過軟件來配置。
?在同一個 DMA 模塊上,多個請求間的優先權可以通過軟件編程設置(共有四級:很高、高、中等和低),優先權設置相等時由硬件決定(請求 0 優先于請求 1,依此類推)。
?獨立數據源和目標數據區的傳輸寬度(字節、半字、全字),模擬打包和拆包的過程。源目標地址必須按數據傳輸寬度對齊。
?支持循環的緩沖器管理。
?每個通道都有 3 個事件標志(DMA 半傳輸、DMA 傳輸完成和 DMA 傳輸出錯),這 3 個事件標志邏輯或成為一個單獨的中斷請求。
?存儲器和存儲器間的傳輸。
?外設和存儲器、存儲器和外設之間的傳輸。
?閃存、SRAM、外設的 SRAM、APB1、APB2 和 AHB 外設均可作為訪問的源和目標。
?可編程的數據傳輸數目:最大為 65535。
4.2 DMA功能框圖解析
DMA的功能框圖如下:

① DMA 請求
如果外設想要通過 DMA 來傳輸數據,必須先給 DMA 控制器發送 DMA 請求,DMA 收到請求信號之后,控制器會給外設一個應答信號,當外設應答后且 DMA 控制器收到應答信號之后,就會啟動 DMA 的傳輸,直到傳輸完畢。
② 通道
DMA 具有 12 個獨立可編程的通道,其中 DMA1 有 7 個通道,DMA2 有 5 個通道,每個通道對應不同的外設的 DMA 請求。雖然每個通道可以接收多個外設的請求,但是同一時間只能接收一個,不能同時接收多個。
③ 仲裁器
當發生多個 DMA 通道請求時,就意味著有先后響應處理的順序問題,這個就由仲裁器管理。仲裁器管理 DMA 通道請求分為兩個階段。第一階段屬于軟件階段,可以在 DMA_CCRx寄存器中設置,有 4 個等級:非常高,高,中和低四個優先級。第二階段屬于硬件階段,如果兩個或以上的 DMA 通道請求設置的優先級一樣,則他們優先級取決于通道編號,編號越低優先權越高,比如通道 0 高于通道 1。在大容量產品和互聯型產品中,DMA1 控制器擁有高于DMA2 控制器的優先級。
5 程序設計
5.1 USART_Asyn
程序啟動后,會通過串口打印系統時鐘頻率信息和 "USART Asyn DMA Test."。
當有 8 個字節的數據通過串口發送到開發板的 USART1 時,程序會自動接收這些數據,接收完成后打印 "USART Asyn DMA Recv Complete" 以及接收到的 8 個字節數據。
接著,程序會將接收到的數據通過 USART1 發送出去,發送完成后打印 "USART Asyn DMA Send Complete"。
程序會不斷循環進行上述接收和發送操作,只要有新的 8 個字節數據發送到 USART1,就會重復執行接收和發送流程。
5.1.1 下載驗證

5.2 USART_Irda
串口輸出調試信息:程序啟動后,通過 USART1 輸出系統時鐘頻率信息、紅外測試信息、USART2 的發送和接收引腳信息。
數據發送:程序會將填充好的 256 字節數據(從 0x5A 開始遞增)通過 USART2 紅發送出去。
發送完成提示:數據發送完成后,通過 USART1 輸出 "USART Irda Data Send Complete" 信息。之后程序進入無限循環,不再有其他操作。
5.2.1 下載驗證

5.3 USART_LIN
此例程主要實現了基于 LIN(Local Interconnect Network)總線協議的通信測試,使用 USART2 作為 LIN 總線通信接口,USART1 用于輸出調試信息。LIN 總線是一種低成本的串行通信協議,常用于汽車電子等領域的分布式控制。
例程的核心功能是當檢測到 LIN 總線的中斷幀(Break)時,發送一個中斷幀和一個字節的數據 0xA5。
串口輸出調試信息:程序啟動后,通過 USART1 輸出系統時鐘頻率信息、LIN 測試信息和 USART2 的發送、接收引腳信息。
等待 LIN 中斷幀:程序進入主循環,等待 USART2 接收到 LIN 中斷幀。
檢測到中斷幀后的響應:當 USART2 接收到 LIN 中斷幀時,觸發USART2_IRQHandler 中斷處理函數,將 TestFlag 置為 1。主循環檢測到 TestFlag 為 1 后,發送一個 LIN 中斷幀和一個字節的數據 0xA5。
持續監測:程序繼續在主循環中運行,持續監測 LIN 中斷幀的到來,重復上述響應過程。
如果連接到 USART2 的 LIN 總線有其他設備發送 LIN 中斷幀,此例程會不斷響應并發送數據 0xA5。如果沒有其他設備發送中斷幀,程序會一直等待,不會有進一步的動作。
5.3.1 下載驗證

5.4 USART_Rs485
這個例程主要實現了基于 RS-485 通信協議的串口數據收發測試,同時使用 USART1 作為調試串口輸出信息。RS-485 是一種常用的工業串行通信標準,具有抗干擾能力強、傳輸距離遠等特點。
例程的核心功能包括:
初始化 USART1 用于調試信息輸出和命令接收。
初始化 RS-485 通信接口,設置波特率為 9600。
通過 USART1 接收用戶輸入的命令,當接收到字符 's' 時,向 RS-485 總線發送 5 個字節的數據(從 0x5A 開始遞增)。
持續監聽 RS-485 總線,若接收到數據則將其打印到 USART1 上。
5.4.1 下載驗證

5.5 USART_SmartCard
此例程主要實現了基于串口通信的智能卡(Smart Card)測試功能,采用 T=0 協議與智能卡進行通信。程序會實時監測智能卡的插入和拔出狀態,當檢測到智能卡插入時,會對智能卡進行冷復位操作,獲取其 ATR(Answer To Reset)信息,接著發送選擇主文件(Select MF)的命令,根據響應情況可能會進一步發送獲取數據的命令,最終完成智能卡的測試流程。當檢測到智能卡拔出時,會停止對智能卡的供電和時鐘信號。
程序啟動信息:程序啟動后,通過 USART1 輸出系統時鐘頻率信息和 "USART Smart Card(T=0) Test." 提示信息。
智能卡插入:當插入智能卡時,程序檢測到引腳狀態變化,打印 "Card inserted" 信息,然后進行冷復位操作,打印 ATR 信息(若有效),接著發送選擇主文件的命令并打印發送和響應數據,根據響應情況可能會進一步發送獲取數據的命令并打印相關信息。若整個測試流程成功,會輸出 "Smartcard test OK!" 信息,最后關閉智能卡的供電和時鐘信號。
智能卡拔出:當拔出智能卡時,程序檢測到引腳狀態變化,打印 "Card out" 信息,并關閉智能卡的供電和時鐘信號。
5.5.1 下載驗證

審核編輯 黃宇
-
單片機
+關注
關注
6076文章
45494瀏覽量
670252 -
數據通信
+關注
關注
2文章
526瀏覽量
35090 -
串口通信
+關注
關注
34文章
1662瀏覽量
57962
發布評論請先 登錄
第七章MMU例子代碼交叉編譯后下載到mini2440后,LED燈一直亮著并沒有閃
第七章 開關電源PCB排版解析
STM32第八章-TIM輸入捕獲
第七章 串口通信
評論