几篇文章彻底搞懂STM32的启动过程

 

1.知乎:嵌入式系统中的中断机制 https://zhuanlan.zhihu.com/p/196452953

   知乎:STM32的启动文件详解 https://zhuanlan.zhihu.com/p/98888285   

2.STM32BootLoad深入理解 https://www.jianshu.com/p/2eef44b1cfd3

3.第14章 启动文件详解

4.STM32/ARM Cortex-M3复位序列  https://blog.csdn.net/changyourmind/article/details/51902408

5.STM32之NVIC的深入详解

6.知乎:STM32编程:是时候深入理解栈了<一>  https://zhuanlan.zhihu.com/p/133874308

7.ARM Cortex-M系列之中断向量表_Yoshiawu的博客-程序员宅基地 https://www.cxyzjd.com/article/Yoshiawu/105408519

8.知乎 Cortex-M3 入门指南(四):中断向量表与内存初始化

9.STM32中断向量表的偏移量设置方法 https://www.pianshen.com/article/39531974929/

10.分析一个关于STM32 芯片异常复位的经典案例! https://zhuanlan.zhihu.com/p/65086983

11.stm32 bootloader跳转_qinrenzhi的博客-程序员宝宝 https://www.cxybb.com/article/qinrenzhi/82755709

有一篇文章介绍如下:

补充:我曾自己写过简单的启动文件测试,并没有去调用SystemInit函数,自己也没有在其他地方对向量表的基地址更改到0x08000000的地址中去,但是当CPU检查到有中断发生时,还是可以跳转到正确的中断服务函数的入口地址处。为什么会这样?我查阅了下相关的资料,了解到当STM32从Flash启动时,实际上会把Flash的那段存储空间0x08000000 ~ 0x0807FFFF映射到0x00000000 ~ 0x0007FFFF这一段地址的存储空间,也就是说当CPU从Flash启动时,CPU从0地址处开始执行指令和从0x08000000地址处开始执行指令是一样的。所以,这个时候我没有去更改异常向量表的基地址,CPU仍然可以跳转到正确的中断服务程序。

中断处理函数:

先清除中断了,来了其他中断,执行完毕还会继续执行中断,不会丢失。
先清除的,然后来了同一个中断,则在执行完该中断后再执行一次,中断不会丢失。
但是后清除的,如果来的是同一个中断,因为发生了中断结果标志被清除了,后来的中断就被丢失了。

原文地址:https://www.cnblogs.com/hitzzq/p/15150882.html