一则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文件恢复为原版本,编译后启动调试过程,完美运行。
困扰了三天的问题解决了,怎一个爽字了得!
找原理,查硬件,一切均没有问题。
最后怀疑到代码上来,因为AD采样是另外一个产品中正常使用移植过来的,分为三大部分:对AD涉及到的外设和存储等的初始化,对AD的采集与存储(主要是中断),对AD的数据进行计算分析。
将三大模块全部注释后再逐一开放,发现是对AD的初始化会导致复位。
对AD的初始化代码再全部注释后逐一开放,发现是启动定时器TIM4的代码会导致复位。
后来将与定时器有关的代码全部审查了一遍,也没有发现问题,同样的相似代码在TIM1上工作的很好。
查网上的相似问题,也没有改善这个结果。
这个问题弄了两天无结果,只能暂时搁置下来调试其它模块。
后来在调试其它函数的过程中,忽然想到原来的AD代码是用于103VET6的,移植到103RBT6上会不会是平台本身的特性导致的问题呢。仔细想了一下,AD中的C语言是平台无关的呀,那与平台有关的只有仿真器设置和启动文件了。
查看仿真器设置,均是103RBT6的正确设置,再查启动文件,哈,原来是把原来的startup_stm32f10x_hd.s错误地引用到这个工程中来了,感觉是因为启动文件中对各中断向量定义的不一致导致系统复位的,更换为正确的startup_stm32f10x_md.s文件后,再把原AD文件恢复为原版本,编译后启动调试过程,完美运行。
困扰了三天的问题解决了,怎一个爽字了得!
相关文章推荐
- 记录开发Nodejs c++ addon的一些经验(一、技术栈)
- SSRS开发的经验记录
- windows7/win7 搭建phpvirtualbox 过程记录/经验分享
- mavros 使用经验记录
- 小项目经验记录---需求调研
- Enum 修复findbugs问题记录一则,List想表示不可变集合
- 经验记录薄
- 记录他人经验_01
- 透视表提取不反复记录(2)-每一个物品的全部分类
- 分享记录我的Linux系统入门学习经验
- 分享记录我的Linux系统入门学习经验
- RD管理经验记录
- 记录一则数据库连接故障ORA-12560,ORA-12518
- Oracle 10G数据库静默安装的实践过程记录及经验总结
- 解析xml文件的经验记录
- 莫名的一个mysql耗时记录
- [单片机经验] 【mk_欣驰】emWin移植笔记——STemWin5.22在STM32F103上的移植步骤(带触摸,无操作系统)
- 电脑故障处理经验一则
- 服务器运维 经验及问题记录