大家好!
我有新东西给你。我们有一块带有
STM32f446re 芯片的
PCB。出于稳定性原因,我们在上面放了一个 20Mhz 的外部时钟,但问题是,我们仍然在 16Mhz 上运行(用示波器上切换的 gpio 测量它。)脉冲应该长 500 毫秒,但结果是 625 毫秒。
现在,这里是系统时钟初始化函数,主要调用 FIRST:
void system_clock_config()
{
RCC_OscInitTypeDef rcc_osc_init {};
RCC_ClkInitTypeDef rcc_clk_init {};
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
rcc_osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSE;
rcc_osc_init.HSIState = RCC_HSI_OFF;
rcc_osc_init.HSEState = RCC_HSE_ON;
rcc_osc_init.PLL.PLLState = RCC_PLL_ON;
rcc_osc_init.PLL.PLLSource = RCC_PLLSOURCE_HSE;
rcc_osc_init.PLL.PLLM = 10;
rcc_osc_init.PLL.PLLN = 100;
rcc_osc_init.PLL.PLLP = RCC_PLLP_DIV2;
rcc_osc_init.PLL.PLLQ = 2;
rcc_osc_init.PLL.PLLR = 2;
如果 (HAL_RCC_OscConfig(&rcc_osc_init) != HAL_OK)
{
同时(真){}
}
rcc_clk_init.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
rcc_clk_init.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
rcc_clk_init.AHBCLKDivider = RCC_SYSCLK_DIV1;
rcc_clk_init.APB1CLKDivider = RCC_HCLK_DIV4;
rcc_clk_init.APB2CLKDivider = RCC_HCLK_DIV2;
如果 (HAL_RCC_ClockConfig(&rcc_clk_init, FLASH_LATENCY_3) != HAL_OK)
{
同时(真){}
}
}
我在 cubeMX clock_configura
tion 工具的帮助下创建了这些配置,它们都是针对 20Mhz HSE 振荡器输入计算的。
编辑:我们卸载了 20mhz 振荡器并且程序没有启动,所以我猜 HSE 正在工作,但仍然在 16Mhz 上。为什么会这样?