Stm32 cortex-m3内存重新映射

时间:2014-05-21 16:18:05

标签: memory-management stm32 stm32l152

我现在正在研究stm32l152。

我的启动向量表位于flash 0x0800 0000,其中有一个有效的复位处理程序向量和堆栈指针。其余的异常/中断向量只是无限循环。 然后我在ram中设置另一个向量表,从0x2000 0000开始。该向量表将具有所有必要的向量。

我的问题是,在执行内存重映射以将0x0000 0000映射到0x2000 0000之后,当我的中断触发时,似乎mcu仍在寻找0x0800 0000中的向量。我通过将flash表中的相关向量更改为ram表中的相关向量来确认这一点。如果flash table related-vector指向无限循环,我的程序将无休止地循环。此外,我通过在0x0000 00000x0800 00000x2000 0000之间写入/回读一些内存位置来确认我的内存重新映射是正确的。

接下来,我使用另一种在mcu中更改VTOR的方法来将向量表偏移0x2000 0000。现在,它工作,并且mcu将在ram中找到向量。请注意,在此方法中,我没有进行任何上述内存重映射。

我的问题是:我可以使用内存重映射来重新定位我的向量表(不改变VTOR)吗?

内存重新映射有什么其他用途?

我可以写0x0000 0000(映射到0x0800 0000 flash)并在运行时修改flash吗?

1 个答案:

答案 0 :(得分:0)

您可能在第一次尝试中就做对了。但是,IDE提供的SystemInit()函数会静默设置VTOR = 0x8000000,因此,无论您的内存重新映射设置如何,都将使用闪存开头的表。