1.重启现象描述
STM32F767IGT6在烧写SylixOS成功后,重新上电会出现多次重启的现象,初次定位可能是看门狗或者是系统运行过程中内存溢出导致的重启。
2.重启问题查找
为了解决多次重启问题,查找STM32 M7的芯片手册中,得知STM32 M7有两种看门狗:
第一种:独立看门狗(IWDG),此独立看门狗外设可用于检测并解决由软件错误导致的故障,并在计数器达到给定的超时值时触发系统复位。
第二种:系统窗口看门狗(WWDG),系统窗口看门狗通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
查看两种看门狗的配置信息的得知在系统没有初始化的情况下,看门狗是默认关闭的(也可以通过器件选项位使能“硬件看门狗”功能,上电时将自动使能看门狗,在这里没有实现)。
通过st-link Utility工具读取板卡的寄存器的值也可以看出看门狗没有被开启。
如图 2-1 使能IWDG所示。
图 2-1 开启IWDG
读取IWDG_KR寄存器得知IWDG未开启,IWDG_KR寄存器地址为0x40003000, 如图 2-2 IWDG_KR的值所示。
图 2-2 IWDG_KR的值
如图 2-3 使能WWDG,图 2-4 WWDG_CR寄存器所示。
图 2-3 使能WWDG
图 2-4 WWDG_CR寄存器
读取WWDG_CR寄存器的WDGA得知WWDG未开启,WWDG_CR寄存器地址为0x40002c00,如图 2-5 WWDG_CR的值所示。
图 2-5 WWDG_CR的值
从芯片手册中得知,有以下5种情况时会发生系统复位:
1. NRST 引脚低电平(外部复位);
2. 窗口看门狗计数结束(WWDG 复位);
3. 独立看门狗计数结束(IWDG 复位);
4. 软件复位(SW 复位);
5. 低功耗管理复位 ;
如图 2-6 系统复位所示。
图 2-6 系统复位
软件可以通过查看RCC_CSR寄存器来确定是什么原因导致复位。如图 2-7 RCC_CSR寄存器所示。
图 2-7 RCC_CSR寄存器
位 31 LPWRRSTF: 低功耗复位标志 。
位 30 WWDGRSTF:窗口看门狗复位标志 (Window watchdog reset flag)
位 29 IWDGRSTF: 独立看门狗复位标志 (Independent watchdog reset flag)
位 28 SFTRSTF: 软件复位标志 (Software reset flag)
位 27 PORRSTF: POR/PDR 复位标志 (POR/PDR reset flag)
位 26 PINRSTF: 引脚复位标志 (PIN reset flag)
位 25 BORRSTF: BOR 复位标志 (BOR reset flag)
位 24 RMVF: 清除复位标志 (Remove reset flag)
读取RCC_CSR可得知系统复位原因,RCC_CSR寄存器的地址为0x40023874,如图 2-8 RCC_CSR寄存器的值所示。
图 2-8 RCC_CSR寄存器的值
从图 2-8中可知系统复位原因是引脚复位引起的。
3.重启问题的解决
咨询供应商得知,当上电时如果USB_232属于连接状态,则会引发多次引脚复位,此问题属于硬件问题,无法通过软件解决。解决方法不通过USB_232(USB转串口)作为串口。