篇文章已经说了STM32的启动过程:
http://blog.csdn.NET/lanmanck/article/details/8252560
我们也知道怎么跳到main函数了,那么,中断发生后,又是怎么跑到中断入口地址的呢?
从stm32f10x.s可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向量表入口地址,例如:
AREA RESET, DATA, READONLY ; 定义只读数据段,实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000)
EXPORT __Vectors
IMPORT OS_CPU_SysTickHandler
IMPORT OS_CPU_PendSVHandler
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler
这个向量表的编写是有讲究的,跟硬件一一对应不能乱写的,CPU找入口地址就靠它了,bin文件开头就是他们的地址,参考手册RM0008的10.1.2节可以看到排列。
我们再结合CORTEX-M3的特性,他上电后根据boot引脚来决定PC位置,比如boot设置为flash启动,则启动后PC跳到0x08000000。此时CPU会先取2个地址,第一个是栈顶地址,第二个是复位异常地址,故有了上面的写法,这样就跳到reset_handler。
那么这个reset_handler的实际地址是多少.?下面的一堆例如Nmi_handler地址又是多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。
1、我们可以通过反向来得知这些入口地址,查看工程下的map文件就可以看到了,这个地址跟keil里面设置的target->flash起始地址息息相关,实际上我们不太需要关心,让编译器分配,中断向量表放的就是他们的地址。
2、对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。
3、进到C语言后会先配置NVIC,NVIC_SetVectorTable()里面可以配置中断向量表的起始地址和偏移,主要是告诉CPU该向量表是位于Flash还是Ram,偏移是多少。例如设置为位于Flash内,偏移就是烧入的程序地址,可在Keil target中设置。这样CPU就知道入口地址了。
4、发生中断后,CPU找到中断向量表地址,然后根据偏移(对号入座)再找到中断地址,这样就跳过去了。
我们截一个图说明一下,map文件:
对应的bin文件,看是不是放的上面地址:
显然,200039c0就是栈顶地址,而08006F21就是reset_handler地址!
如何定位?以放到0x20000000为例
1、keil设置ram起始为0x20000100,我们在0x20000000~0x20000100放中断向量表,其他给程序用
2、设置NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
3、跳到C时把中断向量表拷贝到0x20000000
上一篇:Linux环境开发STM32,从环境到调试
下一篇:STM32F0的IAP用户程序中断向量表的设置
推荐阅读最新更新时间:2024-11-17 10:25
设计资源 培训 开发板 精华推荐
- 2.13寸墨水屏网络时钟
- ADIsim ADC 如何为 ADC 建模
- LD2981ABM50TR 5 Vout超低压降稳压器典型应用
- LT3091IR 12V 至 ±3.3V 低噪声电源的典型应用
- LTC4061 和 LTC4062 专为单节锂离子电池充电而设计
- AD9467-FMC-250EBZ 16 位 250 MSPS FMC 评估套件
- 4080风扇转接
- EVAL-AD7416EBZ,评估板使用片内温度传感器评估 AD7416 10 位 ADC
- AM1D-0515DH30-RZ ±15V 1 瓦 DC-DC 转换器的典型应用
- 使用 Cypress Semiconductor 的 MB39A108 的参考设计
- 三星 Exynos 2600 芯片前景堪忧:良率挑战严峻,有被取消量产风险
- 苹果搁置反垄断报告的请求遭印度监管机构拒绝,案件将继续推进
- 2024年Automechanika Shanghai海量同期活动刷新历届记录,汇聚行业智慧,共谋未来发展
- 企业文化分享 如何培养稀缺的硅IP专业人员?SmartDV开启的个人成长与团队协作之旅
- 恩智浦发布首个超宽带无线电池管理系统解决方案
- 北交大本科生探秘泰克先进半导体开放实验室,亲历前沿高科技魅力
- 新帅上任:杜德森博士(Dr. Torsten Derr)将于2025年1月1日出任肖特集团首席执行官
- 边缘 AI 如何提升日常体验
- 苹果要首发!台积电宣布2nm已准备就绪
- AMD有望用上全新芯片堆叠技术:延迟大幅减少、性能显著提升