如果对时钟精度要求不高,像STM32这种处理器可以使用内部振荡电路代替外部晶振或者晶体,可以节约成本或者降低干扰。
使用内部振荡,改变了时钟就是改变了整个处理器的心脏,需要关心的就是两个方面,一个是主频,一个是各部分外设的频率。
这是截取了CUBEMX的一个stm32f103的一个使用内部时钟的时钟分配图。
可以看到,主频最大只能达到64MHz,各部分总线的频率也有所更改。
在程序中需要改的主要有两方面:
1 使能内部振荡电路使其按照所需输出各部分频率。
2 根据新的各总线频率更新各个外设的寄存器值,比如说CAN或者UART,这两个的波特率都是根据时钟线分频倍频来的,根据新的时钟更新其波特率。其余的SPI,定时器更是需要重新更改分频设置。
注意这两方面就可以在精度要求不高的或者对干扰频率有要求的场合使用内部振荡电路,毕竟内部振荡电路的辐射远小于晶振。