[STM32F1] STM32F103C8 的栈指针错误。

[复制链接]
171|0
lilaiju 发表于 2025-11-1 20:07 | 显示全部楼层 |阅读模式

在 STM32CubeIDE 中为 STM32F103C8(64KB 闪存,20KB RAM)创建新项目时,生成的链接脚本包含以下内容:
/* Highest address of the user mode stack */
_estack = ORIGIN(RAM) + (LENGTH(RAM) / 2); /* end of "RAM" Ram type memory */

_Min_Heap_Size = 0x200; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */

/* Memories definition */
MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 20K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 64K
}

这将栈(_estack)放置在 0x20005000 = 0x20000000 + 20KB 的位置。通过调试器查看(_estack - 1)处的内存时,无法读取该地址。因此,STM32 在启动时立即进入硬 fault(硬中断)。
实际上,最后一个可读取的地址是 0x200027ff,这表明该地址实际上是以字(而非字节)为单位的:0x20000000 + 10KB = 0x20002800。
将该行修改为_estack = ORIGIN(RAM) + (LENGTH(RAM) / 2); /* end of "RAM" Ram type memory */
将栈放置在 0x20002800 位置就能解决这个问题。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

62

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部