你这是把STM32当ARM9用呀,你可以看看ARM9,a8,a9的启动过程呀,你看看STM32有哪些功能么?就不要想这些,就算能那速度慢成渣了,本来主频就慢,还在外部执行,又浪费一些总线周期。之前我也想过,要在外部执行都是需要初始化外部存储器的,以模拟ARM9,A8,A9的启动过程,首先从STM32内部flash启动,里面写个Uboot,出初始化STM32的FMC或者FSMC接口上的norflash或者SRAM或者SDRAM,如果程序存在nandflash上,还要初始化nand,然后把nand拷贝到SDRAM或者norflash或者SRAM;然后uboot跳到拷贝程序的地方执行;STM32还要设置MPU,让总线可以访问到FMC或者FSMC的地址空间;这还是理论,更本没法实施,所有的地址控制都要自己手动操作,我想着都头痛了,而且自己又不对cortex-M3或者cortex-M4了解的很透彻,中间遇见的问题可想而知,你有足够的时间可以想想,但是那样还不如直接用cortexA系列,别人硬件就支持这些外部启动。。。
有一种方法(我自己验证过的):还是从片内flash启动,启动后将程序从外部SPI接口的flash(容量比较大,我用的是4M的片子)将程序拷贝到片外RAM,最后将代码重定位到片外的RAM上运行。
过程比较麻烦,而且需要有外部SPI接口的flash,和片外RAM,但好处也显而易见,那就是代码长度将不受片内flash的限制。