我有两个手臂皮质m3芯片:STM32F103VET6. STMF103C8T6和
当从内存启动时,STM32F103VET6.的STMF103C8T6 PC寄存器的初始状态是0x20000108;0x200001e0。
我无法在数据表中找到和提供有关这些地址的信息。为什么他们是这样引导的,我在哪里可以找到有关它的一些信息?
编辑:
来澄清。当芯片设置为从闪存启动时,PC寄存器指向复位处理程序的位置。此地址在地址0x0的重置向量表中提供。但是当芯片被设置为从内存引导时,PC指向常量地址,上面已经提到了。
编辑2:
STMF103C8T6反汇编:
20000000 <Vectors>:
20000000: 20005000 andcs r5, r0, r0
20000004: 2000010f andcs r0, r0, pc, lsl #2
20000008: 2000010d andcs r0, r0, sp, lsl #2
2000000c: 2000010d andcs r0, r0, sp, lsl #2
20000010: 2000010d andcs r0, r0, sp, lsl #2
20000014: 2000010d andcs r0, r0, sp, lsl #2
20000018: 2000010d andcs r0, r0, sp, lsl #2
...
20000108: f000 b801 b.w 2000010e <Reset_Handler>
2000010c <HardFault_Handler>:
2000010c: e7fe b.n 2000010c <HardFault_Handler>
2000010e <Reset_Handler>:
...STM32F103VET6反汇编:
20000000 <Vectors>:
20000000: 20005000 andcs r5, r0, r0
20000004: 200001e7 andcs r0, r0, r7, ror #3
20000008: 200001e5 andcs r0, r0, r5, ror #3
2000000c: 200001e5 andcs r0, r0, r5, ror #3
20000010: 200001e5 andcs r0, r0, r5, ror #3
20000014: 200001e5 andcs r0, r0, r5, ror #3
20000018: 200001e5 andcs r0, r0, r5, ror #3
...
200001e0: f000 b801 b.w 200001e6 <Reset_Handler>
200001e4 <HardFault_Handler>:
200001e4: e7fe b.n 200001e4 <HardFault_Handler>
200001e6 <Reset_Handler>:
...发布于 2018-06-23 21:56:00
我无法在数据表中找到和提供有关这些地址的信息。为什么他们是这样引导的,我在哪里可以找到有关它的一些信息?
据我所知,ST没有正式的文档提到这种行为,更不用说详细解释了。STM32F1家庭参考手册在第3.4节(“启动配置”)中含糊地指出:
由于其固定的内存映射,代码区域从地址0x0000(通过ICode/DCode总线访问)开始,而数据区域(SRAM)从地址0x2000 0000(通过系统总线访问)开始。Cortex-M3CPU总是在ICode总线上获取重置向量,这意味着引导空间只能在代码区域(通常是闪存)可用。STM32F10xxx微控制器实现了一种特殊的机制,既可以从SRAM启动,也可以从主闪存和系统内存启动。。
这些地址和值被引用的唯一位置是在它们的一些模板启动文件中--即使这样,也不是所有的。为ARM和IAR工具链提供的SPL启动文件缺乏对BootRAM的支持;此功能仅包含在GCC和TrueSTUDIO工具链的启动文件中。
不管怎么说。这是我对形势的最好分析。
当重置STM32F1部件时,从0x00000000开始的内存块将根据引导引脚的配置映射。当它被设置为从flash启动时,该块被别名为flash;当它被设置为从引导加载程序运行时,该块被别名为一个内部ROM块(大约或略低于0x1FFFFF1000)。但是,当它被设置为从RAM启动时,会发生一些非常奇怪的事情。
该内存块不是像您预期的那样将该内存块别名为SRAM,而是将其别名为一个很小的(16字节!)罗姆。在STM32F103C8 (中等密度)部分,此ROM的内容如下:
20005000 20000109 20000004 20000004此数据被解释为向量表:
ldr.w pc, [pc, #-480],它从内存中加载真正的复位向量并将其分支到其中。这个ROM的确切内容在各个部分之间略有不同。例如,F107 (连接线)具有ROM内容:
20005000 200001e1 20000004 20000004它有相同的初始SP,但是一个不同的初始PC。这是因为这个部分有一个更大的向量表,而中等密度地址将在它的向量表中。
使用的位置和值的完整列表是:
谢天谢地,这种行为似乎在很大程度上是F 103/5/7家族特有的。较新的部分使用不同的方法来控制引导,这些方法更加一致。
https://stackoverflow.com/questions/50977529
复制相似问题