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= |
控制台 |
|
SERIAL1_ |
- 序列1= |
MAVLink |
|
SERIAL2_ |
- 序列2= |
MAVLink |
|
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 中进行尝试。