前言

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

目錄 簡介

bspstm32docs 重構BSP的介紹文檔

bspstm32libraries 各系列的stm32的HAL庫

bspstm32librariesHAL_Drivers 基於HAL庫的設備驅動bspstm32librariesHAL_Driversconfig 外設驅動的配置文件bspstm32librariesHALDriversdrv_flash flash的配置文件

bspstm32libraries emplates 移植BSP的模板

bspstm32stm32fxxx-xxx-xxx 各開發板的適配工程

我覺得這就是我想要的,於是就開始移植重構後的BSP

移植流程

  • 複製一個與自己開發板系列相近的BSP
  • 修改Scons腳本文件
  • 修改驅動文件
  • 規範BSP

複製一個與自己開發板系列相近的BSP

先找一個和自己開發板MCU類似的BSP,例如我的開發板的MCU是stm32f767,所以我複製了這個目錄下的工程

bspstm32stm32f429-fire-challenger

修改名字為你的開發板名字,例如我的

bspstm32stm32f767-fire-challenger

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

bspstm32librariesSTM32F7xx_HAL

HAL庫文件可以從STM32CubeFx中解壓得到

然後參照著已經有的HAL庫文件夾的情況,將一些使用不到的文件刪除,特別是以下文件需要刪除,否則會報錯

bspstm32librariesSTM32F7xx_HALSTM32F7xx_HAL_DriverSrcstm32f7xx_hal_msp_template.c
bspstm32librariesSTM32F7xx_HALSTM32F7xx_HAL_DriverSrcstm32f7xx_hal_timebase_rtc_alarm_template.c
bspstm32librariesSTM32F7xx_HALSTM32F7xx_HAL_DriverSrcstm32f7xx_hal_timebase_rtc_wakeup_template.c
bspstm32librariesSTM32F7xx_HALSTM32F7xx_HAL_DriverSrcstm32f7xx_hal_timebase_tim_template.c

在移植完成後,將

bspstm32stm32f767-fire-challenger

複製到下面這個目錄

bspstm32libraries emplates

將名字更改為

bspstm32libraries emplatesstm32f7xx

修改Scons腳本文件

需要修改的腳本文件有點多,不過不急,慢慢來

可以從我提交的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

看著腳本文件很多,其實也不是太麻煩,只要參考已有的模板,該起來很容易的,那麼接下來一個個來講解吧

bsp/stm32/libraries/HAL_Drivers/SConscript

需要在這個文件中加入你的soc系列,按順序排好,如圖

bsp/stm32/libraries/HALDrivers/drvconfig.h

同上,加入你的soc系列

bsp/stm32/libraries/Kconfig

同上,加入你的soc系列

bsp/stm32/libraries/STM32F7xx_HAL/SConscript

這個文件可以從下面這個地址複製過來

bspstm32librariesSTM32F4xx_HALSConscript

然後修改圖中標記部分

bsp/stm32/stm32f767-fire-challenger/Kconfig

這個文件可以從下面這個地址複製過來

bspstm32stm32f429-fire-challengerKconfig

bsp/stm32/stm32f767-fire-challenger/SConscript

這個文件可以從下面這個地址複製過來

bspstm32stm32f429-fire-challengerSConscript

bsp/stm32/stm32f767-fire-challenger/SConstruct

這個文件可以從下面這個地址複製過來

bspstm32stm32f429-fire-challengerSConstruct

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

這個文件可以從下面這個地址複製過來

bspstm32stm32f429-fire-challengerapplicationsSConscript

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

這個文件可以從下面這個地址複製過來

bspstm32stm32f429-fire-challengeroardKconfig

不過需要修改圖中標記部分

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

這個文件可以從下面這個地址複製過來

bspstm32stm32f429-fire-challengeroardSConscript

不過需要修改圖中標記部分

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

這個文件可以從下面這個地址複製過來

bspstm32f7-disco
tconfig.py

我是從舊版BSP中找的,你也可以找找你對應型號的舊版BSP中的這個腳本

之後這個templates中的腳本修改內容和前面基本一樣的

bsp/stm32/libraries/templates/stm32f7xx/Kconfig

這個文件可以從下面這個地址複製過來

bspstm32libraries emplatesstm32f4xxKconfig

bsp/stm32/libraries/templates/stm32f7xx/SConscript

這個文件可以從下面這個地址複製過來

bspstm32libraries emplatesstm32f4xxSConscript

bsp/stm32/libraries/templates/stm32f7xx/SConstruct

這個文件可以從下面這個地址複製過來

bspstm32libraries emplatesstm32f4xxSConstruct

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

這個文件可以從下面這個地址複製過來

bspstm32libraries emplatesstm32f4xxapplicationsSConscript

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

這個文件可以從下面這個地址複製過來

bspstm32libraries emplatesstm32f4xxoardKconfig

不過需要修改圖中標記部分

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

這個文件可以從下面這個地址複製過來

bspstm32libraries emplatesstm32f4xxoardSConscript

不過需要修改圖中標記部分

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

這個文件可以從下面這個地址複製過來

bspstm32f7-disco
tconfig.py

修改驅動文件

驅動文件分為:實現配置

實現是下面這個目錄下的.c文件

bspstm32librariesHAL_Drivers

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

bspstm32librariesHAL_Driversconfigfx
bspstm32librariesHAL_Driversdrv_flash
bspstm32stm32f767-fire-challengeroardports

我們需要做的事就是根據開發板實際情況進行修改

下面以移植uart為例子

先確認config文件是否符合開發板實際情況,同一個系列的MCU的移植不需要修改config

bspstm32librariesHAL_Driversconfigf7uart_config.h

根據HAL庫的情況修改以下文件

bspstm32librariesHAL_Driversdrv_usart.c

例如f7系列,參照stm32f7xxhaluart.h,看看什麼drv_usart.c中使用到的API是stm32f7xx_hal_uart.h中沒有的,改為stm32f7xx_hal_uart.h有的介面,可以參考下面的方式

還要注意一些寄存器是某些系列的產品特有的,要用宏定義區分,例如

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

在移植完驅動後,需要使用Cubemx啟動外設,這部分請參考如何添加更多的片上資源選項

不過串口1默認是開啟的

規範BSP

這部分請參考STM32 系列 BSP 製作規範

移植到此結束,歡迎嘗試


個人博客

公眾號:greedyhao


推薦閱讀:
相關文章