前言

最近RT-Thread重构了stm32的BSP,看了一下,感觉很思路很清晰

目录 简介
bsp\stm32\docs 重构BSP的介绍文档
bsp\stm32\libraries 各系列的stm32的HAL库
bsp\stm32\libraries\HAL_Drivers 基于HAL库的设备驱动
bsp\stm32\libraries\HAL_Drivers\config 外设驱动的配置文件
bsp\stm32\libraries\HAL_Drivers\drv_flash flash的配置文件
bsp\stm32\libraries\templates 移植BSP的模板
bsp\stm32\stm32fxxx-xxx-xxx 各开发板的适配工程

我觉得这就是我想要的,于是就开始移植重构后的BSP

移植流程

  • 复制一个与自己开发板系列相近的BSP
  • 修改Scons脚本文件
  • 修改驱动文件
  • 规范BSP

复制一个与自己开发板系列相近的BSP

先找一个和自己开发板MCU类似的BSP,例如我的开发板的MCU是stm32f767,所以我复制了这个目录下的工程

1
bsp\stm32\stm32f429-fire-challenger

修改名字为你的开发板名字,例如我的

1
bsp\stm32\stm32f767-fire-challenger

然后,在libraries目录下加入你使用的MCU系列的HAL库文件,比如我的f7系列就是

1
bsp\stm32\libraries\STM32F7xx_HAL

HAL库文件可以从STM32CubeFx中解压得到

然后参照着已经有的HAL库文件夹的情况,将一些使用不到的文件删除,特别是以下文件需要删除,否则会报错

1
2
3
4
bsp\stm32\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
bsp\stm32\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
bsp\stm32\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
bsp\stm32\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c

在移植完成后,将

1
bsp\stm32\stm32f767-fire-challenger

复制到下面这个目录

1
bsp\stm32\libraries\templates

将名字更改为

1
bsp\stm32\libraries\templates\stm32f7xx

修改Scons脚本文件

需要修改的脚本文件有点多,不过不急,慢慢来

可以从我提交的pr中看到我修改过的脚本文件,我将他们全部列出来,免得有人遗漏了需要修改的地方

  • bsp/stm32/libraries/HAL_Drivers/SConscript
  • bsp/stm32/libraries/HAL_Drivers/drv_config.h
  • bsp/stm32/libraries/Kconfig
  • bsp/stm32/libraries/STM32F7xx_HAL/SConscript
  • bsp/stm32/stm32f767-fire-challenger/Kconfig
  • bsp/stm32/stm32f767-fire-challenger/SConscript
  • bsp/stm32/stm32f767-fire-challenger/SConstruct
  • bsp/stm32/stm32f767-fire-challenger/applications/SConscript
  • bsp/stm32/stm32f767-fire-challenger/board/Kconfig
  • bsp/stm32/stm32f767-fire-challenger/board/SConscript
  • bsp/stm32/stm32f767-fire-challenger/rtconfig.py
  • bsp/stm32/libraries/templates/stm32f7xx/Kconfig
  • bsp/stm32/libraries/templates/stm32f7xx/SConscript
  • bsp/stm32/libraries/templates/stm32f7xx/SConstruct
  • bsp/stm32/libraries/templates/stm32f7xx/applications/SConscript
  • bsp/stm32/libraries/templates/stm32f7xx/board/Kconfig
  • bsp/stm32/libraries/templates/stm32f7xx/board/SConscript
  • bsp/stm32/libraries/templates/stm32f7xx/rtconfig.py

看着脚本文件很多,其实也不是太麻烦,只要参考已有的模板,该起来很容易的,那么接下来一个个来讲解吧

bsp/stm32/libraries/HAL_Drivers/SConscript

需要在这个文件中加入你的soc系列,按顺序排好,如图

bsp/stm32/libraries/HAL_Drivers/drv_config.h

同上,加入你的soc系列

bsp/stm32/libraries/Kconfig

同上,加入你的soc系列

bsp/stm32/libraries/STM32F7xx_HAL/SConscript

这个文件可以从下面这个地址复制过来

1
bsp\stm32\libraries\STM32F4xx_HAL\SConscript

然后修改图中标记部分

bsp/stm32/stm32f767-fire-challenger/Kconfig

这个文件可以从下面这个地址复制过来

