对于芯片而言,电源和时钟是缺一不可的。
电源为芯片提供能量,时钟则提供时间基准,芯片好按照这个tick依次执行指令。
STM32F103是一款性价比很好的芯片,它的时钟树长这样:
它有4个时钟源,不同的时钟有不同的场景:
HSE高速外部时钟源,也就是频率来自芯片外
HSI高速内部时钟源
LSI低速内部时钟源
LSE低速外部时钟源,也就是频率来自芯片外
上图来自datasheet,猛一看有些地方还挺复杂,不容易入门。
看了百问网这方面的介绍,结合STM32CubeMX,理解起来简单多了。
来图来自 STM32CubeMX,其中绿色椭圆框表示时钟源,红色框表示时钟树常见的几个内部逻辑实现。
从上到下依次是时钟选择器,时钟分频器,时钟倍频器。
通过名字很容易理解其含义。
时钟用哪个?
时钟是否太快是否需要除个可除的参数?
时钟是否太慢是否需要乘个参数?
不得不概叹,ic小伙伴把功能做得非常nice。
如果需要HSE或HSI,都需要设置下其相应的引脚。
毕竟,要作为时钟输入引脚和其他引脚,某些设置是不同的。
STM32CubeMX中的时钟树,直接把复杂的频率变成了让你选择或者填空,降低了难度。
左边用于选择配置系统频率的来源和频率。
右边则是用于给外设的时候配置,它的上游是系统频率。
当设置完成后,就可以生成代码了。
生成的代码如上图,通过代码可知。
两个结构体,一个对应系统频率,类似上上图左边的配置,一个对应给外设的频率配置,类似上上图右边的配置。
一个直觉的感受就是,STM32CubeMX降低了时钟树配置的难度。
你觉得呢?