一、问题现象
无论生成MDK工程,还是Cubeide工程,连接ST-LINK调试,都会出现类似”Can not access memory“、程序运行到时钟配置处跑飞问题。断点执行到图1,继续允许就会出现图2的情况。
图1
图2
二、排查过程
确认过ST-LINK、工程DEBUG配置、板子晶振本身均无问题后,原因只剩下代码本身,起初有印象:在程序中配置过PLL分频,下次重新配置PLL分频之前,需要将时钟复位,于是在图3加入时钟复位代码,果然解决了调试器"Can not access"的现象,但高兴的太早,之后发现程序运行到了图4的Error_Handler(),说明这方法无效,而后面在用之前能跑的工程仿真成功后,可以确定是时钟配置的问题。
图3
三、最终定位问题
在与之前能跑的工程中,时钟配置逐行对比后,发现了端倪,CubeMX直接生成的工程中,缺少图4这行函数,加入后调试可以正常运行。
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/*新加入,不然程序会跑飞*/
图4
四、总结
问题原因在于自己刚刚接触H7系列芯片,CubeMX与HAL库也不太熟悉,所以本篇文章只是记录分享解决过程,对问题原因和为什么问题能解决,依然一头雾水