# 串行端口映射

本主题介绍如何确定 USART/UART 串行端口设备名称(例如:"ttyS0")与飞行控制器上相关端口(例如:"ttyS0")之间的映射关系。 TELEM1, TELEM2, GPS1, RC SBUS, 调试控制台.

这些指令用于生成飞行控制器文档中的串行端口映射表。例如 Pixhawk 4 > 串行端口映射.

备注

分配给每个端口的功能不 必须 匹配名称(在大多数情况下),并使用 串行端口配置.通常,端口功能的配置要与名称相匹配,这就是为什么标为 GPS1 可与开箱即用的 GPS 配合使用。

# STMxxyyy 上的 NuttX

本节介绍如何通过检查电路板配置文件来获取 STMxxyyy 架构上 NuttX 版本的映射。该说明使用的是 FMUv5,但同样可以扩展到其他 FMU 版本/NuttX 板。

# default.px4board

default.px4board 列出了许多串行端口映射(搜索文本 "SERIAL_PORTS")。

来自 /boards/px4/fmu-v5/default.px4board (打开新窗口):

CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS0" CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS1" CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS2" CONFIG_BOARD_SERIAL_TEL4="/dev/ttyS3";

或者使用以下命令启动 boardconfig make px4_fmu-v5 boardconfig 并访问串行端口菜单

    串行端口 ---> (/dev/ttyS0) GPS1 tty 端口() GPS2 tty 端口() GPS3 tty 端口() GPS4 tty 端口() GPS5 tty 端口 (/dev/ttyS1) TEL1 tty 端口(/dev/ttyS2) TEL2 tty 端口() TEL3 tty 端口(/dev/ttyS3) TEL4 tty 端口() TEL5 tty 端口

# nsh/defconfig

nsh/defconfig 可以确定定义了哪些端口,是 UART 还是 USART,以及 USART/UART 和设备之间的映射关系。您还可以确定哪个端口用于 串行/调试控制台.

例如,打开电路板的 defconfig 文件: /boards/px4/fmu-v5/nuttx-config/nsh/defconfig (打开新窗口)

搜索文本"ART",直到找到一个类似的部分,其条目格式如下 CONFIG_STM32xx_USARTn=y (其中 xx 是处理器类型,而 n 是端口号)。例如

CONFIG_STM32F7_UART4=y CONFIG_STM32F7_UART7=y CONFIG_STM32F7_UART8=y CONFIG_STM32F7_USART1=y CONFIG_STM32F7_USART2=y CONFIG_STM32F7_USART3=y CONFIG_STM32F7_USART6=y

这些条目会告诉你定义了哪些端口,以及它们是 UART 还是 USART。

复制上面的部分,并按 "n" 数字重新排序。增加设备编号 ttySn 旁边(基于零),以获取设备到串行端口映射。

ttyS0 CONFIG_STM32F7_USART1=y ttyS1 CONFIG_STM32F7_USART2=y ttyS2 CONFIG_STM32F7_USART3=y ttyS3CONFIG_STM32F7_UART4=y ttyS4 CONFIG_STM32F7_USART6=y ttyS5 CONFIG_STM32F7_UART7=y ttyS6 CONFIG_STM32F7_UART8=y

要获取 DEBUG 控制台映射,我们可以搜索 defconfig 文件 (打开新窗口) 对于 序列号.下面我们看到控制台位于 UART7 上:

CONFIG_UART7_SERIAL_CONSOLE=y

# board_config.h

对于带有 IO 板的飞行控制器,可从以下接口确定 PX4IO 连接 board_config.h 通过搜索 px4io_serial_device.

例如 /boards/px4/fmu-v5/src/board_config.h (打开新窗口):

#define PX4IO_SERIAL_DEVICE "/dev/ttyS6" #define PX4IO_SERIAL_TX_GPIO GPIO_UART8_TX #define PX4IO_SERIAL_RX_GPIO GPIO_UART8_RX #define PX4IO_SERIAL_BASE STM32_UART8_BASE

因此,PX4IO 启动了 ttyS6 (我们还可以看到这映射到 UART8,这一点我们在上一节中已经知道)。

# 将所有内容整合在一起

最后的映射是

ttyS0 CONFIG_STM32F7_USART1=y GPS1 ttyS1 CONFIG_STM32F7_USART2=y TEL1 ttyS2 CONFIG_STM32F7_USART3=y TEL2 ttyS3CONFIG_STM32F7_UART4=y TEL4 ttyS4 CONFIG_STM32F7_USART6=y ttyS5 CONFIG_STM32F7_UART7=y DEBUG ttyS6 CONFIG_STM32F7_UART8=y PX4IO

飞行控制器文档 得到的表格是

UART 设备 港口
UART1 /dev/ttyS0 全球定位系统
USART2 /dev/ttyS1 TELEM1(流量控制)
USART3 /dev/ttyS2 TELEM2(流量控制)
UART4 /dev/ttyS3 TELEM4
USART6 /dev/ttyS4 RC SBUS
UART7 /dev/ttyS5 调试控制台
UART8 /dev/ttyS6 PX4IO

# 其他架构

备注

欢迎投稿!

# 另请参见