STM32
直播中

刘慧

7年用户 1541经验值
私信 关注
[问答]

stm32h7想把sarm1作为运行内存,但上电会进入hard fault是哪里的问题?

因项目需要,想把sarm1(0x30000000-0x3000ffff)作为运行内存,但上电会进入hard fault, 请问有哪大哥这样设置是成功的

回帖(2)

刘桂珍

2024-4-17 09:43:16
仿真调试下,看看设置成功了没,flash、ram等。
从原理上讲,用那块RAM做运存没有区别
举报

张亮

2024-4-17 16:49:14
将SARM1作为运行内存需要进行一些配置,否则可能会导致Hard Fault。以下是一些可能的原因和解决方法:

1. 初始化问题:确保正确初始化SARM1区域。可以在启动文件中或代码中使用DCB (Data Configuration Block)或DCD (Data Configuration Data)对起始地址进行初始化。例如,使用汇编语言的 LDR 指令设置起始地址:

```
LDR R0, =0x30000000
LDR R1, =0x20000200
LDR R2, =0x20002000
```

2. 内存保护问题:如果您使用的是RTX操作系统,可能需要在配置文件中禁用内存保护。在CMSIS配置文件中,您可以找到以下内容:

```
// Enable Memory Protection
//#define OS_PRIVILEGES      16U
```

请将其注释掉:

```
// Enable Memory Protection
#define OS_PRIVILEGES      16U
```

3. 中断向量表问题:SARM1作为RAM区域可能也需要更新中断向量表。请确保VTOR(Vector Table Offset Register)设置为SARM1的起始地址。例如,使用如下代码设置VTOR寄存器:

```
SCB->VTOR = 0x30000000;
```

4. 外设问题:如果SARM1区域没有正确配置,可能会导致外设访问异常。确保外设的配置正确,特别是与内存访问相关的寄存器(如MPU)。

以上是可能导致Hard Fault的一些常见问题和解决方法。确保您的代码正确配置并初始化SARM1,同时处理好中断向量表和外设访问等问题,应该能够成功将SARM1作为运行内存。如果问题仍然存在,请检查硬件电路连接和相关器件的规格和要求。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分