STM32F103微控制器最多可以有4个时钟源,分别是:
1、高速外部时钟HSE:可由外接于OSC_OUT、OSC_IN引脚上的晶振产生,晶振频率范围4~16MHz。也可以通过OSC_IN引脚接入外部时钟信号,外部时钟频率最高可为25MHz。
2、低速外部时钟LSE:可由外接于OSC32_OUT、OSC32_IN两个引脚上的晶振产生;也可由OSC32_IN引脚接入外部时钟信号。这两种方式提供的时钟频率都必须是32.768KHz。
3、高速内部时钟HSI:芯片内置的8MHz时钟。
4、低速内部时钟LSI:芯片内置的低频率时钟,频率约为40KHz(30KHz到60KHz之间)。
uart
通信的波特率是跟时钟频率有关的。所以随便换个晶振,必然影响
uart
的工作。翻开库函数
usart_init,通过
rcc_getclocksfreq
函数获取系统频率的。而此函数又是由
hse_value
影响频率值的。这就是晶振频率。这个宏在
stm32f10x.h
里做了定义,你可以直接到这个头文件里改掉它。由于使用了
#if
!defined
hse_value#define
hse_value
xxxx的方式,由于keil
mdk
编译器的预定义符号里被不能给
hse_value
定义
12000000
这样的常数,你也可以自己建立一个头文件来定义
hse_value
12000000,
#include
先于
stm32f10x.h
(说起来有点复杂,但可以不去改
stm32f10x.h)。
需要。
对于有串口,CAN之类的元器件,要求波特率比较准确的,最好还是有外部晶振,外部晶振的精度比内部RC振荡高几百倍。
使用内部晶振的好处在于节曰成本,但是时钟频率比较低,只有48M。使用外部晶振的时钟频率会去到72M。如果非常严格延时的场合,还是用外部晶振保险。
本文标签:stm32f103时钟晶振