您的位置:首页 > 其它

一则STM32f103莫名反复复位的经验记录

2017-06-14 14:36 281 查看
最近在调试STM32F103RBT6时,发现只要一打开AD就会反复复位,将断点设置到启动代码处,发现复位是非常有规律的,总是执行过断点后就又回到断点了。

找原理,查硬件,一切均没有问题。

最后怀疑到代码上来,因为AD采样是另外一个产品中正常使用移植过来的,分为三大部分:对AD涉及到的外设和存储等的初始化,对AD的采集与存储(主要是中断),对AD的数据进行计算分析。

将三大模块全部注释后再逐一开放,发现是对AD的初始化会导致复位。

对AD的初始化代码再全部注释后逐一开放,发现是启动定时器TIM4的代码会导致复位。

后来将与定时器有关的代码全部审查了一遍,也没有发现问题,同样的相似代码在TIM1上工作的很好。

查网上的相似问题,也没有改善这个结果。

这个问题弄了两天无结果,只能暂时搁置下来调试其它模块。

后来在调试其它函数的过程中,忽然想到原来的AD代码是用于103VET6的,移植到103RBT6上会不会是平台本身的特性导致的问题呢。仔细想了一下,AD中的C语言是平台无关的呀,那与平台有关的只有仿真器设置和启动文件了。

查看仿真器设置,均是103RBT6的正确设置,再查启动文件,哈,原来是把原来的startup_stm32f10x_hd.s错误地引用到这个工程中来了,感觉是因为启动文件中对各中断向量定义的不一致导致系统复位的,更换为正确的startup_stm32f10x_md.s文件后,再把原AD文件恢复为原版本,编译后启动调试过程,完美运行。

困扰了三天的问题解决了,怎一个爽字了得!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ARM STM32F103 反复 重启