最近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\HALDrivers\drv_flash | flash的配置文件 |
bsp\stm32\libraries\templates | 移植BSP的模板 |
bsp\stm32\stm32fxxx-xxx-xxx | 各开发板的适配工程 |
我觉得这就是我想要的,于是就开始移植重构后的BSP
复制一个与自己开发板系列相近的BSP
修改Scons脚本文件
修改驱动文件
规范BSP
先找一个和自己开发板MCU类似的BSP,例如我的开发板的MCU是stm32f767,所以我复制了这个目录下的工程
bsp\stm32\stm32f429-fire-challenger
修改名字为你的开发板名字,例如我的
bsp\stm32\stm32f767-fire-challenger
然后,在libraries目录下加入你使用的MCU系列的HAL库文件,比如我的f7系列就是
bsp\stm32\libraries\STM32F7xx_HAL
HAL库文件可以从STM32CubeFx中解压得到
然后参照着已经有的HAL库文件夹的情况,将一些使用不到的文件删除,特别是以下文件需要删除,否则会报错
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
在移植完成后,将
bsp\stm32\stm32f767-fire-challenger
复制到下面这个目录
bsp\stm32\libraries\templates
将名字更改为
bsp\stm32\libraries\templates\stm32f7xx
需要修改的脚本文件有点多,不过不急,慢慢来
可以从我提交的pr中看到我修改过的脚本文件,我将他们全部列出来,免得有人遗漏了需要修改的地方
bsp/stm32/libraries/HAL_Drivers/SConscript
bsp/stm32/libraries/HALDrivers/drvconfig.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
看着脚本文件很多,其实也不是太麻烦,只要参考已有的模板,该起来很容易的,那么接下来一个个来讲解吧
需要在这个文件中加入你的soc系列,按顺序排好,如图
同上,加入你的soc系列
同上,加入你的soc系列
这个文件可以从下面这个地址复制过来
bsp\stm32\libraries\STM32F4xx_HAL\SConscript
然后修改图中标记部分
这个文件可以从下面这个地址复制过来
bsp\stm32\stm32f429-fire-challenger\Kconfig
这个文件可以从下面这个地址复制过来
bsp\stm32\stm32f429-fire-challenger\SConscript
这个文件可以从下面这个地址复制过来
bsp\stm32\stm32f429-fire-challenger\SConstruct
这个文件可以从下面这个地址复制过来
bsp\stm32\stm32f429-fire-challenger\applications\SConscript
这个文件可以从下面这个地址复制过来
bsp\stm32\stm32f429-fire-challenger\board\Kconfig
不过需要修改图中标记部分
这个文件可以从下面这个地址复制过来
bsp\stm32\stm32f429-fire-challenger\board\SConscript
不过需要修改图中标记部分
这个文件可以从下面这个地址复制过来
bsp\stm32f7-disco\rtconfig.py
我是从旧版BSP中找的,你也可以找找你对应型号的旧版BSP中的这个脚本
这个文件可以从下面这个地址复制过来
bsp\stm32\libraries\templates\stm32f4xx\Kconfig
这个文件可以从下面这个地址复制过来
bsp\stm32\libraries\templates\stm32f4xx\SConscript
这个文件可以从下面这个地址复制过来
bsp\stm32\libraries\templates\stm32f4xx\SConstruct
这个文件可以从下面这个地址复制过来
bsp\stm32\libraries\templates\stm32f4xx\applications\SConscript
这个文件可以从下面这个地址复制过来
bsp\stm32\libraries\templates\stm32f4xx\board\Kconfig
不过需要修改图中标记部分
这个文件可以从下面这个地址复制过来
bsp\stm32\libraries\templates\stm32f4xx\board\SConscript
不过需要修改图中标记部分
这个文件可以从下面这个地址复制过来
bsp\stm32f7-disco\rtconfig.py
驱动文件分为:实现和配置
实现是下面这个目录下的.c文件
bsp\stm32\libraries\HAL_Drivers
配置是以下目录下的.h和部分.c文件
bsp\stm32\libraries\HAL_Drivers\config\fx bsp\stm32\libraries\HAL_Drivers\drv_flash bsp\stm32\stm32f767-fire-challenger\board\ports
我们需要做的事就是根据开发板实际情况进行修改
先确认config文件是否符合开发板实际情况,同一个系列的MCU的移植不需要修改config
bsp\stm32\libraries\HAL_Drivers\config\f7\uart_config.h
根据HAL库的情况修改以下文件
bsp\stm32\libraries\HAL_Drivers\drv_usart.c
例如f7系列,参照stm32f7xxhaluart.h,看看什么drv_usart.c中使用到的API是stm32f7xx_hal_uart.h中没有的,改为stm32f7xx_hal_uart.h有的接口,可以参考下面的方式
还要注意一些寄存器是某些系列的产品特有的,要用宏定义区分,例如
其他需要修改的地方都是差不多的,可以参考一下我的修改
在移植完驱动后,需要使用Cubemx启动外设,这部分请参考如何添加更多的片上资源选项
不过串口1默认是开启的
这部分请参考STM32 系列 BSP 制作规范
移植到此结束,欢迎尝试