微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

嵌入式 – 如何在STM32设备中调试意外的重置?

我正在使用STM32F107芯片在C中进行一些开发,并且在某些时候,当我调用特定功能时,器件开始重置.我没有调试器,我的调试只是一个串行端口的纯文本.

我使用了一些其他的微控制器,我可以在其中访问一个寄存器来查看重置的原因,但是我似乎找不到这个设备的等价物.我知道Cortex-M3的硬件例外,但是我不知道其中一个是否被触发,因为当我处于这些处理程序中时,似乎无法发送文本(也许是因为我的TX功能使用中断?).

所以,我决定询问比这个设备更多的经验的人:调试这些情况通常会做些什么?

编辑

其中一个开发人员激活了WWDG看门狗,并且正在重置硬件,然后才能从故障处理程序中获取我的信息.由于通过指向错误位置的指针调用函数,这是一个硬故障.但是,我将会保留这个问题,希望有人会提供更多的细节(或材料),以便从保存的寄存器中指出C代码,就是说硬故障(@dwelch想法).

解决方法

Cortex M3具有出色的故障处理功能,可以使您的生活更轻松.在发生故障时,它会自动堆叠多个寄存器,如PC和LR,故障状态寄存器会告诉您总线故障的地址等.

您应该实现一个好的故障处理程序(例如,硬故障处理程序在这里http://blog.frankvh.com/2011/12/07/cortex-m3-m4-hard-fault-handler/)打印堆栈寄存器和调试故障状态寄存器.

您应该使用UART进行打印,只需编写自己的简单的自定义版本的printf,以便您的故障处理程序使用,而不依赖于中断.直接将字节直接写入uart Tx数据寄存器并轮询字节完成.

原文地址:https://www.jb51.cc/java/121118.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