社区
单片机/工控
帖子详情
stm32启动执行问题?
zpehome
2012-09-21 10:04:01
stm32默认是从0x08000000地址开始执行,现在我想让它从0x08008000地址开始执行,该怎么配置?我用的是MDK软件,谢谢各位?
...全文
410
9
打赏
收藏
stm32启动执行问题?
stm32默认是从0x08000000地址开始执行,现在我想让它从0x08008000地址开始执行,该怎么配置?我用的是MDK软件,谢谢各位?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
前面加一条跳转
国外非常流行的步进电机
STM32
控制代码(加减速、精准定位脉冲、自由调速,绝对精典)
国外非常流行的步进电机
STM32
控制代码,S型加减速,
启动
加速和停止减速可以不同,完成满足各种不同需要,代码中可以随时获取电机已走脉冲(实际就是当前位置),类似PLC中的脉冲计数器,代码的
执行
效率比DMA方式的还高,基本不占用CPU资源,可以说是非常精典的资料!!
【正点原子
STM32
】
STM32
启动
过程浅析(MAP文件、
STM32
启动
过程、
启动
模式、Reset_Handler函数、__initial_sp堆栈的起始地址、堆栈)
一、MAP文件浅析二、
STM32
启动
过程三、总结参考资料:
STM32
MAP文件浅析.pdf、
STM32
启动
文件浅析.pdf、Cortex-M3权威指南(中文).pdf 路径:战舰 V4\资料\1,入门资料\
STM32
MAP文件浅析.pdf、
STM32
启动
文件浅析.pdf 战舰 V4\资料\8,
STM32
参考资料\Cortex-M3权威指南(中文).pdf MAP文件(Memory Map File)是编译器生成的连接地图文件,提供了有关程序在内存中的布局信息。MAP文件包含了代码、数据、堆栈等
STM32
启动
流程
STM32
启动
流程前言一、
STM32
的三种
启动
方式?二、
启动
流程图总结 前言 先阐述一个
问题
,嵌入式应用程序以C语言为主,因此main函数成为程序运行的起点,但是我们忽略了一个
问题
:MCU(微控制器/单片机)上电之后,是如何寻找并
执行
main函数的呢? 一、
STM32
的三种
启动
方式?
STM32
芯片自带的
启动
方式有3种,通过设置BOOT1、BOOT0的引脚的高低电平即可选择。 主闪存
启动
是将程序下载到内置的Flash进行
启动
(该flash可运行程序),该程序可以掉电保存,下次开机可自动
启动
。 系统存储
STM32
启动
设置
1、
启动
模式 在
STM32
F10xxx里,可以通过BOOT[1:0]引脚选择三种不同
启动
模式: 2、
启动
方式: 内部的Flash中
启动
存储器映射: 0x0000 0000 ——0x0800 0000 映射的内部Flash 3、
启动
文件 cl:互联型
stm32
f105/107系列 vl:超值型
stm32
f100系列 xl:超高密度型
stm32
f101/103系列 flash容量大小: ld:小容量,小于64KB md:中等容量,64KB/128KB hd:大容量,大于128KB 4
最详细
STM32
启动
流程
这三种
启动
模式为
STM32
芯片提供了灵活性和可靠性,使其适用于各种不同的应用场景。开发人员可以根据实际需求选择合适的
启动
模式来确保系统的正常运行和维护。
STM32
的
启动
流程比较简单,从这个流程可以学习通用的的ARM系统的
启动
模式。这段
启动
代码实现了
STM32
的
启动
流程,一、
STM32
三种
启动
方式。二、常规
启动
模式分析。
单片机/工控
27,382
社区成员
28,770
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章