【STM32H7教程】第83章 STM32H7的內部Flash和QSPI Flash都執行程式的混合方式(強烈推薦)
完整教程下載地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980
第83章 STM32H7的內部Flash和QSPI Flash都執行程式的混合方式(強烈推薦)
本章節為大家講解內部Flash和外部QSPI Flash都執行程式的混合方式。
83.1 初學者重要提示
83.2 內部Fkash和QSPI Flash混合執行程式的優勢
83.3 下載演算法儲存存放位置
83.4 內部Flash和QSPI Flash混合執行程式說明
83.5 內部Flash和QSPI Flash程式除錯下載配置
83.6 實驗例程說明
83.7 總結
83.1 初學者重要提示
- QSPI Flash的相關知識點可以看第78章和79章。
- 操作本章配套例子前務必先將QSPI Flash的下載演算法放到MDK安裝目錄。
- 本章節與第28章的時間關鍵程式碼在ITCM執行的設定思路是一樣的,可以讓大家對本章節的方法有個更全面的認識。
83.2 內部Flash和QSPI Flash混合執行程式的優勢
現在大家使用H750或H743在外接QSPI Flash執行程式,都傾向於製作個BOOT,再製作一個執行在外接QSPI Flash的APP程式。即本教程第82章講解的內容。
本章要實現的這種方式對於我們想外接QSPI Flash執行程式,在除錯測試階段更加方便,甚至是專案使用,可以效能最大化。
83.3 下載演算法存放位置
編譯例子:V7-060_QSPI Flash的MDK下載算法制作,生成的演算法檔案位於此路徑下:
生成演算法檔案後,需要大家將其存到到MDK安裝目錄,有兩個位置可以存放,任選其一,推薦第2種:
- 第1種:存放到MDK的STM32H7軟包安裝目錄裡面:\Keil\STM32H7xx_DFP\2.6.0\CMSIS\Flash(軟包版本不同,數值2.6.0不同)。
- 第2種:MDK的安裝目錄 \ARM\Flash裡面。
83.4 內部Flash和QSPI Flash混合執行程式說明
混合程式的設定注意以下兩點即可。
83.4.1 初始化QSPI Flash並設定記憶體對映模式
在bsp.c檔案中初始在bsp.c檔案中初始QSPI Flash並設定為記憶體對映模式。注意,配置好時鐘後,優先初始化QSPI Flash並設定為記憶體對映模式:
/* ********************************************************************************************************* * 函 數 名: bsp_Init * 功能說明: 初始化所有的硬體裝置。該函式配置CPU暫存器和外設的暫存器並初始化一些全域性變數。只需要呼叫一次 * 形 參:無 * 返 回 值: 無 ********************************************************************************************************* */ void bsp_Init(void) { /* 配置MPU */ MPU_Config(); /* 使能L1 Cache */ CPU_CACHE_Enable(); /* STM32H7xx HAL 庫初始化,此時系統用的還是H7自帶的64MHz,HSI時鐘: - 呼叫函式HAL_InitTick,初始化滴答時鐘中斷1ms。 - 設定NVIV優先順序分組為4。 */ HAL_Init(); /* 配置系統時鐘到400MHz - 切換使用HSE。 - 此函式會更新全域性變數SystemCoreClock,並重新配置HAL_InitTick。 */ SystemClock_Config(); /* Event Recorder: - 可用於程式碼執行時間測量,MDK5.25及其以上版本才支援,IAR不支援。 - 預設不開啟,如果要使能此選項,務必看V7開發板使用者手冊第8章 */ #if Enable_EventRecorder == 1 /* 初始化EventRecorder並開啟 */ EventRecorderInitialize(EventRecordAll, 1U); EventRecorderStart(); #endif /* 針對不同的應用程式,新增需要的底層驅動模組初始化函式 */ bsp_InitQSPI_W25Q256(); /* 配置SPI匯流排 */ QSPI_MemoryMapped(); bsp_InitDWT(); /* 初始化DWT時鐘週期計數器 */ bsp_InitKey(); /* 按鍵初始化,要放在滴答定時器之前,因為按鈕檢測是通過滴答定時器掃描 */ bsp_InitTimer(); /* 初始化滴答定時器 */ bsp_InitUart(); /* 初始化串列埠 */ bsp_InitExtIO(); /* 初始化FMC匯流排74HC574擴充套件IO. 必須在 bsp_InitLed()前執行 */ bsp_InitLed(); /* 初始化LED */ bsp_InitExtSDRAM(); /* 初始化SDRAM */ bsp_InitI2C(); /* 初始化I2C匯流排 */ TOUCH_InitHard(); /* 初始化觸控晶片,LCD面板型號的檢查也在此函式,所以要在函式LCD_InitHard前呼叫 */ LCD_InitHard(); /* 初始化LCD */ }
83.4.2 設定執行在內部Flash和QSPI Flash的程式
由於我們要把QSPI Flash初始化並設定為記憶體對映模式後才可以使用QSPI Flash執行程式,所以要在QSPI Flash執行程式之前的所有操作都在內部Flash裡面實現,主要是滴答定時器,RCC,QSPI和HAL庫等相關配置。其它所有程式都可以在外部QSPI Flash執行:
83.5 內部Flash和QSPI Flash程式除錯下載配置
將下面兩個地方配置後,就可以像使用內部Flash一樣使用QSPI Flash進行除錯了。並且這種方式可以方便的除錯程式,內部Flash和外部Flash都做除錯。
83.5.1 下載配置
注意這裡一定要夠大,否則會提示演算法檔案無法載入:
我們這裡是將其加到DTCM中,即首地址為0x20000000,大家也可以儲存到任意其它RAM地址,只要空間還夠載入演算法檔案即可。推薦使用AXI SRAM(地址0x24000000),因為這塊RAM空間足夠大。
如果要下載程式到內部Flash和外部QSPI Flash裡面,需要做如下配置,兩個下載演算法都要新增進來:
83.5.2 除錯配置
注意這裡一定要夠大,否則會提示演算法檔案無法載入:
我們這裡是將其加到DTCM中,即首地址為0x20000000,大家也可以儲存到任意其它RAM地址,只要空間還夠載入演算法檔案即可。
如果要做除錯下載,需要做如下配置:
83.5.3 程式除錯效果
除錯效果如下:
83.6 實驗例程說明
本章節配套例子:V7-064_內部Flash和QSPI Flash都執行程式的混合方式,無需單獨製作BOOT和APP(強烈推薦)
編譯此程式彈出的警告不用管,可以選擇遮蔽此警告:
83.7 總結
本章節就為大家講解這麼,為了熟練掌握,大家可以嘗試自己實現一個內部Flash和外部Flash混合執行的程式。