前言

  • 最近购买了一块 STM32F407VET6开发板【魔女】,
  • 通过原理图了解到,开发板板载 CMSIS-DAP 调试下载口,例程部分大部分以裸机程序为主
  • 目标:打算移植适配到 RT-Thread

适配 RT-Thread

  • RT-Thread 支持 STM32F407 系列的 MCU,因此不同的 STM32F407 开发板,可以通过【拷贝】一个类似的 BSP,快速搭建开发环境
  • 本篇通过通过初步搭建 【魔女】STM32F407VET6开发板 RT-Thread BSP

整理RT-Thread工程目录

  • 如果通过 github 拉取 RT-Thread 最新的代码,发现包含大量的 BSP,也就是工程目录体积比较大,因此,可以基于 RT-Thread 最新代码,搭建一个【最小】的精简目录,只保留 STM32F407 依赖的代码工程
  • RT-Thread 内核代码(不含 BSP)
  • STM32F407 HAL 库(包括驱动库)
  • STM32F407 BSP,这里可以使用 rt-thread\bsp\stm32\stm32f407-st-discovery

(1)内核目录

  • 这里部分没有使用的目录与文件就不添加到工程里面了

STM32F407VET6开发板RT-Thread的移植适配_驱动开发

STM32F407VET6开发板RT-Thread的移植适配_RT-Thread_02

(2)libraries目录

  • rt-thread\bsp\stm32\libraries 下有多个STM32 MCU 系列的 HAL 库
  • 当前开发板使用:STM32F407VET6,因此只需要 STM32F4xx_HAL
  • rt-thread\bsp\stm32\libraries\HAL_Drivers 下面包含常用的设备驱动,因此也拷贝到工程中

STM32F407VET6开发板RT-Thread的移植适配_驱动开发_03

(3)bsp目录

  • 这里直接拷贝 rt-thread\bsp\stm32\stm32f407-st-discovery 即可,后面基于这个 bsp 做一些适配操作

STM32F407VET6开发板RT-Thread的移植适配_引脚_04

构建适配修改

  • 构建编译,需要根据目录的调整,修改一下配置
  • 当前的 IDE 使用 Keil MDK5,版本 5.36
  • RT-Thead ENV 工具: 2.0

调整 RT-Thread 目录配置

  • stm32f407-st-discovery/Kconfig : 修改 RTT_DIR := ../rt-thread
  • stm32f407-st-discovery/SConstruct : 修改 RTT_ROOT = os.path.normpath(os.getcwd() + '/../rt-thread')

STM32F407VET6开发板RT-Thread的移植适配_驱动开发_05

更新配置并编译

  • 通过 RT-Thread ENV 工具: menuconfig 打开图形配置,然后保存退出,更新 rtconfig.h 文件
  • 通过 RT-Thread ENV 工具:scons --target=mdk5 更新生成 Keil MDK5 的工程 project.uvprojx
  • 使用 Keil MDK5 打开 project.uvprojx,或者 双击 project.uvprojx 打开 工程
  • 全编译,发现编译通过

适配与修改

  • 更改 Keil MDK5 STM32 MCU 型号:STM32F407VET6
  • 后续可以进一步确认链接脚本的配置:Flash 与 RAM 大小是否合适: stm32f407\stm32f407-st-discovery\board\linker_scripts\link.sct

STM32F407VET6开发板RT-Thread的移植适配_stm32_06

  • 更改调试下载器为 : CMSIS-DAP

STM32F407VET6开发板RT-Thread的移植适配_开发板_07


STM32F407VET6开发板RT-Thread的移植适配_引脚_08

  • 点击 Keil MDK5 下载按钮,发现正常下载

更改 LED 引脚

  • 通过查看 【魔女】 STM32F407VET6 开发板, LED 红灯引脚为 PC5

STM32F407VET6开发板RT-Thread的移植适配_stm32_09

/* defined the LED_RED pin: PC5 */
#define LED_RED_PIN    GET_PIN(C, 5)

int main(void)
{
    /* set LED0 pin mode to output */
    rt_pin_mode(LED_RED_PIN, PIN_MODE_OUTPUT);

    while (1)
    {
        rt_pin_write(LED_RED_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED_RED_PIN, PIN_LOW);
        rt_thread_mdelay(500);
    }

    return RT_EOK;
}
  • 修改引脚后,再次编译并下载,发现 开发板 LED 红灯正常闪烁, RT-Thread 初步运行起来了

小结

  • 本篇记录 STM32F407VET6 开发板 RT-Thread BSP 的搭建过程,由于 RT-Thread 支持 STM32F407 系列的 BSP,因此通过拷贝 相似 平台 BSP,可以快速搭建工程
  • 接下来确认 RT-Thread MSH 串口驱动是否正常