现在是出现一个问题,如果我设置了外部HSE晶振,然后通过pll 倍频到24MHZ, 如果我用内部MSI 8Mhz也倍频到24Mhz,程序里面切换是切换不了,直接设置时钟哪里卡死,如果我单独24MHZ,两种都能正常运行,程序里面自由切换 切换不了
这是MSI的
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = 0;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_7;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
RCC_OscInitStruct.PLL.PLLM = 1;
RCC_OscInitStruct.PLL.PLLN = 12;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7; RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }
下面是HSE的
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 1;
RCC_OscInitStruct.PLL.PLLN = 12;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
用的是hal的库,上面程序都是软件stm32cubemx自动配置出来的。
之所以我想这样应用,是想低功耗100khz运行,目前来说msi来配置高频或者100khz,最终100khz运行的时候电流都可以达到手册上面说的30ua。
但是一旦我应用了HSE作为时钟源,100khz,最终最低是90ua左右,多了60ua左右,PLL和HSE我都设置关闭了。
__HAL_RCC_HSE_CONFIG(RCC_HSE_OFF);
__HAL_RCC_PLL_DISABLE();
所以最后的问题PLL配置这边的问题。没有找到方法。
|