最近遇到一个怪问题,同样的代码和板子,板子还是官方的DISCO,仿真器当然也是板载的,配置非常简单.
其实就只有一个简单的时钟设置,使用外部HSE倍频至工作频率.
我们用任何复位方式,在Keil和IAR中,进入调试后,全速运行至死循环,时钟配置都是正确的.
同一个工程,使用OpenOCD进行调试,并不编译,直接引用Keil生成的axf转elf来调试发现没有用HSE作为PLL时钟源.
但是如果这时候你只要复位再运行就可以了,猜测是OpenOCD复位指令没正确发送到STLINK,其他放真器没有问题,当然HAL库也有问题,解决方法也非常简单,在PLL配置后源不是HSE就复位.
LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE_DIV_1, LL_RCC_PLL_MUL_9);
if(LL_RCC_PLL_GetMainSource() != LL_RCC_PLLSOURCE_HSE)
{
NVIC_SystemReset();
}
LL_RCC_PLL_Enable();
这个在正常运行中不会触发,当然如果产品本身是故障的自然也死在里面了.