英文原文地址:https://ardupilot.org/dev/docs/learning-ardupilot-uarts-and-the-console.html
ArduPilot中的許多組件都依賴UART,用於調試輸出、遙測、GPS模塊等, 瞭解HAL與UART通信將幫助您理解許多ArduPilot代碼。
8個串口介紹
ArduPilot HAL 當前定義了 8 個UART。 HAL 本身並未爲這些 UART 定義任何特定角色,但是 ArduPilot 的其他部分假定它們將被分配特定的功能。
- uartA - 控制檯(通常是USB,運行MAVLink遙測)
- uartB - 第一路 GPS
- uartC - 主遙測(Pixhawk上的telem1,APM2上的第二個無線電)
- uartD - 二次遙測(Pixhawk上的telem2)
- uartE - 第二路 GPS
- uartF - 用戶定義
- uartG - 用戶定義
- uartH - 用戶定義
如果使用 ArduPilot HAL 編寫自己的示例,則用戶可以自定義這些 UART,使得代碼更加靈活方便。
可以通過更改UART的SERIALn_PROTOCOL參數來更改其角色。可能的參數值爲1:None,1:MAVLink1、2:MAVLink2、3:Frsky D,4:Frsky SPort,5:GPS,7:Alexmos Gimbal Serial,8:SToRM32 Gimbal Serial,9:Rangefinder,10:FrSky SPort Passthrough(OpenTX),11:Lidar360、13:Beacon,14:Volz伺服輸出,15:SBus伺服輸出,16:ESC遙測,17:Devo遙測,18:OpticalFlow,19:RobotisServo,20:NMEA輸出,21 :WindVane,22:SLCAN搜索1_PROTOCOL的代碼以獲取uart角色的更新列表。
查看庫 / AP_HAL / examples / UART_test 示例草圖。它向前 5 個UART打印問候消息。在板上嘗試一下,看看是否可以使用USB串行適配器顯示所有輸出,用戶可以嘗試修改該打印設置或者打印內容,從而加深對串口配置操作的理解。
調試控制檯
除了基本的 5 個UART外,在某些平臺上還有一個附加的調試控制檯。目前調試控制檯主要爲USB接口。在 SITL 上,調試直接定向到運行SITL的終端,而USB默認情況下定向到端口5760。
如果設置了HAL_OS_POSIX_IO(請在 AP_HAL / AP_HAL_Boards.h 中進行檢查),則嘗試在 UART_test 示例中添加一些:: printf()和其他 stdio 函數, 如果:: printf 函數工作不正常,則增加 “ #include <stdio.h>” 引用即可。
同時,也可以使用hal.console-> printf()指定USB端口。
UART功能
UART 的主要功能包含以下幾點:
- printf - 格式化打印
- printf_P - 帶有程序字符串的格式化打印(在AVR板上節省內存)
- println - 打印和換行
- write - 寫字節
- read - 讀字節
- available - 檢查是否有任何字節在等待
- txspace - 檢查有多少發送緩衝區可用
- get_flow_control - 檢查UART是否具有流控制功能
查看 AP_HAL 中每個聲明,然後在 UART_test 中測試串口功能。