如何移植RT Thread的BSP

2021-09-03 01:33:01 字數 4347 閱讀 3171

最近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\stm32f***-***-***

各開發板的適配工程

我覺得這就是我想要的,於是就開始移植重構後的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中看到我修改過的指令碼檔案,我將他們全部列出來,免得有人遺漏了需要修改的地方

需要在這個檔案中加入你的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\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\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 製作規範

移植到此結束,歡迎嘗試

AWTK 在 RT Thread 上的移植筆記

本文以 stm32f103ze 為例,介紹了 awtk 在 rtos 上移植的經驗。與其說移植,倒不如說是整合。所做的事情不過是把 awtk 放到 rtos 的乙個執行緒中執行而已。awtk 已經移植到 stm32f103ze 裸系統上,為了簡單起見,直接在 awtk stm32f103ze raw...

RT Thread的訊息佇列

1.訊息佇列控制塊的組成 結構體 通過下圖可以很容易發現訊息佇列有8個元素.msg pool msg size max msgs entry msg queue head msg queue tail msg queue free和.parent,其中.msg pool為訊息佇列的起始位址 msg ...

RT Thread 執行緒的建立

基本概念 執行緒是實現任務的載體,它是rt thread中最基本的排程單位,它描述了乙個 任務執行的執行環境,也描述了這個任務所處的優先等級。rt thread中,執行緒由三部分組成 執行緒 入口函式 執行緒控制塊 執行緒堆疊 1 建立程序 1 建立靜態執行緒 rt err t rt thread ...