通過(guò) STM32CubeMX制作外部Flash的燒寫(xiě)驅(qū)動(dòng) (.stdlr)
前言
目前,越來(lái)越多的應(yīng)用需要擴(kuò)展外部的Flash來(lái)滿足存儲(chǔ)需求。那么,在調(diào)試及批量生產(chǎn)的過(guò)程中,需要對(duì)外擴(kuò)的Flash進(jìn)行燒錄操作。由于STM32 ST-LINK Utility以及STM32CubeProgrammer中,對(duì)Flash支持的型號(hào)有限,只能覆蓋一部分MCU和Flash的型號(hào),無(wú)法完全滿足客戶的需求。而且,它提供的external loader的制作模板存在覆蓋的芯片型號(hào)較少,且無(wú)法前期QSPI Flash調(diào)試的問(wèn)題。本文旨在提供一種通過(guò)stm32CubeMX制作external Flash loader的方法。客戶可以根據(jù)自己的型號(hào),進(jìn)行定制化的生成。本文中,以某客戶實(shí)際使用的MCU(STM32H750) 和Flash(S25LP128F) 為例進(jìn)行講解。
準(zhǔn)備工作
安裝STM32CubeIDE
安裝MCU對(duì)應(yīng)型號(hào)的HAL庫(kù)
External loader開(kāi)發(fā)
External Loader的開(kāi)發(fā)分成三個(gè)部分,第一部分是使用STM32CubeMX進(jìn)行工程的配置及生成。第二部分是外部Flash的驅(qū)動(dòng)調(diào)試,主要包含初始化,擦除,寫(xiě)入以及讀出等操作。第三部分調(diào)用驅(qū)動(dòng)函數(shù)進(jìn)行external loader的生成,包括外部Flash信息的定義,包括Flash容量的大小,page的大小,以及Sector相關(guān)的信息;第三步中external loader所需要的代碼及對(duì)應(yīng)器件的驅(qū)動(dòng),可以在下面的GitHub倉(cāng)庫(kù)中獲取,同時(shí)也歡迎大家將自己調(diào)試好的器件驅(qū)動(dòng)提交到該倉(cāng)庫(kù)。
地址:
https://github.com/WellinZHANG/External_Loader
使用STM32CubeMX生成工程
此處,我們使用STM32CubeIDE集成的STM32CubeMX進(jìn)行工程的配置和生成。
新建工程
選擇對(duì)應(yīng)的器件,填入工程名稱,并選擇存放位置:
管腳配置
按照硬件原理圖選擇好對(duì)應(yīng)的Flash管腳,此處選擇為Bank2,配置如下圖。注意調(diào)整管腳的速度為High,同時(shí)使能QSPI的中斷。FlashSize值設(shè)置為N,F(xiàn)lash的大小配置2N+1。
時(shí)鐘配置
根據(jù)板子上的時(shí)鐘源,進(jìn)行對(duì)應(yīng)的時(shí)鐘配置,此處采用內(nèi)部作為系統(tǒng)PLL的時(shí)鐘源。
生成工程
切換到Code Generator選項(xiàng)卡,勾選“Generate perioheral initialization as pair of ‘.c/.h’files per peripheral”選項(xiàng)。
調(diào)試QSPI驅(qū)動(dòng)
從開(kāi)篇提到的GitHub倉(cāng)庫(kù)中獲取相關(guān)的驅(qū)動(dòng)代碼。
第一步
將External-Loaders QSPI testing目錄mian_test.c中的代碼添加到工程中對(duì)應(yīng)的main.c文件中。
注意添加代碼時(shí)保留USER CODE BEGIN x和USER CODE END x標(biāo)簽,否則添加的代碼會(huì)在Cube MX重新生成代碼時(shí)被覆蓋掉。
第二步
將External-LoadersQSPI DriversIS25LP128F目錄下的QSPI的HAL驅(qū)動(dòng)文件替換工程中對(duì)應(yīng)的文件。
第三步
打開(kāi)CubeMX,重新生成工程。因?yàn)闉榱诉m配所有系列的QSPI接口,GitHub所提供QSPI的HAL驅(qū)動(dòng)中,沒(méi)有提供相應(yīng)的QSPI外設(shè)配置函數(shù),需要通過(guò)CubeMX來(lái)生成。
第四步
如上圖所示由于每個(gè)型號(hào)的FLASH的控制指令略有差別,所以在此步需要根據(jù)自己選用的QPSI FLASH器件進(jìn)行調(diào)整。同時(shí)需要進(jìn)行調(diào)試QSPI的讀寫(xiě)是否正常。如果QSPIF lash讀寫(xiě)不正常,那么在下圖中標(biāo)注的位置添加斷點(diǎn),就可以排查是哪一個(gè)環(huán)節(jié)出錯(cuò),進(jìn)一步對(duì)驅(qū)動(dòng)進(jìn)行調(diào)整。
修改配置生成QSPI Loader
完成QSPI的驅(qū)動(dòng)調(diào)試之后,我們需要添加生成external Loader所需要的代碼并修改對(duì)應(yīng)的配置。
第一步
添加對(duì)應(yīng)的代碼,存放在External-LoadersLoader_Files目錄下,由于H7和其他的系列的linker file有所區(qū)別,所以此處分為H7和others兩個(gè)文件夾進(jìn)行存放。我們此處選用H7目錄下的問(wèn)題件。將所有的文件添加到工程中。
第二步
修改Dev_Inf.c中的name為你想設(shè)置的名稱,一般設(shè)置為MCU+Flash名稱。
第三步
修改Linker的配置,通過(guò)“project”-> “Properties ”打開(kāi)設(shè)置頁(yè)。將紅框內(nèi)的ld文件修改為linker.ld.(已經(jīng)在第一步中添加到工程)。
第四步
修改配置,編譯后生成stdlr文件。通過(guò)“project”-> “Properties ”打開(kāi)設(shè)置頁(yè),在 “post build steps”處添加如下指令:
最后,編譯便可在工程目錄下生成對(duì)應(yīng)的stdlr文件。將其復(fù)制到STM32CubeProgrammer安裝目錄下的extral loader文件夾下,便可使用。
總結(jié)
通過(guò)該方法可以快速的生成一個(gè)外部燒寫(xiě)腳本對(duì)外部的QSPI FLASH進(jìn)行燒錄。
責(zé)任編輯:xj
原文標(biāo)題:工程師筆記 | 通過(guò) STM32CubeMX制作外部Flash的燒寫(xiě)驅(qū)動(dòng) (.stdlr)
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
FlaSh
+關(guān)注
關(guān)注
10文章
1644瀏覽量
148707 -
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1852瀏覽量
85665 -
STM32
+關(guān)注
關(guān)注
2272文章
10925瀏覽量
357669 -
燒寫(xiě)
+關(guān)注
關(guān)注
0文章
57瀏覽量
14372
原文標(biāo)題:工程師筆記 | 通過(guò) STM32CubeMX制作外部Flash的燒寫(xiě)驅(qū)動(dòng) (.stdlr)
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM32CubeMX的菜單介紹
![<b class='flag-5'>STM32CubeMX</b>的菜單介紹](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
評(píng)論