【STM32H7教程】第83章 STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐) 第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)

完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

本章节为大家讲解内部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下载算法制作,生成的算法文件位于此路径下:

【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐) 

生成算法文件后,需要大家将其存到到MDK安装目录,有两个位置可以存放,任选其一,推荐第2种:

  •   第1种:存放到MDK的STM32H7软包安装目录里面:KeilSTM32H7xx_DFP2.6.0CMSISFlash(软包版本不同,数值2.6.0不同)。
  •   第2种:MDK的安装目录 ARMFlash里面。

【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI 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执行:

 【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)

83.5 内部Flash和QSPI Flash程序调试下载配置

将下面两个地方配置后,就可以像使用内部Flash一样使用QSPI Flash进行调试了。并且这种方式可以方便的调试程序,内部Flash和外部Flash都做调试。

83.5.1 下载配置

注意这里一定要够大,否则会提示算法文件无法加载:

【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐) 

我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。推荐使用AXI SRAM(地址0x24000000),因为这块RAM空间足够大。

如果要下载程序到内部Flash和外部QSPI Flash里面,需要做如下配置,两个下载算法都要添加进来:

【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐) 

83.5.2 调试配置

注意这里一定要够大,否则会提示算法文件无法加载:

【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐) 

我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。

如果要做调试下载,需要做如下配置:

【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐) 

83.5.3 程序调试效果

调试效果如下:

 【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)

83.6 实验例程说明

本章节配套例子:V7-064_内部Flash和QSPI Flash都运行程序的混合方式,无需单独制作BOOT和APP(强烈推荐)

编译此程序弹出的警告不用管,可以选择屏蔽此警告:

 【STM32H7教程】第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)
第83章       STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)

83.7 总结

本章节就为大家讲解这么,为了熟练掌握,大家可以尝试自己实现一个内部Flash和外部Flash混合运行的程序。