ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STM32(M3)启动过程

2022-09-08 22:30:23  阅读:246  来源: 互联网

标签:NVIC 中断向量 启动 复位 32 STM32 地址 M3


启动时从绝对地址0x0800 0000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的。 

Cortex-M3内核规定中断向量表中第一个32位数据内容为栈顶地址第二个32位数据内容则是复位中断向量的入口地址

 

 

 这样CPU复位后会自动从中断向量表(第二个32位数据)中取出复位中断向量的入口地址,PC就跳转到中断服务程序。这也就是为什么调试的时候程序会直接跳到0x08000144(中断向量表中第二个32位数据为0x08000145),而不是停在0x08000000。

 

 

Cortex-M3的中断向量表的结构是固定的,而位置的地址是可变的。 

Cortex-M3的初始中断向量表有三个位置,通过BOOT引脚进行启动设置:

  1. BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。中断向量表定位于FLASH区,复位后PC=0x0800 0000.  
  2. BOOT1=0 BOOT0=1 从系统存储器启动(相当于厂家在存储器中固化了BOOTLOADER),这种模式启动的程序功能由厂家设置。 
  3. BOOT1=1 BOOT0=1从内置SRAM启动,这种模式可以用于调试。这种模式下,中断向量表位于SRAM区,起始地址为0x2000 0000.复位为PC=0x2000 0000.

当STM32复位完成后,可通过设置VECTOR_TABLE,将中断向量表放置在任何地方:

如若使用的是标准库,

可通过:NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);设置中断向量表放置在RAM起始地址;

可通过:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);设置中断向量表放置在FLASH起始地址;

说明:参数1:基地址;参数2:偏移地址

 

标签:NVIC,中断向量,启动,复位,32,STM32,地址,M3
来源: https://www.cnblogs.com/icaowu/p/16671068.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有