1 问题现象
- 最近想做一版应用定时器6的代码例程,但发现每次代码运行到“TIM_Cmd(TIM6, ENABLE);”,代码就跑飞了,一直卡在“Reset_Handler”。
- 开启定时器6的代码是从开发“IAP”功能的例程中移植出来的,“IAP”功能例程里有Boot程序和App程序两部分。
2 问题原因
-
突然想起来,在写“IAP”功能例程时,我修改了“中断向量表flash起始地址”!!!
-
在没有Boot这部分代码的情况下,如果不重新更改“中断向量表flash起始地址”,那么一旦开始使能定时器中断,必定会导致程序跑飞。
3 解决方法
-
在写“IAP”功能例程时,我在三个地方修改了App程序的起始地址,所以只要在“应用定时器6的代码例程”里以下三个地方将App代码运行起始地址改过来就可以了
-
1、system_stm32f10x.c里,VECT_TAB_OFFSET 改为 0x0000
-
2、Keil → 魔术棒 →“Target”里, IROM1 Start 改为 0x8000000
- 3、Keil → 魔术棒 →“Debug” →“Settings” →“Flash Download” →“Start” 改为 0x08000000,里
-
4 想说的话
授人以鱼,不如授人以渔
这里只提供钓鱼方法而不是一条完整的鱼
有问题欢迎留言交流 / 指正o( *  ̄▽ ̄ * )ブ