今天我會把Air724UG軟體的UART示例展示給大家,希望大家有所收穫。
一、串列埠(uart)概述
UART(通用非同步接收器/傳送器)是一種序列通訊協議,因其多功能性和簡單性而被廣泛使用。與 I2C 和 SPI 不同,UART 只需要兩條線即可執行:TX(傳送)和 RX(接收)。該協議允許非同步通訊,也就是說傳送器和接收器之間無需共享時鐘。資料被組織成資料包,每個資料包包含一個起始位、5 到 9 個資料位、一個可選的奇偶校驗位和1個、2個或者1.5個停止位。
優點:
簡單:UART 通訊協議相對簡單,易於實現和除錯。
適用性廣泛:UART 被廣泛應用於各種裝置之間的通訊,具有較好的相容性。
距離:UART 通訊距離較遠,適用於需要長距離傳輸的場景。
缺點:
速度較低:UART 通訊速度相對較低,不適用於對速度要求較高的應用。
雙工:UART 通訊是雙工的,可以進行低速雙工傳輸資料,進行資料的傳送和接收。
不可靠:由於 UART 是非同步通訊,可能會受到噪聲和干擾的影響,導致資料傳輸不可靠。
二、演示功能概述
本文主要教你使用 Air724UG 開發板對串列埠(uart)進行一個測試,其中包含了串列埠,RS485,usb 虛擬串列埠,多串列埠,串列埠電平轉換等內容,其中對 RS485 有一個搭配溫溼度感測器做的一個溫溼度感測器 demo
三、準備硬體環境
3.1 開發板準備
在開始之前,需要準備一套 Air724UG 開發板,目前合宙推出兩種 Air724UG 開發板(開發板和核心板),開發板的優勢在於大多數管腳介面都引出來了,例如 sd 卡,camera,螢幕等介面,實際使用都是一樣的,在使用時可根據自身需求選擇開發板。
1)如果你選擇的是Air724UG開發板:
此開發板的詳細使用說明參考:
https://docs.openluat.com/air724ug/product/
Air724UG產品手冊中的 《EVB_Air724UG_AXX開發板使用說明》,寫這篇文章時最新版本的使用說明為:《EVB_Air724UG_A14開發板使用說明》;開發板使用過程中遇到任何問題,可以直接參考這份使用說明文件。
2)如果你選擇的是Air724UG核心板:
下方資料可供你參考查閱:
https://docs.openluat.com/air724ug/product/
Air724UG產品手冊中的Air724UG-核心板硬體資料
3.2 SIM 卡
在中國大陸環境下,使用移動,電信,聯通的物聯網路卡或者手機卡都可以。
3.3 資料通訊線
1)USB 資料線
2)由於本篇教程和串列埠相關,所以需要準備 USB 轉 TTL 工具或者串列埠線。例如 CH340、FT232 等,本文使用的是高速串列埠
3.4 PC 電腦
PC 電腦推薦使用 win7 及以上版本,Air724UG 驅動下載地址:
8910驅動:
https://doc.openluat.com/wiki/21?wiki_page_id=6908
3.5 介紹串列埠如何接線
Air724UG 模組有 5 個串列埠,分別為 UART1,UART2,UART3,HOST UART 和 ZSP UART 除錯串列埠。
其中對於 Luat 開發方式,UART1 可以用作一個通用的串列埠來連線其他的串列埠裝置。
UART2 可以用來射頻校準,同時 UART2 還用來和內部的藍芽進行通訊,如果用到了藍芽功能,則 UART2 不可 再用作其他用途。
UART3 是一個通用串列埠,可以用作外接 GPS 等外設。
HOST UART 用來軟體除錯時輸出 AP trace。
ZSP UART 用來軟體除錯時輸出 CP trace。
其中 HOST UART 和 ZSP UART 不能作為普通串列埠使用,只用於除錯輸出底層日誌。
1)如果你想了解這 5 個串列埠對應於模組的哪個管腳,請看下方圖片:
2)如果你只想知道 Air724UG 開發板的串列埠引出位置,請看下方圖片:
3)接下來進行接線操作,注意模組與 MCU 之間要交叉接線,即 TX 接 RX,RX 接 TX,GND 接 GND 。由於本文只需用到 UART1 和 UART2 兩個通用串列埠,因此下表中只列出了這兩個通用串列埠的模組引腳編號及模組與 MCU 之間接線說明。
四、準備軟體環境
4.1 原始碼及工具
Air724UG模組使用韌體:
韌體地址:
https://docs.openluat.com/air724ug/luatos/firmware/
選擇最新版本CORE_V4030,本文使用的韌體版本是:LuatOS-Air_V4030_RDA8910_BT_FLOAT.pac
將韌體和指令碼燒錄到模組中,使用說明參考:
Luatools 下載和詳細使用
https://docs.openluat.com/Luatools/
串列埠工具本文選用的是 sscom
4.2 uart 庫介面描述
uart 庫即串列埠操作庫,該庫為內部庫,所以在程式中使用時無需 require 呼叫,本文只是簡單介紹 uart 庫中常用介面描述,其餘介面描述請參考:uart 介面文件
4.2.1 配置串列埠引數
4.2.2 寫串列埠
4.2.3 讀串列埠
4.2.4 關閉串列埠
4.2.5 註冊串列埠事件回撥
4.2.6 485 轉向控制
4.2.7 從串列埠讀取單字元
4.3 初始化 uart
使用 UART1 串列埠
使用 UART2 串列埠
4.4 註冊接收資料的回撥函式
uart.on 函式用於註冊一個接收事件的回撥函式,當指定的串列埠 UART_ID 接收到資料時,該回撥函式會被自動觸發並執行。回撥函式透過 uart.on(UART_ID, "receive", read) 定義,並處理接收到的資料。資料的讀取是透過 uart.read() 函式進行的,uart.read() 函式是非阻塞的,它是直接從現有快取區中直接讀取資料。
4.5 傳送資料
本文中字串編碼格式為 UTF-8 編碼格式,SSCOM 串列埠除錯工具的編碼格式為 GB2312,所以導致無法正確顯示字串中的中文,需要注意。
4.5.1 傳送普通字串
4.5.2 傳送十六進位制的資料串
4.5.3 傳送 json 格式的資料
4.6 完整例程
程式碼執行結果:
uart.write(UART_ID, common.utf8ToGb2312("合宙模組Air724UG")) 向串列埠傳送對應的字串資料,uart.on() 會事先註冊一個接收資料的回撥函式,當指定的串列埠 UART_ID 接收到資料時,該回撥函式會被自動觸發並執行,log.info("testUart.read bin",data) log.info("testUart.read hex",data:toHex()) 會將接收到的資料列印出來,此時我們透過串列埠除錯工具,選擇對應的埠,即可看到對應的列印資訊。
五、RS485 通訊
5.1 簡單介紹下 RS485
物聯網(IoT)在工業場景中的應用越來越廣泛,而 RS485 是一種常見的通訊協議,廣泛應用於工業自動化和物聯網系統中。RS485 是一種序列通訊標準,主要用於長距離、多節點通訊。適用於工業環境中的感測器、執行器、控制器等裝置之間的資料傳輸,且支援多點通訊,可以連線多個裝置,實現分散式控制。因為具有較好的抗干擾能力,也很適用於噪聲環境下的通訊。RS485 支援長距離傳輸,通常可達 1200 米,適用於工業現場中的遠端監控和控制。
RS485 是一種半雙工通訊協議。半雙工通訊協議允許資料在兩個方向上傳輸,但同一時間只能在一個方向上傳輸資料。在 RS485 通訊中,當傳送資料時,只能傳送資料而不能接收資料;當接收資料時,只能接收資料而不能傳送資料。
比如:在 RS485 通訊中,通常使用一個引腳(如 A 或 RX )作為傳送引腳,另一個引腳(如 B 或 TX )作為接收引腳。當傳送資料時,傳送引腳輸出高電平或低電平,接收引腳不工作;當接收資料時,接收引腳輸出高電平或低電平,傳送引腳不工作。有的也有單獨一根線專門用於控制收發邏輯,輸出高低電平,負責管理 RS485 的通訊,包括髮送、接收、處理錯誤等資料。
優點:
抗干擾能力強:RS485 採用差分訊號傳輸,抗干擾能力強,適用於工業環境中的噪聲干擾。
傳輸距離遠:RS485 支援長距離傳輸,適用於工業現場中的遠端監控和控制。
多節點通訊:RS485 支援多點通訊,可以連線多個裝置,實現分散式控制。
相容性好:RS485 是一種標準化的通訊協議,具有較好的相容性,可以與其他裝置進行通訊。
成本較低:RS485 模組和電纜的成本相對較低,適用於工業現場中的成本控制。
缺點:
訊號衰減:隨著距離的增加,訊號衰減會加劇,影響通訊質量。
速率限制:RS485 的傳輸速率相對較低,通常在 9600bps 到 115200bps 之間,適用於低速資料傳輸。
電氣特性要求:RS485 對電氣特性有較高的要求,需要使用特定的電纜和聯結器。
佈線複雜:RS485 需要使用雙絞線進行佈線,佈線複雜度較高。
5.2 硬體展示
724UG 開發板 +RS485-TTL+RS485-USB
RS485-USB
接線方式:
注意:上面的硬體使用的 RS485-TTL 為硬體自動轉換,實際使用根據硬體設定去選擇 gpio 轉換或者硬體自動轉換
5.3 初始化 uart
5.4 註冊接收資料的回撥函式
5.5 傳送資料
本文中字串編碼格式為 UTF-8 編碼格式,SSCOM 串列埠除錯工具的編碼格式為 GB2312,所以導致無法正確顯示字串中的中文,需要注意。
5.5.1 傳送普通字串
5.5.2 傳送十六進位制的資料串
5.5.3 傳送 json 格式的資料
5.6 完整例程
程式碼執行結果:
uart.write(UART_ID, common.utf8ToGb2312("合宙模組Air724UG")) 向串列埠傳送對應的字串資料,uart.on() 會事先註冊一個接收資料的回撥函式,當指定的串列埠 UART_ID 接收到資料時,該回撥函式會被自動觸發並執行,log.info("testUart.read bin",data) log.info("testUart.read hex",data:toHex()) 會將接收到的資料列印出來,此時我們透過串列埠除錯工具,選擇對應的埠,即可看到對應的列印資訊。
5.7 溫溼度感測器例程
5.7.1 硬體展示
使用的硬體為 sht20 溫溼度感測器 +724UG 開發板 +RS485-TTL
sht20溫溼度感測器
接線方式:
5.7.2 程式碼展示
本示例是利用 sht20 溫溼度感測器 +724UG 開發板 +RS485-TTL 透過 485 做的一個採集溫溼度的 demo,主要邏輯是透過傳送 16 進位制資料 0x01,0x04,0x00,0x01,0x00,0x02,0x20,0x0B 來獲取溫溼度
然後對獲取資料進行 modbus 校驗,然後對資料進行解析,根據公式計算出實際溫溼度
透過 json.encode()把表內的資料轉換成 json 型別列印出來
六、USB 虛擬串列埠
6.1 介紹 USB 虛擬串列埠
USB 虛擬串列埠是一種將 USB 介面轉換為序列通訊介面的技術。它允許計算機透過 USB 介面與其他裝置進行序列通訊,如調變解調器、印表機、掃描器等。USB 虛擬串列埠通常由一個 USB 轉序列介面卡和一個驅動程式組成。
並且虛擬串列埠通常沒有波特率要求,因為它們是軟體模擬的序列通訊介面,不依賴於物理硬體。然而,在實際應用中,虛擬串列埠仍然需要遵守一些基本的通訊協議,比如資料位、停止位和校驗位等。
USB 虛擬串列埠的主要功能包括:
序列通訊:USB 虛擬串列埠可以模擬序列通訊介面,實現資料的序列傳輸。它支援各種序列通訊協議,如 RS-232、RS-485 等。
傳輸可靠:傳統的串列埠連線線容易受到干擾,而 USB 虛擬串列埠採用的 USB 技術可以更好地抵抗干擾,提高了通訊的可靠性。
序列控制:USB 虛擬串列埠可以控制序列通訊引數,如波特率、資料位、停止位、奇偶校驗等。它還支援序列通訊的流控制和錯誤處理。
使用方便:USB 虛擬串列埠無需再使用傳統的串列埠連線線,只需要一個標準的 USB 資料線即可連線計算機和外部裝置,使得裝置連線更加方便
USB 虛擬串列埠廣泛應用於各種領域,如工業自動化、物聯網、智慧家居等。它為各種裝置提供了便捷的序列通訊解決方案,提高了系統的靈活性和可靠性。
6.2 虛擬通訊串列埠-埠位置說明
首先透過帶有 DM、DP 的 USB 資料線兩端連線 模組 和 Windows7 及以上系統的電腦。
然後將模組開機,就可以從電腦的裝置管理器中看到埠處多出來 4 個 USB 埠。
驅動裝好之後會列舉出 4 個 USB 介面,其中 LUAT USB Device 1 AT (COM6)為虛擬 AT 口,MODEM 為日誌口,AP,和 CP 口為底層日誌口
6.3 初始化 USB_UART
6.4 註冊接收資料的回撥函式
6.5 傳送資料
本文中字串編碼格式為 UTF-8 編碼格式,SSCOM 串列埠除錯工具的編碼格式為 GB2312,所以導致無法正確顯示字串中的中文,需要注意。
6.5.1 傳送普通字串
6.5.2 傳送十六進位制的資料串
6.5.3 傳送 json 格式的資料
6.6 完整例程
程式碼執行結果:
七、多串列埠
7.1 簡介
前面已經介紹了串列埠的基本用法,本文將使用兩個串列埠(UART1、UART2)進行分別通訊的演示。
7.2 介紹多串列埠如何接線
大家可先跳轉至 3.5 介紹串列埠如何接線中檢視單串列埠的接線說明,在學會了 UART1 接線和 UART2 接線後,只需將這兩個通用串列埠同時接上對應位置即可。
7.3 初始化 UART1 串列埠和 UART2 串列埠
7.4 註冊接收資料的回撥函式
7.5 傳送資料
本文中字串編碼格式為 UTF-8 編碼格式,SSCOM 串列埠除錯工具的編碼格式為 GB2312,所以導致無法正確顯示字串中的中文,需要注意。
7.5.1 傳送普通字串
7.5.2 傳送十六進位制的資料串
7.5.3 傳送 json 格式的資料
7.6 完整例程
程式碼執行結果:
八、UART 電平
8.1 介紹 UART 電平
UART 電平是指序列通訊中使用的電壓電平標準。常見的串列埠電平標準有 RS-232、TTL 和 RS-485 等。
1、RS-232 電平:RS-232 是一種常用的串列埠通訊標準,它使用負邏輯電平,即邏輯 1 用 -3V 到 -15V 表示,邏輯 0 用 +3V 到 +15V 表示。RS-232 電平適用於短距離、低速率的通訊。
2、TTL 電平:TTL(Transistor-Transistor Logic)電平是一種常見的數位電路電平標準,它使用正邏輯電平,即邏輯 1 用 +5V 表示,邏輯 0 用 0V 表示。TTL 電平適用於短距離、高速率的通訊。
3、RS-485 電平:RS-485 是一種常用的串列埠通訊標準,它使用差分電平,即邏輯 1 用 +2V 到 +6V 表示,邏輯 0 用 -2V 到 -6V 表示。RS-485 電平適用於長距離、高速率的通訊。
在串列埠通訊中,選擇合適的電平標準非常重要,它直接影響到通訊的可靠性和穩定性。
Air724UG 模組的 UART IO 電壓預設為 1.8V,如果要和 3.3V/5V 的 MCU 或其他串列埠外設通訊,必須要加電平轉換電路
8.2 電平轉換參考電路設計
8.3 常見問題
1、串列埠電平電壓過低或過高可能會導致什麼問題? 如果電壓過低,可能會導致接收器無法正確識別訊號,如果過高,可能會導致訊號損壞或損壞接收器。概述:可能會導致串列埠無法正常通訊,或通訊資料會突然出現亂碼,資料錯亂等問題。
九、常見問題
9.1 模組串列埠接收到亂碼是什麼情況?
串列埠接收到亂碼通常是由於資料格式不匹配或訊號干擾等原因引起的。以下是一些可能導致亂碼的情況及其解決方法:
1、波特率不一致 - 情況:傳送方和接收方的波特率設定不同。- 解決:確保兩端的波特率設定一致。
2、資料位、停止位或校驗位不匹配 - 情況:資料格式不一致,例如資料位數、停止位或是否使用校驗位。- 解決:確認傳送和接收的設定一致。例如,常用設定為8個資料位、1個停止位、無校驗。
3、訊號干擾 - 情況:外部干擾導致訊號失真。- 解決:使用遮蔽線纜,縮短線纜長度,避免在電磁干擾強的環境中使用。
4、接線錯誤 - 情況:TX(傳送)和RX(接收)線接反。- 解決:檢查接線,確保正確連線。
5、裝置未正確初始化 - 情況:傳送裝置未配置好,導致資料格式不正確。- 解決:檢查傳送裝置的初始化程式碼和配置,確保正確設定。
6、緩衝區溢位 - 情況:接收端處理速度慢,導致資料被覆蓋。- 解決:提高接收端處理速度,或者增加緩衝區大小。
7、電源問題 - 情況:裝置供電不足或不穩定。- 解決:檢查電源供應,確保裝置正常供電。
8、資料編碼不一致 - 情況:傳送和接收使用不同的字元編碼(如ASCII與UTF-8)。- 解決:確保兩端使用相同的字元編碼。
9、物理連線問題 - 情況:介面接觸不良或線纜損壞。- 解決:檢查串列埠連線,確保接觸良好,必要時更換線纜。
10、串列埠驅動問題 - 情況:驅動程式不相容或未正確安裝。- 解決:檢查並更新串列埠驅動程式。
9.2 使用 RS485 連線模組,出現漏發,接收不到的情況是怎麼回事?
出現漏發和接收不到的情況,大機率是因為模組轉向時間設定的問題,模組收不到資料可能是因為沒有設定轉向腳,導致只能發不能收,出現漏發的情況,大機率是因為轉向時間設定和裝置的實際轉向存在偏差導致漏資料的情況,可以透過 uart.set_rs485_oe()介面調整轉向時間,通常 9600 波特率設定 3500us 的轉向時間。
9.3 模組串列埠接收不到資料/模組發的資料收不到?
如果出現模組串列埠接收不到資料的情況,首先排查軟體方面邏輯是否寫的正確,可以按照 Uart 的 demo 進行測試,如果 demo 也不行的話,排查下模組端和裝置端是否為 rx-tx,tx-rx 這樣的接法,避免 rx-rx,tx-tx,如果接線也都正常的話確定下波特率方面,如果有條件的話,可以直接透過邏輯分析儀/示波器檢測模組的 rx/tx 腳看是否收到資料或者傳送資料。
分享完畢。