【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 初學者重要提示

  1.   QSPI Flash的相關知識點可以看第78章和79章。
  2.   操作本章配套例子前務必先將QSPI Flash的下載算法放到MDK安裝目錄。
  3.   本章節與第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混合運行的程序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM