如何让stm32L151工作在使用LL库的情况下 ,运行在32M时钟

Stm32L151是用来做低功耗应用的,该芯片虽然也是M3的核,但是最大只能工作在32M(比f103的64M(HSI)和72M(HSE)相差巨大)

第一次使用Stm32CubeMX配置该芯片,在使用LL库的情况下 生成工程后竟然无法执行。

时钟树配置如下图

如何让stm32L151工作在使用LL库的情况下 ,运行在32M时钟_第1张图片

调试断点后,判断程序死在了这段代码位置

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有以下内容

如何让stm32L151工作在使用LL库的情况下 ,运行在32M时钟_第2张图片

 因此 ,在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



你可能感兴趣的:(STM32L1,STM32CubeMX)