Skip to content

串口映射

本主题说明如何确定USART/UART串行端口(下称串口)设备名称(例如“ttyS0”)与飞行控制器上对应端口(如TELEM1TELEM2GPS1RC SBUS调试控制台(Debug console))之间的映射关系。

这份说明用于在飞行控制器文档中生成串行端口映射表。 例如: Pixhawk 4 > Serial Port Mapping

INFO

每个端口分配的功能不必与名称匹配(大多数情况下),并通过串行端口配置。 通常情况下端口功能是与名称相匹配的,因此标记为GPS1的端口可直接连接GPS设备。

NuttX 在 STMxxyyy 上

本节将展示如何通过检查板载配置文件,获取在STMxxyyy架构上构建NuttX所需的映射信息。 该说明使用FMUv5,但同样可扩展至其他FMU版本/NuttX开发板。

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"

或者,您可以通过执行 make px4_fmu-v5 boardconfig 启动板配置工具,并进入串口菜单。

    Serial ports  --->
        (/dev/ttyS0) GPS1 tty port
        ()  GPS2 tty port
        ()  GPS3 tty port
        ()  GPS4 tty port
        ()  GPS5 tty port
        (/dev/ttyS1) TEL1 tty port
        (/dev/ttyS2) TEL2 tty port
        ()  TEL3 tty port
        (/dev/ttyS3) TEL4 tty port
        ()  TEL5 tty port

nsh/defconfig

nsh/defconfig 允许您确定哪些端口被定义,它们是 UART 还是 USART,以及 USART/UART 与设备之间的映射关系。 您还可以确定用于该功能的端口serial/debug console

打开板载的 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
ttyS3 CONFIG_STM32F7_UART4=y
ttyS4 CONFIG_STM32F7_USART6=y
ttyS5 CONFIG_STM32F7_UART7=y
ttyS6 CONFIG_STM32F7_UART8=y

要获取调试控制台映射,我们需在defconfig file 搜索 SERIAL_CONSOLE. 下面我们看到控制台位于UART7:

CONFIG_UART7_SERIAL_CONSOLE=y

board_config.h

对于配备IO板的飞行控制器,请通过在board_config.h文件中搜索PX4IO_SERIAL_DEVICE来确定PX4IO连接。

例如 /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
ttyS3 CONFIG_STM32F7_UART4=y TEL4
ttyS4 CONFIG_STM32F7_USART6=y
ttyS5 CONFIG_STM32F7_UART7=y DEBUG
ttyS6 CONFIG_STM32F7_UART8=y PX4IO

在 [flight controller docs]../flight_controller/pixhawk4.md#serial-port-mapping最终生成的表格如下:

UART设备Port
UARTUARTGPS
USART2/dev/ttyS1TELEM1 (流控)
USART3/dev/ttyS2TELEM2 (流控)
UART4/dev/ttyS3TELEM4
USART6/dev/ttyS4RC SBUS
UART7/dev/ttyS5调试控制台
UART8/dev/ttyS6PX4IO

Other Architectures

INFO

Contributions welcome!

另见