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( *  ̄▽ ̄ * )ブ
本文讲述了作者在使用定时器6时遇到的问题,代码在启用定时器后卡在Reset_Handler。问题源于修改了中断向量表的起始地址。解决办法在于还原App程序起始地址设置。通过这个经历,作者强调了在移植代码时注意中断管理的重要性。
1200






