NUTTx移植到飞控板



1、下载官方NUTTX系统源码:

git clone https://bitbucket.org/nuttx/nuttx

git clone https://bitbucket.org/nuttx/apps

git clone  https://bitbucket.org/nuttx/tools

 

2、根据系统硬件找到类似配置文件:

我们飞控板采用STM32F407VG作为主控芯片,在nuttx/configs/stm32f4discovery目录下的配置和我们系统硬件很接近,所以可以利用stm32f4discovery的配置稍作修改适应飞控板。

 

3、修改系统时钟:

stm32f4discovery板载8MHz系统晶振,而我使用板子是24MHz系统晶振,所以需要修改系统时钟配置(此部分可以参考PX4系统的nuttx-configs/px4fmu-v2/include/board.h的配置),在configs/stm32f4discovery/include/board.h修改如下:

根据飞控板硬件修改时钟配置:

//#define STM32_BOARD_XTAL        8000000ul

#define STM32_BOARD_XTAL        24000000ul

 

//#define STM32_PLLCFG_PLLM       RCC_PLLCFG_PLLM(8)

#define STM32_PLLCFG_PLLM       RCC_PLLCFG_PLLM(24)

 

根据飞控板硬件修改串口配置:

#if 0

// UART2:

// The STM32F4 Discovery has no on-board serial devices, but the console is

// brought out to PA2 (TX) and PA3 (RX) for connection to an external serial

// device. (See the README.txt file for other options)

//

// These pins selections, however, conflict with pin usage on the STM32F4DIS-BB.

 

#ifndef CONFIG_STM32F4DISBB

#  define GPIO_USART2_RX GPIO_USART2_RX_1

#  define GPIO_USART2_TX GPIO_USART2_TX_1

#endif

 

// UART3: (Used in pseudoterm configuration)

 

#define GPIO_USART3_TX GPIO_USART3_TX_1

#define GPIO_USART3_RX GPIO_USART3_RX_1

 

// UART6:

// The STM32F4DIS-BB base board provides RS-232 drivers and a DB9 connector

// for USART6.  This is the preferred serial console for use with the STM32F4DIS-BB.

 

#define GPIO_USART6_RX GPIO_USART6_RX_1

#define GPIO_USART6_TX GPIO_USART6_TX_1

 

#else

 

// UARTs.

#define GPIO_USART1_RX GPIO_USART1_RX_2  // console in from IO

#define GPIO_USART1_TX GPIO_USART1_TX_2

 

#define GPIO_USART2_RX      GPIO_USART2_RX_2

#define GPIO_USART2_TX      GPIO_USART2_TX_2

#define GPIO_USART2_RTS    GPIO_USART2_RTS_2

#define GPIO_USART2_CTS    GPIO_USART2_CTS_2

 

#define GPIO_USART3_RX      GPIO_USART3_RX_3

#define GPIO_USART3_TX      GPIO_USART3_TX_3

#define GPIO_USART3_RTS    GPIO_USART3_RTS_2

#define GPIO_USART3_CTS    GPIO_USART3_CTS_2

 

#define GPIO_UART4_RX        GPIO_UART4_RX_1

#define GPIO_UART4_TX        GPIO_UART4_TX_1

 

#define GPIO_USART6_RX      GPIO_USART6_RX_1

#define GPIO_USART6_TX      GPIO_USART6_TX_1

 

#define GPIO_UART7_RX        GPIO_UART7_RX_1

#define GPIO_UART7_TX        GPIO_UART7_TX_1

 

// UART8 has no alternate pin config

 

// UART RX DMA configurations

 

#define DMAMAP_USART1_RX DMAMAP_USART1_RX_2

#define DMAMAP_USART6_RX DMAMAP_USART6_RX_2

 

#endif

 

4、配置NUTTX系统(详细的工具配置及编译可以参考博文“NuttX移植到STM32F4Discovery”):

清除之前的系统配置:   

    进入NUTTX源码根目录

    sudo make distclean

 

重新配置系统:

cd tools/

USB调试:

./configure.sh ../configs/stm32f4discovery/usbnsh/

  串口调试:

./configure.sh ../configs/stm32f4discovery/nsh

 