1
bsp\stm32\stm32f429-fire-challenger\Kconfig

bsp/stm32/stm32f767-fire-challenger/SConscript

这个文件可以从下面这个地址复制过来

1
bsp\stm32\stm32f429-fire-challenger\SConscript

bsp/stm32/stm32f767-fire-challenger/SConstruct

这个文件可以从下面这个地址复制过来

1
bsp\stm32\stm32f429-fire-challenger\SConstruct

bsp/stm32/stm32f767-fire-challenger/applications/SConscript

这个文件可以从下面这个地址复制过来

1
bsp\stm32\stm32f429-fire-challenger\applications\SConscript

bsp/stm32/stm32f767-fire-challenger/board/Kconfig

这个文件可以从下面这个地址复制过来

1
bsp\stm32\stm32f429-fire-challenger\board\Kconfig

不过需要修改图中标记部分

bsp/stm32/stm32f767-fire-challenger/board/SConscript

这个文件可以从下面这个地址复制过来

1
bsp\stm32\stm32f429-fire-challenger\board\SConscript

不过需要修改图中标记部分

bsp/stm32/stm32f767-fire-challenger/rtconfig.py

这个文件可以从下面这个地址复制过来

1
bsp\stm32f7-disco\rtconfig.py

我是从旧版BSP中找的,你也可以找找你对应型号的旧版BSP中的这个脚本

之后这个templates中的脚本修改内容和前面基本一样的

bsp/stm32/libraries/templates/stm32f7xx/Kconfig

这个文件可以从下面这个地址复制过来

1
bsp\stm32\libraries\templates\stm32f4xx\Kconfig

bsp/stm32/libraries/templates/stm32f7xx/SConscript

这个文件可以从下面这个地址复制过来

1
bsp\stm32\libraries\templates\stm32f4xx\SConscript

bsp/stm32/libraries/templates/stm32f7xx/SConstruct

这个文件可以从下面这个地址复制过来

1
bsp\stm32\libraries\templates\stm32f4xx\SConstruct

bsp/stm32/libraries/templates/stm32f7xx/applications/SConscript

这个文件可以从下面这个地址复制过来

1
bsp\stm32\libraries\templates\stm32f4xx\applications\SConscript

bsp/stm32/libraries/templates/stm32f7xx/board/Kconfig

这个文件可以从下面这个地址复制过来

1
bsp\stm32\libraries\templates\stm32f4xx\board\Kconfig

不过需要修改图中标记部分

bsp/stm32/libraries/templates/stm32f7xx/board/SConscript

这个文件可以从下面这个地址复制过来

1
bsp\stm32\libraries\templates\stm32f4xx\board\SConscript

不过需要修改图中标记部分

bsp/stm32/libraries/templates/stm32f7xx/rtconfig.py

这个文件可以从下面这个地址复制过来

1
bsp\stm32f7-disco\rtconfig.py

修改驱动文件

驱动文件分为:实现配置

实现是下面这个目录下的.c文件

1
bsp\stm32\libraries\HAL_Drivers

配置是以下目录下的.h和部分.c文件

1
2
3
bsp\stm32\libraries\HAL_Drivers\config\fx
bsp\stm32\libraries\HAL_Drivers\drv_flash
bsp\stm32\stm32f767-fire-challenger\board\ports

我们需要做的事就是根据开发板实际情况进行修改

下面以移植uart为例子

先确认config文件是否符合开发板实际情况,同一个系列的MCU的移植不需要修改config

1
bsp\stm32\libraries\HAL_Drivers\config\f7\uart_config.h

根据HAL库的情况修改以下文件

1
bsp\stm32\libraries\HAL_Drivers\drv_usart.c

例如f7系列,参照stm32f7xx_hal_uart.h,看看什么drv_usart.c中使用到的API是stm32f7xx_hal_uart.h中没有的,改为stm32f7xx_hal_uart.h有的接口,可以参考下面的方式

还要注意一些寄存器是某些系列的产品特有的,要用宏定义区分,例如

其他需要修改的地方都是差不多的,可以参考一下我的修改

在移植完驱动后,需要使用Cubemx启动外设,这部分请参考如何添加更多的片上资源选项

不过串口1默认是开启的

规范BSP

这部分请参考STM32 系列 BSP 制作规范

移植到此结束,欢迎尝试