STM32(M3)启动过程
2022/9/8 23:53:15
本文主要是介绍STM32(M3)启动过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
启动时从绝对地址0x0800 0000开始执行复位中断程序,即固定了复位后的起始地址,但中断向量表的位置是可变的。
Cortex-M3内核规定中断向量表中第一个32位数据内容为栈顶地址,第二个32位数据内容则是复位中断向量的入口地址。
这样CPU复位后会自动从中断向量表(第二个32位数据)中取出复位中断向量的入口地址,PC就跳转到中断服务程序。这也就是为什么调试的时候程序会直接跳到0x08000144(中断向量表中第二个32位数据为0x08000145),而不是停在0x08000000。
Cortex-M3的中断向量表的结构是固定的,而位置的地址是可变的。
Cortex-M3的初始中断向量表有三个位置,通过BOOT引脚进行启动设置:
- BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。中断向量表定位于FLASH区,复位后PC=0x0800 0000.
- BOOT1=0 BOOT0=1 从系统存储器启动(相当于厂家在存储器中固化了BOOTLOADER),这种模式启动的程序功能由厂家设置。
- 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:偏移地址
这篇关于STM32(M3)启动过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南