我正在使用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数据寄存器并轮询字节完成.