TLDR:
使用调试器读取 OCTOSPIM->PCR 寄存器的复位值失败。
文档:
RM0468 Rev 2 - 表 7. 寄存器边界地址
0x5200B400 - 0x5200B7FF - OCTOSPI1 控制寄存器 第 24.7 节:OCTOSPI 寄存器
CMSIS
STM32h730xx.c内容
- #define PERIPH_BASE (0x40000000UL) /*!< Base address of : AHB/APB Peripherals */
- #define D1_AHB1PERIPH_BASE (PERIPH_BASE + 0x12000000UL)
- #define OCTOSPIM_BASE (D1_AHB1PERIPH_BASE + 0xB400UL)
- #define OCTOSPIM ((OCTOSPIM_TypeDef *) OCTOSPIM_BASE)
- /**
- * @brief OCTO Serial Peripheral Interface IO Manager
- */
- typedef struct
- {
- __IO uint32_t CR; /*!< OCTOSPI IO Manager Control register, Address offset: 0x00 */
- __IO uint32_t PCR[3]; /*!< OCTOSPI IO Manager Port[1:3] Configuration register, Address offset: 0x04-0x20 */
- } OCTOSPIM_TypeDef;
连接调试器,在任何代码运行之前在 Reset_Handler 中停止 CPU,并检查该位置的内存,结果如下:


预期的默认值:
我无法在至少两个 CPU 上配置 OCTOSPIM 外围设备。
1)STM32H730VBH6
2)STM32H730VBT6
我有两种设计,一种使用 STM32H730VBH6,它使用 OCTOSPIM 数据线 0-3。OCTOSPIM 设备的默认配置允许它正常工作。
第二种设计使用 STM32H730VBT6,将 OCTOSPIM 数据线 4-7 用于闪存芯片,因此需要非默认配置。
我验证了两种设计的问题。任何写入或读取 OCTOSPIM 外围设备的尝试都不会影响这两种设计。构建了多个
PCB,所有硅都有相同的问题。
我*能够*使用调试器和其他代码读取其他非零复位值,例如 PWR 控制寄存器 1 的默认值。
问题:
1)基址是否正确?
2)硅坏了吗?
3)为什么在HAL代码中OCTOSPIM_TypeDef->PCR et的长度为3。当只有两个 PCR 寄存器时。
4)解决方案/解决方法是什么?
我检查了勘误表,但目前没有提到这个问题。