stm32 中断向量表 NVIC_SetVectorTable() 应用
如果是普通的 flash 中只有一个程序,一般不需要设置这个。
顾名思义,这个表存放的是中断服务函数的入口地址,当发生中断时,
CPU来这个表中查询,以此获取中断函数的入口地址。
在stm32 的启动文件中,设置完成堆栈,就来设置 中断向量表,
![](http://m.amcfsurvey.com/editerupload/fetch/20161101/315500_1_0.jpg)
定义只读数据段,实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000)
如果改变了程序的起始地址,这种就是IAP的情况了,像这个样子
![](http://m.amcfsurvey.com/editerupload/fetch/20161101/315500_1_1.jpg)
那么这个时候就需要重新设置中断向量表
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00010000);//重新配置中断向量表
配合地址的改变,这样程序运行的时候才能找到中断服务函数的入口地址,正常执行。
附件:
对中断向量表更深入的解释
![](http://m.amcfsurvey.com/editerupload/fetch/20161101/315500_1_2.jpg)
显然,200039c0就是栈顶地址,而08006F21就是reset_handler地址!
stm32 小端模式,高字节在高位,低字节在低位,所以这个要反过来看。
评论