移植PX4串口没输出、SD卡挂不上?看这篇就够了!

无人机飞控系统中,串口通信和SD卡存储是最基础、也是最关键的两项功能,前者负责与 GPS、遥控、数传等外设交互,后者用于日志记录与数据分析。但在将 PX4 移植到STM32H743开发板时,原有的硬件映射和驱动配置往往无法直接套用,往往容易出现串口映射错误、驱动未启用或配置不当、硬件接线错误、SD 卡初始化失败等问题。

本文将聚焦上述问题,分享完整的配置步骤与调试方法,帮助你快速实现:串口重映射与通信测试、SD卡驱动启用与日志功能验证

01 串口移植

功能分配方案

  • 确认设备节点与硬件功能一一对应,默认映射与实际需求不符会导致通信异常。

  • 串口无输出,往往是串口号分配或映射错误。

关键代码修改

步骤1:引脚重映射修改 board.h 指定物理引脚:

#define GPIO_USART1_RX   GPIO_USART1_RX_2   /* PA10 */
#define GPIO_USART1_TX   GPIO_USART1_TX_2   /* PA9  */
#define GPIO_USART2_RX   GPIO_USART2_RX_1   /* PA3  */
#define GPIO_USART2_TX   GPIO_USART2_TX_1   /* PA2  */
#define GPIO_USART3_RX   GPIO_USART3_RX_1   /* PB11  */
#define GPIO_USART3_TX   GPIO_USART3_TX_1   /* PB10  */
#define GPIO_UART4_RX    GPIO_UART4_RX_2    /* PA1  */
#define GPIO_UART4_TX    GPIO_UART4_TX_2    /* PA0  */
#define GPIO_UART5_RX    GPIO_UART5_RX_3    /* PD2  */
#define GPIO_UART5_TX    GPIO_UART5_TX_3    /* PC12  */
#define GPIO_USART6_RX   GPIO_USART6_RX_1   /* PC7  */
#define GPIO_USART6_TX   GPIO_USART6_TX_1   /* PC6  */
  • STM32H743支持多路引脚复用,实际映射需与开发板原理图对应。

  • 不同引脚复用可能会影响驱动初始化,建议优先选用参考设计推荐的引脚。

步骤2:参数配置在 defconfig 中设置缓冲区与工作模式:

CONFIG_STM32H7_UART4=y
CONFIG_STM32H7_UART5=y
CONFIG_STM32H7_USART1=y
CONFIG_STM32H7_USART2=y
CONFIG_STM32H7_USART3=y
CONFIG_STM32H7_USART6=y
CONFIG_STM32H7_USART_BREAKS=y
CONFIG_STM32H7_USART_INVERT=y
CONFIG_STM32H7_USART_SINGLEWIRE=y
CONFIG_STM32H7_USART_SWAP=y
CONFIG_UART4_BAUD=57600
CONFIG_UART4_RXBUFSIZE=600
CONFIG_UART4_TXBUFSIZE=800
CONFIG_UART5_BAUD=57600
CONFIG_UART5_RXBUFSIZE=600
CONFIG_UART5_TXBUFSIZE=800
CONFIG_USART1_BAUD=57600
CONFIG_USART1_RXBUFSIZE=180
CONFIG_USART1_SERIAL_CONSOLE=y
CONFIG_USART1_TXBUFSIZE=1500
CONFIG_USART2_BAUD=57600
CONFIG_USART2_RXBUFSIZE=600
CONFIG_USART2_TXBUFSIZE=3000
CONFIG_USART3_BAUD=57600
CONFIG_USART3_RXBUFSIZE=600
CONFIG_USART3_TXBUFSIZE=1500
CONFIG_USART6_BAUD=57600
CONFIG_USART6_RXBUFSIZE=600
CONFIG_USART6_TXBUFSIZE=1500

硬件回环测试

步骤1:使能测试命令:在default.px4board添加:

CONFIG_SYSTEMCMDS_SERIAL_TEST=y

步骤2:短接TX/RX引脚后执行命令:

serial_test -e -b 921600 -p /dev/ttyS1 -c -l 250

如果tx/rx短接输出如下图:

如果tx/rx未短接如下图:

该方法可快速验证所有串口通道的可靠性,避免硬件故障导致通信异常。通过硬件回环测试确认串口驱动工作正常后,即可连接GPS、数传等外设进行实际应用测试。

02 SD卡移植

硬件连接方案

根据STM32H743开发板原理图,SD卡接口引脚映射如下:

接口说明:采用4位数据总线(D0-D3)模式,时钟频率最高可达48MHz。

驱动配置

该开发板使用的SDMMC1,修改boards/geek/h743/nuttx-config/nsh/目录下的defconfig文件内sd相关部分。

CONFIG_SDMMC1_SDIO_PULLUP=y  #配置内部上拉电阻
CONFIG_STM32H7_SDMMC1=y  #启用SDMMC1控制器

SD卡功能测试

将编译生成的固件烧录到开发板,连接QGC地面站,进行测试。

步骤1:在终端输入sd_bench如下图:

步骤2:日志功能验证,在QGC地面站检查:
1. 进入日志下载界面
2. 点击刷新按钮
3. 确认显示.ulg日志文件

通过上述测试可确认SD卡子系统工作正常,为飞行数据记录和故障分析提供可靠支持。

03 避坑指南

USB连接不上QGC

排查:GPIO_OTGFS_VBUS引脚是否使能(与3.3v短接)

DEBUG无输出

[boot] Rev 0x0 : Ver 0x0 ICF6000000
[boot] Fault Log info File No 4 Length 3177 flags:0x01 state:1
[boot] Fault Log is Armed
[hardfault_log] Fault Log is Armed

连接DEBUG接口到串口助手,只打印以上信息,删除defconfig文件中的CONFIG_DEV_CONSOLE is not set

串口无输出

检查default.px4board文件内串口设备号对应关系

CONFIG_BOARD_SERIAL_TEL1="/dev/ttyS1"
CONFIG_BOARD_SERIAL_GPS1="/dev/ttyS2"
CONFIG_BOARD_SERIAL_GPS2="/dev/ttyS3"
CONFIG_BOARD_SERIAL_TEL2="/dev/ttyS4"
CONFIG_BOARD_SERIAL_RC="/dev/ttyS5"

资源速递
源码链接:
https://github.com/amovlgf/PX4-Autopilot/tree/geek_h743/boards/geek/h743
后续我们会发布I2C传感器与SPI总线设备(IMU、磁罗盘)的移植指南,敬请关注!

如果您有感兴趣的技术话题,请在留言区告诉我们!关注阿木实验室,更多技术干货不断更新!开发遇到棘手难题可以上阿木官方论坛:bbs.amovlab.com有工程师亲自解答10000+无人机开发者和你共同进步!