你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L011F4P6的LowPowerRun/MSI的配置问题

[复制链接]
lzyuu 提问时间:2018-2-28 11:46 /
MSI在配置成65.536K的频率后直接无法仿真,程序跑飞。
(MSI_RANGER_0或1)都不行,RANGER_2或以上就可以。

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSICalibrationValue = 0;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_0;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }//这配置不行

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSICalibrationValue = 0;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_2;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }//这就可以
收藏 评论5 发布时间:2018-2-28 11:46

举报

5个回答
maxtch 回答时间:2018-2-28 17:14:55
是真跑飞了,还是 SWD 断了?写一个闪灯程序,把 SWD 速度降下去(~5kHz)试试看。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

lzyuu 回答时间:2018-2-28 19:11:33
maxtch 发表于 2018-2-28 17:14
是真跑飞了,还是 SWD 断了?写一个闪灯程序,把 SWD 速度降下去(~5kHz)试试看。 ...

LED FLASH程序加了,没有反应,我后面调试直接用例程里面的PWR_LPR,
其中这一段
void SystemClock_Decrease(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  /* Enable Power Control clock */
  __HAL_RCC_PWR_CLK_ENABLE();

  /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency, to update the voltage scaling value
     regarding system frequency refer to product datasheet.
     Low power sleep mode can only be entered when VCORE is in range 2. */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
  
  /* Enable MSI Oscillator */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_5;
  RCC_OscInitStruct.MSICalibrationValue = 0x00;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
  {
    /* Initialization Error */
    while(1);
  }
  
  /* Select MSI as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0)!= HAL_OK)
  {
    /* Initialization Error */
    while(1);
  }
  
  /* Set MSI range to 0 */
  __HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_5);
  __HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_4);
  __HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_3);
  __HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_2);
  __HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_1);
  __HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_0);

}

在RANG1的时候就直接没有反应了,仿真器也退出了,

还有一个奇怪的现象就是
我用开发板STM32L011K4这个型号运行这个例程是没有问题的。

但是把这个程序放到STM32L011F4这个型号上面就不行了,硬件上也没什么差别。
maxtch 回答时间:2018-2-28 23:48:48
lzyuu 发表于 2018-2-28 19:11
LED FLASH程序加了,没有反应,我后面调试直接用例程里面的PWR_LPR,
其中这一段
void SystemClock_Decrea ...

先试试看不接仿真能不能闪灯。如果不可以那就要去挖掘 HAL 的源代码了。如果不接仿真可以闪灯那就是仿真断了,你需要把 SWD 速度进一步降下去。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

zzzzzx 回答时间:2018-7-25 10:08:28
我也遇到了这个问题,请问下楼主怎么解决的
butterflyspring 回答时间:2018-7-25 12:11:30
将SWD的max clock改一下,试过没?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版