嘿伙计们和女孩们!使用 SPL 将
STM32L152 上的系统时钟配置为 32MHz 时,我一直面临着一个问题。它以 24MHz 的频率平稳运行,但在以最大频率运行时总是卡住。
MCU 的最大时钟频率为 32MHz,使用 STM32CUBE IDE 和 HAL 配置时钟时运行良好。目的是以这种方式通过 PLL 从 HSI (16MHz) 运行它:
它拒绝在我基于 SPL 的代码中工作,尽管该过程似乎与 HAL 代码完全相似:
- void init32MHzClock() {
- RCC_DeInit();
- FLASH_SetLatency(FLASH_Latency_1);
- PWR_VoltageScalingConfig(PWR_VoltageScaling_Range1);
- RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK
- RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK
- RCC_PCLK1Config(RCC_HCLK_Div1); // PCLK1 = HCLK
- RCC_AdjustHSICalibrationValue(0x10U); // default HSI calibration trimming value
- RCC_HSICmd(ENABLE);
- while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) != SET);
- // PLL clock from 16 MHz HSI:
- RCC_PLLConfig(RCC_PLLSource_HSI, RCC_PLLMul_4, RCC_PLLDiv_2); // 16*4/2 = 32MHz
- // RCC_PLLConfig(RCC_PLLSource_HSI, RCC_PLLMul_6, RCC_PLLDiv_4); // 16*6/4 = 24MHz
- RCC_PLLCmd(ENABLE);
- while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) != SET);
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // select the PLL as clock source.
- while(RCC_GetSYSCLKSource() != 0x0C); // wait till PLL is used as system clock
- SystemCoreClock = 32000000;
- }
它永远不会超过第 23 行的最后一个 while。我在 google 上搜索的所有代码大多与其他 MCU(主要是 F103)相关,并且在体系结构中似乎没有什么不同。你们中的任何一个,请找出不同之处或缺失的部分并提出建议?干杯!