【STM32】晶振,主时钟,外设频率介绍

首先,我用的是STM32F407,下方所有图片都是出自这芯片的文档,如果型号和我不同,需要找到对应的芯片说明文档,也许会有出入

 

先看一张时钟图

这里会着重说明高速的部分,低速(不管内部还是外部)只给RTC时钟使用

题外话,MCO1、MCO2,你可以往外面输出时钟

 

以下开始正题

图片红圈处是主时钟,供给许多东西使用,例如外设(UART、SPI...),简直就像大型音乐演奏的指挥者

所有你想用到的外设,初始化第一步,就是使能时钟(向主时钟请求)

例如下方的SPI初始化代码

void SPI3_Init(void)
{	 
  GPIO_InitTypeDef  GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;
	
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);//使能SPI3时钟
 
  ...
  ...  	 
}  

是不是能看到clock(时钟)的字样?又看到ENABLE(使能)了吧?

 

再回到时钟图,红圈处的主时钟,总共有三种来源

【1】HSI内部高速晶振

【2】HSE外部高速晶振

【3】PLL锁相环

其中PLL的来源,还是要由『内部高速晶振』或是『外部高速晶振』提供

主时钟的SW,可以选择来源是三种的哪一种

 

内部晶振固定是16M,外部的话,要取决你接的晶振是多少,当然,有个范围,图上写了,4M~26M

选择了『内部高速晶振』或是『外部高速晶振』,这没什么好说的,主时钟的频率就和晶振一样

下面说明,如果选择了PLL,应该要设定哪些东西

首先很重要的一点,提供给PLL的时钟一定要是1M,不可以是2M、4M...之类的

所以呢,就有了图上的绿圈,除M(代码为PLL_M)

如果是内部晶振(16M)提供,这个除M的值,就必须设16,16M / 16 = 1M

如果是外部晶振提供,假设接了8M的晶振,这个除M的值,就要设8,8M / 8 = 1M

这是规定

最终,PLL就一定会得到1M的时钟,然后才开始做倍频的工作

倍频,会经过一个乘N(代码为PLL_N)

之后,再经过一个除P(代码为PLL_P),分频后,就会把结果提供给主时钟了

分频Q(除Q)(代码为PLL_Q),会给另一个东西提供时钟,其他的忘了,但是SDIO就是其中一个

下面来看代码

『代码图片』和『代码块』,都是出自sysytem_stm32f4xx.c

代码块的代码有点多,但是只要认真看,其实会发现,ST把所有STM32F4系列的都加进来了

只要看和自己有关的就好了,我一开始也说了,我用的是STM32F407,我只关注宏定义『STM32F40_41xxx』即可

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值