如果将MCU比作是人,那时钟就是人的心脏。没有时钟,MCU是动不起来的,所以时钟是非常重要的,那如何看懂和运用时钟就显得很有意义。这篇文章就讲对时钟的理解和运用。
我就以如下的时钟结构图来讲解:
时钟的来源有哪些呢:
从图片的左边可以看出 有内部的高速时钟HSI、低速时钟LSI,外部的高速时钟HSE、低速时钟LSE。
那时钟就8MHZ,如何得到48MHZ或者更高呢:
如图片中的框1中所示,这个时候就需要倍频,就是通过PLL(锁相环)电路进行以倍数的进行放大频率,具体的实现过程就不加描述了,有兴趣的可以搜索了解。
系统的频率有哪些呢:
如图片中的框2中所示,系统的频率有倍频后的频率、HSI、HSE、LSI、LSE五个来源,一次只能选择一种,通过寄存器来选择,需要哪种就跟需求有关。
各个时钟的主要作用是什么呢:
系统时钟Fsys:CPU的工作、外围电路的工作
内部高速时钟HSI:CPU的工作、外围电路的工作
外部高速时钟HSE:CPU的工作、外围电路的工作
内部低速时钟LSI:实时时钟RTC的工作、看门狗时钟WTC的工作
外部低速时钟LSE:实时时钟RTC的工作、看门狗时钟WTC的工作
外围时钟可以自定义开启,这样可以起到降低功耗。
时钟频率和指令周期分别是什么呢:
时钟频率是最基本的,是系统运行的频率Fsys,可用于定时器等等的工作。
指令周期是一条指令运行时间,有1T的(即1个指令周期等于1个时钟周期)、3T的(即1个指令周期等于3个时钟周期)、4T的等等,这就跟MCU采用的什么构架有关,有哈弗构架、冯诺依曼构架等。
要延时n毫秒该如何计算呢:
1.使用delay来延时,运行时钟8M,4T构架,若延时1ms,则一条指令周期为0.5us,需要2000条指令,如下面程序所示,为delay 1ms函数
void delay_1ms()
{
short count = 249; //2条指令周期
while(count-- > 0) //7条指令周期
{
nop();//nop为一条指令周期
}
}
2.使用定制器延时,运行时钟8M,4T构架,若延时1ms,则一个时钟周期为0.125us,需要8000个时钟。由于不同MCU配置不同,所以以下面的流程来看定时1ms的配置
void delay_1ms()
{
//初始化寄存器
//将定时的寄存器设置为8000
//使能中断配置
//使能定时器
}
定时器中断触发,则时间达到1ms