首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

stm32启动执行有关问题

2012-10-13 
stm32启动执行问题?stm32默认是从0x08000000地址开始执行,现在我想让它从0x08008000地址开始执行,该怎么配

stm32启动执行问题?
stm32默认是从0x08000000地址开始执行,现在我想让它从0x08008000地址开始执行,该怎么配置?我用的是MDK软件,谢谢各位?


[解决办法]
前面加一条跳转
[解决办法]
不晓得你要用前面的空间干什么,二次启动么?

将程序配置在0x08008000,可以在keil的工程选项的linker下勾掉Use Memory Layout form Target Dialog,然后把下面那个默认的scatter文件中的0x08000000改成0x08008000就OK了。

如果你还想支持调试的话,还得自己写个.ini文件,在Debug下的Initialization File下选上那个ini文件, 把PC指针指向0x08008000就好了。

不过由于地址变成了0x08008000,你需要把中断向量表重新映射一下,将中断向量表映射到RAM里,然后还要改一下程序,把中断向量表拷贝到RAM里去。
[解决办法]
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
重新设置下中断向量表的位置
[解决办法]
STM32中断到来后,就会跳到中断向量表(其实应该是异常向量表,我这么叫习惯了)根据不同的异常取异常向量中存的地址,然后跳转到该地址去执行。

普通的外部中断一般是IRQ异常或FIQ异常。

默认情况下,STM32的异常向量表位于0x80000000地址,现在由于0x80000000处放的是另外一个程序的异常向量表,所以你在0x80008000处的程序中断是不对的。

STM32还支持将异常向量表映射在RAM的0地址,就是为类似你这种应用提供的,但需要你设置一下,就如楼上所说,STM32再次产生中断时,就去0地址找了。

但是由于现在你的异常向量表实际在0x80008000处(就是汇编启动代码中的那个表),因此你需要将那个表拷贝到0地址区,这样0地址就是正确的异常向量表了,中断就能够正常产生了。

热点排行