如何在STM32设备中调试意外重置?

iva*_*rec 12 embedded cortex-m3 stm32 interrupt-handling

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

我已经使用了一些其他的微控制器,我可以访问寄存器来查看复位的原因,但我似乎无法找到该器件的等效器件.我知道Cortex-M3的硬件异常,但我不知道其中一个是否被触发,因为当我进入这些处理程序时,我似乎无法通过usart发送文本(可能是因为我的TX功能使用中断?).

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

编辑

其中一个开发人员激活了WWDG监视器,它在我从故障处理程序获取信息之前重置了硬件.由于指向错误位置的指针调用函数,这是一个硬故障.但是,我会保留这个问题,希望有人能提供更多的细节(或关于它的材料),以便从保存的寄存器中指回C代码,比如硬故障(@dwelch的想法).

TJD*_*TJD 11

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

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

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