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

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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值