最近在使用cubeMX(version:6.11.1)的cubeusb,在USB初始化时会出现硬件异常。
如上图,报错的是没有对齐访问内存。
参考了 安富莱论坛的一篇帖子:
石锤内存访问不支持非对齐是否STM32H7的硬件bug - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
H7的TCM以外空间,如
AXI RAM(0x2400 0000),
SRAM1(0x3000 0000),
SRAM2(0x3002 0000),
SRAM3(0x3004 0000),
SRAM4(0x3800 0000),
SDRAM等做非对齐访问都会有硬件异常,而开启Cache就不会有问题。
其次是H7S7系列使用cubeMX+MDK(cubeIDE类似)的方法。
由于H7S7的内部(用户)flash只有64KB,如果多使用几个库(比如,usb库),那么内部flash肯定是不够的,因此,需要使用外部flash 。
既然要使用外部flash就会涉及到烧录算法了,当然,如果使用官方的板子的话,就可以使用官方提供的文件了。这里,我使用的是STM32H7S78-DK 开发板。
首先是RCC配置如下:
MPU配置如下(这里用的是 octal-spi 用的是 XSPI2 对应0x7000 0000):
Flash配置如下:
XSPI2配置如下:
EXTMEM_MANAGER配置如下:
(这里我的Memory2是psram 用的是XSPI1 的 hexa_spi)
注意:此处SBS一定要配置 不然使用 st官方的烧录算法会错误!
在生成文件时,要生成boot + application (extmemloader不生成是因为,我用了官方的flm文件,如果不用的话可以生成,在mdk里面编译一下 会生成一个 flm文件)
在进入MDK后,首先选中BOOT文件,并查看他的 sct文件
注意:这里有个bug ,打开sct后我蓝色框框的数字,目前版本的cubeMX第一次生成是0x0801 0000(因为蓝色框框这个数字代表flash区域大小)。如果不修改的 boot程序就会有问题,所以,要改成0x0001 0000。
一般boot 文件这边不需要修改,直接烧录就行。
然后选中application,也打开sct文件做好相应的分散加载配置。
最后,在烧录这边添加你的flm算法(我用的是st官方提供的)。