在不影响外设的情况下更改STM32上的时钟频率?

时间:2018-05-03 16:05:12

标签: arm stm32 firmware

我对STM32L486时钟管理有点失落。

我想在运行时更改时钟频率。通常我希望大多数时间处于低功耗运行/睡眠模式,其余时间则处于全频率。

我知道如何使用PLL在80MHz处设置SysClk,或者使用MSI以1MHz设置SysClk。

然而问题是更改Sysclk会破坏大多数外围设备设置。例如,如果我改变时钟,USART就不再工作了。

这样做是否常见(在运行时更改频率)?

我需要使用的外设是:LPTIM(没问题,因为它们可以独立于SysClk计时),ADC,AES加速器,USART,TIM,SPI。

1 个答案:

答案 0 :(得分:1)

在STM32L4xx上它并不那么难,如果你看一下数据表中的“时钟树”图,许多与时钟有关的外设(USART,LPTIM,I2C,..)可以用除BUS时钟之外的其他时钟源驱动,也可以使用LSE或内部HSI。

虽然内部HSI不受晶体控制,但根据我的经验,对于UART而言,在更大的温度范围内也是如此,但您可以通过在运行期间将其频率与外部和更精确的时钟进行比较来调整此振荡器的频率,或者使用auto-buadrate detection。