UART 和控制台

ArduPilot 中的许多组件都依赖于 UART。它们用于调试输出、遥测、GPS 模块等。了解如何通过 HAL 与 UART 通信将有助于您理解大量 ArduPilot 代码。

8 个 UART

ArduPilot HAL 目前定义了 8 个 UART。HAL 本身并未为这些 UART 定义任何特定角色,但 ArduPilot 的其他部分会假定它们将被分配特定功能。与 sim_vehicle.py 一起使用串行端口的命令行选项应在前面加上 -A 以便转交给二进制载具。确保包括 uart 协议。指定波特率不是必需的,但更为一致。例如 sim_vehicle.py --控制台 --地图 -A --serial5=uart:/dev/ttyS15:115200.

参数前缀

模拟载具命令行

后卫角色

默认连接

SERIAL0_

- 序列0=

控制台

tcp:localhost:5760:wait

SERIAL1_

- 序列1=

MAVLink

tcp:localhost:5762

SERIAL2_

- 序列2=

MAVLink

tcp:localhost:5763

SERIAL3_

- 序列3=

全球定位系统

模拟 GPS

SERIAL4_

- 序列4=

全球定位系统

模拟 GPS

SERIAL5_

- 序列5=

SERIAL6_

- 序列6=

SERIAL7_

- 序列7=

如果您使用 ArduPilot HAL 编写自己的草图,那么您可以将这些 UART 用于任何用途,但如果可能,您应尽量使用上述分配,因为这样可以更容易地与现有代码兼容。

您可以通过更改 UART 的 SERIALn_PROTOCOL 参数来改变其角色。可能的参数值已在 "SERIALn_PROTOCOL "的说明中列出。 serial1_protocol.

去看看 libraries/AP_HAL/examples/UART_test 示例草图。它会向前 5 个 UART 打印一条你好信息。在你的电路板上试试,看看能否使用 USB 串行适配器显示所有输出。尝试更改草图中的波特率。

调试控制台

一直以来,除了基本的 5 个 UART 外,某些平台还提供额外的调试控制台。最近,调试控制台被指向 USB。在 SITL 上,调试被指向终端,而 USB 默认被指向 5760 端口。

如果您的电路板确实设置了 HAL_OS_POSIX_IO(在 AP_HAL/AP_HAL_Boards.h) 然后尝试添加一些 ::printf() 和其他 stdio 函数。

如果 ::printf 对您不起作用,可能是因为您的特定文件(例如库)不具有 #include <stdio.h>; 的顶部,只需添加即可。)

您还可以使用 hal.console->printf() 指定 USB 端口。

UART 功能

每个 UART 都有一些可用的基本 IO 功能。主要功能包括

  • printf - 格式化打印

  • printf_P - 使用内存字符串进行格式化打印(节省 AVR 板的内存)

  • println - 打印和换行

  • 写 - 写入大量字节

  • 读取 - 读取一些字节

  • 可用 - 检查是否有字节正在等待

  • txspace - 检查有多少可用的外发缓冲空间

  • get_flow_control - 检查 UART 是否具有流量控制功能

请查看 AP_HAL 中的各项声明,并在 UART_test 中进行尝试。