STM32复位死机(无法启动)
嗯,不知道怎么说,stm32的看门狗死机了,下面是仿真时报错信息:
The processor has escalated a configurable-priority exception to HardFault.
An instruction executed with an invalid EPSR.T or EPSR.IT field (CFSR.INVSTATE).
Exception occured at PC = 0x0, LR = 0x0
现象是有时会死机有时又确实重启了;
跑的FreeRTOS,芯片是STM32F205ZE;看门狗代码配置如下:
static void MX_IWDG_Init(void)
{
/* USER CODE BEGIN IWDG_Init 0 */
/* USER CODE END IWDG_Init 0 */
/* USER CODE BEGIN IWDG_Init 1 */
/* USER CODE END IWDG_Init 1 */
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
hiwdg.Init.Reload = 4095;
if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN IWDG_Init 2 */
/* USER CODE END IWDG_Init 2 */
}
然后延长看门狗时间,就是把预分频改为IWDG_PRESCALER_32,看门狗不去重启,死机问题自然也不会发生了,,只是这个死机的原因任然不得而知@STM32官方
PS:有遇到这个问题的小伙伴吗?
后续1:
- 死机的原因不是看门狗,而是所有复位操作(包括看门狗复位和软复位)都会导致死机,具体原因也不清楚,猜测是在晶振和复位引脚这一块,可能是复位信号与晶振引脚之间没清理干净,复位的时候让晶振停振了。因为我就把板子的晶振引脚和复位引脚用镊子戳了戳就莫名奇妙的好了。。。
后续2
- 好景不长,过了两天又发现复位死机情况了,最烦这种时不时出现的问题,不好跟踪,外部晶振问题应该可以排除,因为我用尝试使用内部振荡器也一样复位死机;这次问题定位在单片机电源隔离的磁珠上,有看到相关的帖子说是这个的问题,然后在死机复位问题复现的时候,去掉磁珠直接焊锡短接,问题没有再出现了,但不能确定后面还会不会出现,,边调软件边看吧。。。
MCU电源部分原理图:
后续3
好吧,这次应该是找到问题的关键了,很傻的一个问题,再回去看现象应该是马上能看出问题所在才对;
马后炮一回:
我们先看下现象:
- 1.复位无法启动(之前说死机不太准确),这里的复位是指除了仿真复位外所有的,包括上电复位,软件复位,硬件复位,看门狗复位等等;
- 2.现象时有时无,有时候复位没问题;
- 3.间隔30s的复位(软件复位)实验没有发生问题;
- 4.复位无法启动后,后面一段时间内无论是重新上电,还是硬件复位,还是重新刷程序,都无法启动,但是,降温可以!
然后给出问题的答案:
BOOT引脚!!!
BOOT引脚的两个10K电阻焊接成了104电容!!!
再看前面自己找的解决方案真是。。不想说了,先让我一个人安静下。