打印
[STM32L4]

LSE晶振初始化失败

[复制链接]
5618|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HI各位我想请教下,我用cube自动产生的代码来初始化时钟,但是卡死在LSERDY上最终导致初始化失败,用示波器测试可以看到32768HZ的晶振已起振,想问下这个会是什么原因导致的。

部分初始化代码
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInit;

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
  RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSICalibrationValue = 0;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |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)
  {
    Error_Handler();
  }

  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1;
  PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSE;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  {
    Error_Handler();
  }

    /**Configure LSE Drive Capability
    */
  __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH);

    /**Configure the main internal regulator output voltage
    */
  if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  {
    Error_Handler();
  }

    /**Configure the Systick interrupt time
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

    /**Enable MSI Auto calibration
    */
  HAL_RCCEx_EnableMSIPLLMode();

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
沙发
whtwhtw| | 2017-3-16 16:56 | 只看该作者
是不是CUBEMX4.20的bug,我配置HSE时,会死在HSI初始化部分,很奇怪

使用特权

评论回复
板凳
whtwhtw| | 2017-3-16 16:57 | 只看该作者
我只能注释掉HSI初始化才可以

使用特权

评论回复
地板
mmbs| | 2017-3-16 21:16 | 只看该作者
whtwhtw 发表于 2017-3-16 16:56
是不是CUBEMX4.20的bug,我配置HSE时,会死在HSI初始化部分,很奇怪

初始化后,有什么问题

使用特权

评论回复
5
mmbs| | 2017-3-16 21:18 | 只看该作者
whtwhtw 发表于 2017-3-16 16:56
是不是CUBEMX4.20的bug,我配置HSE时,会死在HSI初始化部分,很奇怪

是不是外部晶振存在问题。

使用特权

评论回复
6
白菜爱吃白菜|  楼主 | 2017-3-20 15:58 | 只看该作者
whtwhtw 发表于 2017-3-16 16:56
是不是CUBEMX4.20的bug,我配置HSE时,会死在HSI初始化部分,很奇怪

不清楚,我直接操作寄存器 也是这个问题。晶振起振但是LSERDY无法置位

使用特权

评论回复
7
白菜爱吃白菜|  楼主 | 2017-3-23 15:25 | 只看该作者
没有人 遇到类似的问题吗?

使用特权

评论回复
8
ericw0ng| | 2017-3-23 16:49 | 只看该作者
LSE那个确实是bug,
cube生成的代码是:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI48
                              |RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

只要改成:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

就好了.


LSE的问题最好将RCC_CSR寄存器贴出来

使用特权

评论回复
9
huijiebian| | 2020-12-23 09:22 | 只看该作者
白菜爱吃白菜 发表于 2017-3-23 15:25
没有人 遇到类似的问题吗?

你好,请问你问题解决了吗?我这边也遇到同样问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

61

帖子

3

粉丝