|
最开始出现的问题是:通过CubeIDE配置时钟树,外部无源晶振为25MHz,分频25,倍频432,再分频2,将SYSCLK配置为216MHz,写入一个简单的LED_IO测试程序,芯片直接变砖。后续无法重新写入,写入会报E31错误,并显示无法擦除Flash,只能通过按下硬件reset并执行.\STM32_Programmer_CLI.exe -c port=SWD mode=UR freq=100 -e all命令擦除。 变砖的症状,在空片写入程序后,虽然写入成功但是会提示无法读取寄存器并且程序未成功运行:
后续尝试复写则提示无法初始化STlink:
使用STM32_Programmer_CLI.exe进行全片擦除:
只有按住硬件reset并执行全片擦除才能解除变砖状态。 后续尝试较低频率,25MHz,HSE配置SYSCLK在180MHz,在该频率下,虽然依然无法运行代码,但是可以重新写入与debug,于是通过debug发现,其运行到SystemClock_Config();函数的if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK)语句会稳定进入void HardFault_Handler(void);根本无法配置时钟。 一路降频到108MHz±2MHz(120MHz都不行),程序可以稳定运行。 于是我先将SYSCLK妥协的运行在108MHz上,但是试图通过调整分频系数,让APB1与APB2上的时钟可以跑满,但是依然运行不稳定,偶尔可以,但是一般会在数秒内内停止运行进入HardFault_Handler(void)。 后续考虑时PCB中晶振不起振,两驱晶振波形如下:
虽然峰峰值略微偏小,但是频率正常,为防止是由于外部晶振峰峰值偏小导致的硬件错误。在RCC中关闭HSE直接采用HSI,通过16分频,432倍频,2分频得到216MHz,刚开始可以IO测试程序可以运行,但是后续我配置了一个定时器上的PWM输出,程序直接不稳定,偶尔可以输出PWM波形,但是无法稳定,在数十秒内会随机进入HardFault_Handler(void)。 PCB与原理如图:
供电使用LDO,AMS1117_3.3,考虑过电源问题,后续直接采用外部可调直流电源直接供电,故障依旧。 |
stm32f746g-disco开发板的串口通讯连接方式
L6007u
touchgfx添加文字不能显示,直接死(HardFault_Handler)
stm32f767单片机上FMC可以只使用D[15:8]而不使用D[7:0]吗?
请教下关于 stm32h7x5,7x7 系列双核 dsi ltdc 显示驱动的时钟频率配置 ?
stm32支持canfd和dma结合使用吗
stm32F723ZET6使用ADC捕获正弦波,adc采样频率过高导致主函数无法运行,要怎么优化?
STM32F723ZET6使用ADC捕获标准正弦波并通过USB主动上报,正弦波重新拟合后存在凹陷峰?
STM32F769是否可以部署边缘AI
STM32F723ZET6配置内部USB PHY的高速模式,初始化的时候usb init无法通过,要怎么修改配置呢?
微信公众号
手机版
重点检查供电,将每个供电脚都检查一遍,焊接牢靠,电压正确。
另外,就是那个VCAP脚一定使用合适的电容,接好焊好。
VDDA脚也不要漏掉检查了。
STM32F722RET6 的标称主频为 216 MHz,但出现“只能跑到 108 MHz,再往上就 HardFault/变砖”的现象,几乎不可能是芯片本身或 PCB 走线的问题,而是电源-电压-配置没对上。 F7 系列把主频和内核电压做了“绑点”:想跑 ≥180 MHz,必须把 VOS 位从“scale 3”(默认 1.2 V)改到“scale 1”(1.26 V 左右)。CubeMX 默认为了“通用兼容”往往只开到 scale 2(约 1.18 V),此时芯片规格书明确限制:
如果软件里不改 VOS 却直接把 PLL 倍到 216 MHz,一旦调用 HAL_RCC_ClockConfig(),内部硬件会拒绝切换并触发 HardFault,表现就是“只能跑到一半频率,再往上就死机”
因此排查/解决顺序:
前几天一个小伙伴就是因为电源纹波和电容没选好的,结果耗电大点就hardfault 了。
所以先保证硬件环境合适很重要。
[md]您好,谢谢您的回答。
但是我使用的代码由CubeIDE生成的,在检查代码时发现,IDE意见配置了第一等内核电压:
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
以及七个等待周期:HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7)。
我的电容滤波策略是每个电源引脚均配置了一个100nF的陶瓷电容。AMS1117电压稳定在3.35v以上,为减小电源导致进入错误,我在测试中直接拆除LDO,焊接导线连接外接直流电源,直流电源电压调整到3.4v,最大电流3A,故障依旧。
并且即使配置为第二等内核电压,理论最大主频也是180MHz,但是我的设备在大于110MHz(一般配置为108)就会频繁跳入硬件错误中断,在216MHz甚至直接变砖。
原文可能未解释变砖的症状,在空片写入程序后,虽然写入成功但是会提示无法读取寄存器并且程序未成功运行:
后续尝试复写则提示无法初始化STlink:
使用STM32_Programmer_CLI.exe进行全片擦除:
只有按住硬件reset并执行全片擦除才能解除变砖状态。
谢谢您的回答,为排除电源问题,我已经直接外接直流电源进行供电,但是故障依旧。不知道原因。