
使用STM32H750VB编写用户引导程序【BOOT CODE】和应用程序【APP CODE】。根据数据手册描述,STM32H750有128K Bytes的片内flash,地址是从0x0800 0000~~0x0801 FFFF。将用户bootloader放在0x0800 0000~0x0800 2FFF,应用程序放在0x08003000~0x0801 FFFF。但当按照这样的存储分配设计时,发现总是没法实现从BOOT区到APP区的跳转。 基于这些信息,我们在想会不会是,比如中断矢量表定位问题,注意了之后发现,代码应该没有问题。我这边就这个问题找了块STM32H743的板做了验证测试。发现从BOOT区到APP区的跳转并没有异常,那么之前怎么又有问题呢? 再次思考之前信息的症结所在。我用的默认内部SRAM区为AXI SRAM,地址区间在0x24000000 --0x2407FFFF,即下面表格中的A区,而之后使用的默认内部SRAM区是DTCM SRAM,地址区间在0x20000000 -0x2001FFFF,即下面表格中的B区。 ![]() 难道是这个差别导致跳转的不同结果?当然,这两个SRAM区在使用上还是有差异的。 我尝试着将测试工程的默认SRAM区从TCM RAM也改成AXI SRAM进行测试。果真没法实现从BOOT区到APP区的跳转!看来跳转失败跟选择这个默认SRAM区有关系。也就是说当我默认使用DTCM RAM时跳转正常,如果默认使用AXI SRAM时会跳转失败。 ![]() 我们知道,STM32H7系列芯片支持D-CACHE/I-CACHE。具体到这里,如果使用AXI SRAM往往会用到D-CACHE。我们的工程代码里也的确开启了D-CACHE,如果是因为这个原因,如果在做跳转操作之前关闭D-CACHE应该就能实现正常跳转。 于是对代码稍加调整,实际上也就是加了句关闭D-CACHE的代码。【红色方框处】 ![]() 再次进行测试,此时即使使用AXI RAM做为默认内存空间,从用户BOOT区也能可靠跳转到APP区,完美实现。 这里涉及到STM32H7系列芯片内部不同存储区的访问特性和D-Cache相关知识,细节还是挺多的。有兴趣的话,可以自行查看相关技术手册做进一步的了解和探究。 |
【经验分享】STM32H7时钟
拷打cubemx【003】——找不到的芯片包
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明