
首先感谢STM32 FAE的支持,迅速有效,非常感谢!然后也非常感谢论坛里的大佬们的帮助回答! 我在这里就这两天调试STM32H750的bootloader和写片内flash的经历分享下自己遇到的问题与解决办法。+ s& h( W* C6 i6 Y: ]2 F" V一. bootloader地址设置和cache使能失能设置与成功跳转到app的关系 . {; [* ~$ T4 u% T: H 1. 首先说明下我bootloader和app部分的flash和SRAM的分配: 因为STM32H750的片内flash只有128K,地址是从0x0800 0000 ~ 0x0801 FFFF,我的bootloader大小有12k左右,所以我将bootloader存放到flash的前16k,即地址0x0800 0000 ~ 0x0800 5FFF,在SRAM里使用的起始地址0x2000 0000,大小0x20000;剩下的116K用于存放我的app程序,即地址0x0800 6000 ~ 0x0801 FFFF, 在SRAM里使用的起始地址0x2400 0000,大小0x80000。" s' i/ K5 l8 X4 g! j9 G0 }% g 然后贴上我bootloader工程中Target的设置: 6 x$ m" l0 P4 y6 R ![]() ![]() ![]() - Z6 A% Z. s) O- Q/ I( @+ w* i( X3 W8 [ 下面是app中Target的设置: ![]() ![]() ![]() 2. cache的设置与地址跳转; T0 C+ {4 C& l' c, _! T5 } 从上面几张target中的设置可以看到我app部分的RAM是使用的是AXI SRAM,bootloader使用的是TCM SRAM, 而在bootloader中一开始我是使能的D-Cache和I-Cache的,我在写完bootloader后无法跳转到自己的app程序去,检查了自己程序里面地址设置与app中中断向量表也作了对应修改,还是无法跳转过去后,向FAE求助,他们给的办法是在bootloader中,地址跳转前将D-Cache失能,即使用HAL库下的函数:SCB_DisableDCache()。添加此函数后能够成功向app跳转。2 `5 L' Y) U# p0 A" [ 所以之后有小伙伴涉及到相关问题希望这部分对你有帮助。$ `! G2 Q) u9 O 二. STM32H750片内flash操作% h8 t- Y. ~% N4 `) } 其实H7与之前的芯片在片内flash上不同的地方就是,写操作必须要按32bytes对齐。意思是即便你只想往里面写一个字节或者不到32个字节,但是flash依然会操作32个字节,只是其中只有一个字节或者你写进去的那么多个字节有效,而其他的字节被mcu自己操作填充,而要这样做就必须操作flash的force-write功能,按照我的经验的话,就是在写之前加一句FLASH->CR1 &= ~FLASH_CR_FW,然后再执行写操作,之后添加一句FLASH->CR1 |= FLASH_CR_FW,即: FLASH->CR1 &= ~FLASH_CR_FW; HAL_Flash_Program();* p) Z- f* i4 b" {# H6 `5 h FLASH->CR1 |= FLASH_CR_FW 这样才能保证不会出错(仅我个人调试结果是这样)。 所以如果是有连续的数据(大于32bytes),可以先存32bytes然后执行一次写操作,不必去操作force-write功能;如果只是想单独写几个字节可以向我说的这样操作。9 m+ u4 C J; s( u # ]) L! c% \2 A; V' L" y8 K 附加一点:因为我中间还有调试can通信,而HAL中CAN_TxHeader/CAN_RxHeader里面的DataLength是32bits的,而使用Classic CAN的话,发送和接收的真实数据帧长度最大只有8,会保存在DataLength的高16位,所以如果使用的是Classic CAN接收的话,获取帧长度的时候要将DataLength右移16bits,不然绝对出错。4 ~* s9 I% p5 {: W; T3 z& G. V$ G : l( ^, i4 c# | |
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法
【H745I GUI】1.GreenHouse 灯光控制
【Wio Lite AI视觉开发套件】+移植TensorFlow Lite
STM32H745I-DISCO脉冲宽度调制(PWM)
刚才看了一下 RM0433.pdf ,确实只有1个Sector .... 如果是这样的话,每次IAP 擦除的时候就会把BootLoader 也一并擦除 ....