通过设置MDK算法 和 启动地址,终于将程序成功下载到 外部nor flash中了,但是板子上电,运行,还是从内部flash 启动的那个程序,boot 依然是内部flash启动方式,因为没有从外部启动的方式了,在mdk 的调试脚本文件中编写了nor flash 配置信息 和PC 指针:
[mw_shl_code=c,true]FUNC void Setup(void) {
_WDWORD(0x40021014, 0x00000114); // FSMC clock enable
_WDWORD(0x40021018, 0x000001FD); // GPIOD~G clock enable
_WDWORD(0x40011400, 0x44BB44BB); // GPIOD config
_WDWORD(0x40011404, 0xBBBBBBBB); // GPIOD config
_WDWORD(0x40011800, 0xBBBBB444); // GPIOE config
_WDWORD(0x40011804, 0xBBBBBBBB); // GPIOE config
_WDWORD(0x40011C00, 0x44BBBBBB); // GPIOF config
_WDWORD(0x40011C04, 0xBBBB4444); // GPIOF config
_WDWORD(0x40012000, 0x44BBBBBB); // GPIOG config
_WDWORD(0x40012004, 0x444444B4); // GPIOG config
_WDWORD(0xA0000008, 0x00001011); // FSMC config
_WDWORD(0xA000000C, 0x10000100); // FSMC config
PC = 0x64000000;
}
Setup();[/mw_shl_code]
但是程序还是不会向外部 nor flash中启动,请问怎么才能启动呢?
看看我的 .map文件,大概的分布:
[mw_shl_code=c,true]==============================================================================
Memory Map of the image
Image Entry point : 0x64000131
Load Region LR_ROM1 (Base: 0x64000000, Size: 0x00001608, Max: 0x00100000, ABSOLUTE)
Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00005040, Max: 0x00010000, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x20000000 0x00000014 Data RW 25 .data system_stm32f10x.o
0x20000014 0x00000014 Data RW 193 .data stm32f10x_rcc.o
0x20000028 0x00000016 Data RW 256 .data main.o
0x2000003e 0x00000002 PAD
0x20000040 0x00005000 Zero RW 1 STACK startup_stm32f10x_hd.o
Execution Region ER_ROM1 (Base: 0x64000000, Size: 0x000015c8, Max: 0x00100000, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x64000000 0x00000130 Data RO 3 RESET startup_stm32f10x_hd.o
0x64000130 0x00000000 Code RO 345 * .ARM.Collect$$$$00000000 mc_w.l(entry.o)
0x64000130 0x00000004 Code RO 358 .ARM.Collect$$$$00000001 mc_w.l(entry2.o)
0x64000134 0x00000004 Code RO 361 .ARM.Collect$$$$00000004 mc_w.l(entry5.o)
0x64000138 0x00000000 Code RO 363 .ARM.Collect$$$$00000008 mc_w.l(entry7b.o)
0x64000138 0x00000008 Code RO 364 .ARM.Collect$$$$00000009 mc_w.l(entry8.o)
0x64000140 0x00000004 Code RO 359 .ARM.Collect$$$$00002712 mc_w.l(entry2.o)
0x64000144 0x00000020 Code RO 10 .emb_text core_cm3.o
0x64000164 0x00000024 Code RO 4 .text startup_stm32f10x_hd.o
0x64000188 0x00000244 Code RO 24 .text system_stm32f10x.o
0x640003cc 0x00000618 Code RO 180 .text stm32f10x_fsmc.o
0x640009e4 0x0000039c Code RO 192 .text stm32f10x_rcc.o
0x64000d80 0x00000358 Code RO 206 .text stm32f10x_gpio.o
0x640010d8 0x0000015c Code RO 254 .text main.o
0x64001234 0x0000001a Code RO 283 .text stm32f10x_it.o
0x6400124e 0x00000002 PAD
0x64001250 0x00000310 Code RO 333 .text fsmc_nor.o
0x64001560 0x00000024 Code RO 368 .text mc_w.l(init.o)
0x64001584 0x0000000e Code RO 372 i.__scatterload_copy mc_w.l(handlers.o)
0x64001592 0x00000002 Code RO 373 i.__scatterload_null mc_w.l(handlers.o)
0x64001594 0x0000000e Code RO 374 i.__scatterload_zeroinit mc_w.l(handlers.o)
0x640015a2 0x00000003 Data RO 255 .conststring main.o
0x640015a5 0x00000003 PAD
0x640015a8 0x00000020 Data RO 370 Region$$Table anon$$obj.o
==============================================================================
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
[mw_shl_code=c,true]
[/mw_shl_code]
|