stm32启动执行问题?

zpehome 2012-09-21 10:04:01
stm32默认是从0x08000000地址开始执行,现在我想让它从0x08008000地址开始执行,该怎么配置?我用的是MDK软件,谢谢各位?
...全文
410 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpehome 2012-09-27
  • 打赏
  • 举报
回复
还是不用中断了,现在用查询可以解决问题,接下来在慢慢了解stm32中断向量表是怎么回事,谢谢各位的指点
youzi722 2012-09-25
  • 打赏
  • 举报
回复
我刚刚查了下STM32的资料,可以这样,如果这样,就不用复制异常向量表了,因为异常向量表就在0x80008000处
zpehome 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
STM32中断到来后,就会跳到中断向量表(其实应该是异常向量表,我这么叫习惯了)根据不同的异常取异常向量中存的地址,然后跳转到该地址去执行。

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

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

STM32还支持……
[/Quote]

谢谢你,回答的很详细,但我水平有限不是很懂。
你的意思是这样吗:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000)
youzi722 2012-09-25
  • 打赏
  • 举报
回复
STM32中断到来后,就会跳到中断向量表(其实应该是异常向量表,我这么叫习惯了)根据不同的异常取异常向量中存的地址,然后跳转到该地址去执行。

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

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

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

但是由于现在你的异常向量表实际在0x80008000处(就是汇编启动代码中的那个表),因此你需要将那个表拷贝到0地址区,这样0地址就是正确的异常向量表了,中断就能够正常产生了。
zpehome 2012-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
重新设置下中断向量表的位置
[/Quote]

我改了NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000),我在跳转之前用__set_FAULTMASK(1)关闭了总中断(如果不关压根就跳转不过去),跳转过去后我试着打开总中断__set_FAULTMASK(0),但是跳转过去后,程序不执行了!
ouen333 2012-09-24
  • 打赏
  • 举报
回复
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);
重新设置下中断向量表的位置
zpehome 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
不晓得你要用前面的空间干什么,二次启动么?

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

如果你还想支持调试的话,还得自己写个.ini文件,在Debug下的Initialization……
[/Quote]
谢谢你,其实我在做stm32L151的IAP功能,从主程序跳转到IAP程序对主程序进行升级,现在遇到的问题是,跳到IAP程序后不能响应中断了,不知道是哪里出了问题?我不太明白你最后一句话是什么意思?能解释下嘛?
youzi722 2012-09-21
  • 打赏
  • 举报
回复
不晓得你要用前面的空间干什么,二次启动么?

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

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

不过由于地址变成了0x08008000,你需要把中断向量表重新映射一下,将中断向量表映射到RAM里,然后还要改一下程序,把中断向量表拷贝到RAM里去。
1586874907 2012-09-21
  • 打赏
  • 举报
回复
前面加一条跳转

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