5、配置运行环境

cd ../                 //回到nuttx源码根目录

sudo make menuconfig

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上


NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

 

6、编译:

NUTTX源码根目录下:

    sudo make

编译成功,生成 nuttx.bin 和 nuttx.hex。

 

7、使用st-link 烧写nuxtt.bin

stlink连接电脑和板子,执行:st-util指令,如果正常会显示:

NUTTX移植官方源码到飞控板上

8、下载: 

    st-flash write nuttx.bin 0x8000000

NUTTX移植官方源码到飞控板上


 9、调试:

下载完成后,断电重启板子,用USB线将板子与电脑连接上就可以与电脑通信了,通过USB与电脑通信,此时板子会被电脑识别成ttyACM*设备(通常ttyACM0stlinkttyACM1才是通信口)。这里使用screen命令连接nsh(nuttxshell)

    ls /dev/ttyA*

    sudo screen /dev/ttyACM0

 NUTTX移植官方源码到飞控板上


输入
help可以查看命令:回车后,如果没有任何显示,按三下回车应该会有反馈。

NUTTX移植官方源码到飞控板上

1、下载官方NUTTX系统源码:

git clone https://bitbucket.org/nuttx/nuttx

git clone https://bitbucket.org/nuttx/apps

git clone  https://bitbucket.org/nuttx/tools

 

2、根据系统硬件找到类似配置文件:

我们飞控板采用STM32F407VG作为主控芯片,在nuttx/configs/stm32f4discovery目录下的配置和我们系统硬件很接近,所以可以利用stm32f4discovery的配置稍作修改适应飞控板。

 

3、修改系统时钟:

stm32f4discovery板载8MHz系统晶振,而我使用板子是24MHz系统晶振,所以需要修改系统时钟配置(此部分可以参考PX4系统的nuttx-configs/px4fmu-v2/include/board.h的配置),在configs/stm32f4discovery/include/board.h修改如下:

根据飞控板硬件修改时钟配置:

//#define STM32_BOARD_XTAL        8000000ul

#define STM32_BOARD_XTAL        24000000ul

 

//#define STM32_PLLCFG_PLLM       RCC_PLLCFG_PLLM(8)

#define STM32_PLLCFG_PLLM       RCC_PLLCFG_PLLM(24)

 

根据飞控板硬件修改串口配置:

#if 0

// UART2:

// The STM32F4 Discovery has no on-board serial devices, but the console is

// brought out to PA2 (TX) and PA3 (RX) for connection to an external serial

// device. (See the README.txt file for other options)

//

// These pins selections, however, conflict with pin usage on the STM32F4DIS-BB.

 

#ifndef CONFIG_STM32F4DISBB

#  define GPIO_USART2_RX GPIO_USART2_RX_1

#  define GPIO_USART2_TX GPIO_USART2_TX_1

#endif

 

// UART3: (Used in pseudoterm configuration)

 

#define GPIO_USART3_TX GPIO_USART3_TX_1

#define GPIO_USART3_RX GPIO_USART3_RX_1

 

// UART6:

// The STM32F4DIS-BB base board provides RS-232 drivers and a DB9 connector

// for USART6.  This is the preferred serial console for use with the STM32F4DIS-BB.

 

#define GPIO_USART6_RX GPIO_USART6_RX_1

#define GPIO_USART6_TX GPIO_USART6_TX_1

 

#else

 

// UARTs.

#define GPIO_USART1_RX GPIO_USART1_RX_2  // console in from IO

#define GPIO_USART1_TX GPIO_USART1_TX_2

 

#define GPIO_USART2_RX      GPIO_USART2_RX_2

#define GPIO_USART2_TX      GPIO_USART2_TX_2

#define GPIO_USART2_RTS    GPIO_USART2_RTS_2

#define GPIO_USART2_CTS    GPIO_USART2_CTS_2

 

#define GPIO_USART3_RX      GPIO_USART3_RX_3

#define GPIO_USART3_TX      GPIO_USART3_TX_3

#define GPIO_USART3_RTS    GPIO_USART3_RTS_2

#define GPIO_USART3_CTS    GPIO_USART3_CTS_2

 

