Stm32L151是用来做低功耗应用的,该芯片虽然也是M3的核,但是最大只能工作在32M(比f103的64M(HSI)和72M(HSE)相差巨大)
第一次使用Stm32CubeMX配置该芯片,在使用LL库的情况下 生成工程后竟然无法执行。
时钟树配置如下图
调试断点后,判断程序死在了这段代码位置
void SystemClock_Config(void)
{
LL_FLASH_SetLatency(LL_FLASH_LATENCY_1);
if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_1)
{
Error_Handler();
}
....
}
在判断后,进入了Error_Handler()死循环。
在芯片的手册的Chapter3.9.1有以下内容
因此 ,在LL_FLASH_SetLatency(LL_FLASH_LATENCY_1)函数前加入LL_FLASH_Enable64bitAccess()
测试发现程序就能正常执行了
这处应该是stm32cubeMX的一个bug。
如果在LL_FLASH_Enable64bitAccess() 中把时钟树调低,低于24M,就会造成程序貌似能正常设置的假象。其实,这只是因为flash latency初始值是0,设置失效也依然是0的原因而已。
推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2