故障现象
今天开发STM32G431时遇到一个问题,板子打样回来后,焊接完成,可以烧程序,可以读FLASH,却死活不能运行,也不能进仿真调试。
故障定位
经过排查,发现将隔离芯片π121M31拆除,MCU可以进入正常工作状态,可以进仿真调试。所以确定故障与相关引脚有关。
原理图如下:
用到的引脚是PB8和PB9。
PB8是兼用于BOOT0,所以将PB8用一个100K的电阻下拉到地,这个方式以前用过没有问题。
CAN相关的电路如下:
这个电路以前也用过,也没有问题。
由此基本可以确定故障是由于BOOT0的电平变高,导致MCU进入了内部BOOTLOAD模式或SRAM模式,这个就没有深究了,可以确定的是没有运行FLASH的程序。
测量U9的4脚输出为高电平,由此确定故障原因,就是BOOT0脚在复位时处于高电平状态,导致MCU不能进入FLASH程序运行。
问题解决
尝试将PB8连接的下拉电阻改为10K,无效。
尝试U8的1脚断开,MCU可以正常工作。于是考虑将U8的供电改为缓启动方式。
电源缓启动是解决了,MCU还是不能正常工作。
原因也很简单,上电复位的RC电路时间常数和这个一模一样,这就导致缓启动没有产生效果。
于是再改电路,将电阻改为36K,电容改为20uF,时间常数从原先的0.1秒变为0.72秒,多出来的0.62秒就是实际的缓启动时间。
更改之后,电路正常工作,可以正常启动进调试,缓启动后,U8上的电压也能达到正常的3.3V。
需要注意的是,软件中需要增加一个延时,不然的话,在缓启动期间收发数据,就会造成数据丢失。
再次改进
按上图虽然可以正常启动,但是只能在上电时工作一次。在带电调试时,需要频繁的按复位键和进Debug,这时上面的电路就不能工作了。因为当按下复位键时,+3.3V电源依然存在,RC充电电路并没有一个放电的过程。继续改进如下:
按下复位键时,RESET被拉低到地,这时PQ3导通,将PC17放电,松开复位键后,RESET电压上升 ,PQ3逐渐截止,PC17和PR7就开始了重新充电的过程,这样+3.3_DELAY就会有一个低电平的持续时间,此时PC17和PR7的取值可以变小,时间常数可以按图取到0.1秒甚至更小。
其他类似的不启动问题,也可以参照这个解决方法。
CAN参数配置
顺便记录一下CAN的参数配置,主时钟频率160M,CAN波特率为1MHz