关于stm32的启动文件和中断原理学习

1
B:跳转到一个标号。这里跳转到一个‘.’,即表示无线循环
启动文件中的中断向量表:
2
3
4
等部分为贴出来的中断向量表。
我理解的中断的过程:我们们配置一个中断要通过NVIC控制器,我们向这个NVIC输入某个中断的的参数,其中包括中断号以及中断优先级等。然后NVIC等待中断标志位,假如我们配置TIM3的中断,我们输入中断号TIM3_IRQn是为了让NVIC知道我们要配置哪一个中断,然后为TIM3中断设置优先级等,然后NVIC检测到有TIM3中断时,PC就会强制跳出死循环,进入中断向量标的TIM3中断向量,然后进入TIM3中断函数。(发生中断后,CPU找到中断向量表地址,然后根据偏移(对号入座)再找到中断地址,这样就跳转过去。)
中断号:
5
我看启动文件时有个疑问,就是启动文件中的中断向量表中只放了一个标号,而没有转移的字样,(51这种单片机就需要转移到标号所在的位置)后来查百度是这样解释的
:“如果你使用的是ST的库的话,那么在汇编启动文件中已经定义好了。和大多数芯片不一样的是,stm32的中断向量表中存放的不是一条跳转指令,而是一个入口地址。假如说要自己编写的话,一定要用这样的方式:DCD XXXXX (其中XXXX就是中断服务函数的入口地址,至于转到这个函数由芯片自己处理)。中断向量表默认情况下起始于0x04,(0x00用于堆栈栈顶的地址).对于STM32来说,中断向量表的长度大概是60多还是80多字(记不太清了).每个字代表一个中断向量.假如使用的是官方库函数的话,那么所有的中断向量表都已经定义好了.比如,TIM1的中断他可能就定义了类似 DCD TIM1ISR 之类的语句那么我们在主函数中只要定义一个一个isr即可, 比如 定义一个void TIM1ISR()函数就行(必须与那么函数对应).然后设置下nvic和相关外设寄存器即可.中断的工作过程就是中断向量的映射过程.至于中断重映射是指把中断向量表移动到其它的位置上去.通常和分散加载一起使用,为了使程序在RAM中运行,自然也要把中断向量表放到RAM中,加快程序的运行速度.如果是新手,先别研究这么深的内容,就把中断向量表定死在flash的开头部分,默认地址即可. ”

猜你喜欢

转载自blog.csdn.net/weixin_42595206/article/details/103603238