#define GPIO_UART4_RX        GPIO_UART4_RX_1

#define GPIO_UART4_TX        GPIO_UART4_TX_1

 

#define GPIO_USART6_RX      GPIO_USART6_RX_1

#define GPIO_USART6_TX      GPIO_USART6_TX_1

 

#define GPIO_UART7_RX        GPIO_UART7_RX_1

#define GPIO_UART7_TX        GPIO_UART7_TX_1

 

// UART8 has no alternate pin config

 

// UART RX DMA configurations

 

#define DMAMAP_USART1_RX DMAMAP_USART1_RX_2

#define DMAMAP_USART6_RX DMAMAP_USART6_RX_2

 

#endif

 

4、配置NUTTX系统(详细的工具配置及编译可以参考博文“NuttX移植到STM32F4Discovery”):

清除之前的系统配置:   

    进入NUTTX源码根目录

    sudo make distclean

 

重新配置系统:

cd tools/

USB调试:

./configure.sh ../configs/stm32f4discovery/usbnsh/

  串口调试:

./configure.sh ../configs/stm32f4discovery/nsh

 

5、配置运行环境

cd ../                 //回到nuttx源码根目录

sudo make menuconfig

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上


NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

NUTTX移植官方源码到飞控板上

 

6、编译:

NUTTX源码根目录下:

    sudo make

编译成功,生成 nuttx.bin 和 nuttx.hex。

 

7、使用st-link 烧写nuxtt.bin

stlink连接电脑和板子,执行:st-util指令,如果正常会显示:

NUTTX移植官方源码到飞控板上

8、下载: 

    st-flash write nuttx.bin 0x8000000

NUTTX移植官方源码到飞控板上


 9、调试:

下载完成后,断电重启板子,用USB线将板子与电脑连接上就可以与电脑通信了,通过USB与电脑通信,此时板子会被电脑识别成ttyACM*设备(通常ttyACM0stlinkttyACM1才是通信口)。这里使用screen命令连接nsh(nuttxshell)

    ls /dev/ttyA*

    sudo screen /dev/ttyACM0

 NUTTX移植官方源码到飞控板上


输入
help可以查看命令:回车后,如果没有任何显示,按三下回车应该会有反馈。

NUTTX移植官方源码到飞控板上

### PX4 移植教程和指南 #### 选择合适的硬件平台 为了成功移植PX4固件至自制NuttX操作系统飞控,需找到使用相同或型号相似CPU类型的现有目标,并复制其配置文件夹结构。这些文件包括但不限于`firmware.prototype`, `default.px4board`, `bootloader.px4board`, `nuttx-config/bootloader/defconfig`, `nuttx-config/nsh/defconfig`, `nuttx-config/include/board.h`, `nuttx-config/include/board_dma_map.h`, `nuttx-config/scripts/bootloader_script.ld`, 和 `script.ld` 文件以及 `src` 和 `extras` 文件夹[^1]。 #### 配置环境准备 对于Raspberry Pi上的PX4 Firmware移植案例显示,该过程不仅限于特定设备;任何具有适当处理能力和接口的单片机或SBC理论上都能成为飞行控制器的一部分。这意味着开发者能够充分利用所选平台的独特优势来增强最终产品的性能与功能特性[^2]。 #### 修改驱动程序和支持库 编写驱动可能涉及大量专业知识和技术细节的理解。如果遇到困难不知道如何着手修改,则建议先深入研究已有的实现方式及其背后的原理。此外,在某些情况下可以通过屏蔽PX4底层依赖项完成部分移植工作,比如针对消息传递机制的部分,只需调整模中的定义即可影响生成`.h`和`.cpp`文件的内容变化[^3]。 #### 编译与烧录引导加载程序(BootLoader) 一旦所有必要的更改都已经实施完毕,下一步就是编译新的BootLoader版本并将它安全地刷入到您的自定义飞控中去。这一环节至关重要因为它决定了后续操作系统的启动流程能否顺利执行。 ```bash make px4_fmu-v5_default upload ``` 上述命令用于指定构建适用于FMU v5架构的目标镜像并通过连接线缆上传至目标设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值