STM32外部晶振电的主时钟方案

发布者:数据迷航者最新更新时间:2024-01-31 来源: elecfans关键字:STM32  主时钟 手机看文章 扫描二维码
随时随地手机看文章

STM32的时钟源

STM32F103有两种主时钟方案,一个是依靠内部RC振荡器的HSI(内部高速时钟),另一个是HSE(外部高速时钟)。


内部高速时钟源(HSI)

看数据手册,内部的HSI是由ST出厂时校准过的,但是精度并不高,在0到70℃下误差范围达到 -1.3%到2%,即便是在标准的25℃下,也有 -1.1%到1.8% 的误差(如下图)。

对于高波特率的异步串口通讯,或者需要高精度定时的场合(如:需要跑积分算法的时候),用HSI就有隐患,甚至根本达不到设计要求。

5e94245c-60d7-11ee-939d-92fbcf53809c.png

外部高速时钟源(HSE)

为了更高的时钟精度,就要用HSE做主时钟源,起码做到30ppm还是很容易的。无源晶振相对便宜一些,要求不是非常高的话也足够了。

对于外部无源晶振,需要做一些匹配工作。当然,直接baidu一个原理图,啥也不想,直接照着抄也可以运行。但是这样的设计,批量生产会不会出问题?某些特定环境下会不会崩溃?系统稳定性会不会很低?……都是未知数。这就是给自己的设计埋下隐患,说不定什么时候就崩了。

所以还是来看看怎么匹配吧–

就以 STM32F103 和 晶技HC-49SMD 8M 20pF 20ppm 的匹配为例

1. 负载电容匹配

负载电容就是下图中的CL1、CL2,一般取CL1 = CL2,这两个电容和晶体Q构成三点式电容振荡器。

5eb00dd4-60d7-11ee-939d-92fbcf53809c.png

那么要把CL1、CL2跟谁匹配呢?其实就是跟晶振的参数:Load Capacitance匹配,简称CL,从晶振的数据手册可以查到,见下图:

5ebc3d98-60d7-11ee-939d-92fbcf53809c.png

我们选择的是20pF系列的晶振,所以CL = 20pF

当然我们知道,在电路板走线上还有寄生电容,连接的芯片输入端也有等效电容,这部分也要考虑进去。从ST手册可以查到,STM32F103的晶振输入电容是5pF,而PCB走线的寄生电容一般可以估值3pF到5pF。我们这里就取Cs = 10pF。下面看公式:

5ecd2bf8-60d7-11ee-939d-92fbcf53809c.png

由于我们取了CL1 = CL2,公式就可以变为:CL1 = CL2 = 2 * (CL - Cs)

把Cs = 10pF,CL = 20pF带入上面的公式,能求出:CL1 = CL2 = 20pF

因此CL1、CL2均取为20pF。

2. 晶振跨导计算

为了确保晶振能顺利起振,并运行在稳定状态,就得有足够的增益来维持。一般要求就是,单片机的gm比晶振的gmcrit大5倍以上就可以。下面就求一下这个比值,看看是否大于5倍。

首先看STM32F103手册,可以直接获知:gm = 25mA/V

5ee277ba-60d7-11ee-939d-92fbcf53809c.png

有了gm = 25mA/V,就要用它跟晶振的最小稳定跨导gmcrit相比较。gmcrit是要我们计算一下的:

5f05134c-60d7-11ee-939d-92fbcf53809c.png

这里面的几个未知参数的意义是:

ESR——晶振的等效串联电阻,手册里查到

F——晶振的振荡频率

C0——晶振的Shunt Capacitance

CL——晶振的负载电容Load Capacitance

好,下面看晶振的手册,找这几个参数:

5f0fb2a2-60d7-11ee-939d-92fbcf53809c.png

F = 8MHz,C0 = 7pF,CL = 20pF,ESR = 80Ω。参数Get√,计算:

gmcrit = 4*80*(2Π*8*10^6)^2*(7*10^-12 + 20*10^-12)^2

gmcrit = 0.1886

现在gm、gmcrit都有了,可以比一下了

5f1ec72e-60d7-11ee-939d-92fbcf53809c.png

比值 = gm/gmcrit = 25/0.1886 = 132

可见,这个比值是132,远大于5倍的最低要求,所以我们选择的晶振是合适的。如果算出来是不合适的,那就要选用更小ESR,更低CL的晶振。其实STM32对于高速晶振的要求不高,但是对于外部低速RTC晶振的要求高一些,选型时要多加留意。

3. 驱动电平DL(Drive Level)

驱动电平其实就是指晶振工作消耗的功率,如果这个功率过大,超过晶振承受能力,则晶振寿命将减少,容易过早失效。晶振的推荐功率,可以在上图(晶振数据手册)中找到,我们选择的这个晶振的DL范围是1到500uW,推荐是100uW。如果实际工作功率过大,就串联一个Rext来限制功耗。实际功耗怎么获得?这个得自己用示波器测量,然后带入ESR计算出来。

4. 反馈电阻Rf (Feedback Resistance)

把这个放最后,其实不是因为他没啥用,而是因为ST已经把他集成到芯片里面了,我们不用太多关心这个问题了。这个Rf的作用就是让放大器Vin = Vout,来强制工作在放大区间

5f2b0214-60d7-11ee-939d-92fbcf53809c.png

总结

以上写的4项,对于STM32F103的高速外部晶振,其实主要考虑“1.负载电容计算”就可以了,这个是直接性影响最大的。


关键字:STM32  主时钟 引用地址:STM32外部晶振电的主时钟方案

上一篇:STM32速成笔记(1)概述
下一篇:STM32总线架构讲解

推荐阅读最新更新时间:2024-11-07 08:14

STM32学习013_SPI串行外设接口通信
SPI(Serial Periphreal Iterface-串行外设接口)总线系统是一种同步串行外设接口,使MCU与各种外围接口以串行方式进行通讯交换信息,SPI有三个寄存器,控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR,外围设备包括FlashRam,网络控制器,LCD显示驱动器,AD转换器和MCU etc.接口一共用4条线,串行时钟线(SCLK),主机输入/从机输出数据线MISO,主机输出/从机输入数据线MOSI,和低电平有效的从机选择线NSS. SPI接口主要应用在EEPROM,flash 实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 数据传输的过程:在主器件的移位脉冲下,数据按位传输,低位在
[单片机]
<font color='red'>STM32</font>学习013_SPI串行外设接口通信
stm32-学习经验总结 ———UCOSIII-软件定时器
一、软件定时器简介 UC/OS-III提供了软件定时器服务,定时器的本质就是一个递减的计数器,当计数器减到0的时候可以触发某种动作的执行,这个动作通过回调函数来实现,回调函数是用户自己定义的,可以是简单的打开一个LED灯,或者开启电机等。当定时器计时完成时,定义的回调函数就会被立即调用,应用程序可以有任意数量的定时器。 注意!一定不要在回调函数中使用阻塞调用或者可以阻塞或删除定时器任务的函数,比如:OSTimeDly() OSTimeDlyHMSM() 等等一些函数。 UCOSIII的软件定时器服务的相关代码是在OS_TIMR.c文件中,当设置OS_CFG.H中的OS_CFG_TMR_EN置为1的时候软件定时器服务被使能。 UCO
[单片机]
STM32 DAC详解
上一篇介绍了《 STM32ADC详解 》,既然有模拟转数字的ADC模块,那么就必然有数字转模拟的DAC模块。顾名思义,该模块仅具有ADC的补充功能。它将数字二进制值转换为模拟电压输出。DAC模块具有多种用途,包括音频生成,波形生成等。通常在大多数8位微控制器中,此模块不可用,并且通过脉宽调制(PWM)可以稍微满足其需求。部分原因是由于它们的硬件资源和运行速度相对较低。所有STM32单片机都具有PWM模块,但大容量STM32也具有DAC模块。STM32DAC模块不是很复杂,并且在工作原理方面与ADC模块相似。 01、DAC简介 从STM32F207数据手册看到,STM32F207具有两个DAC模块。 每个DAC具有独立的通道
[单片机]
<font color='red'>STM32</font> DAC详解
STM32:keil的软件逻辑分析仪( logic analyzer)使用
在keil MDK中软件逻辑分析仪很强的功能,可以分析数字信号,模拟化的信号,CPU的总线(UART、IIC等一切有输出的管脚),提供调试函数机制,用于产生自定义的信号,如Sin,三角波、澡声信号等,这些都可以定义。   以keil里自带的stm32的CPU为例,对PWM波形跟踪观测,打开C:\Keil\ARM\Boards\Keil\MCBSTM32\PWM_2目录下的stm32的Dome,第一步:进行仿真配置,如图: 把开工程中的Abstract.txt文件有对工程的描述,PWM从PB0.8和PB0.9输出,稍后将它加入软件逻辑分析仪里。 The 'PWM' project is a simpl
[单片机]
<font color='red'>STM32</font>:keil的软件逻辑分析仪( logic analyzer)使用
快速入门STM32的学习经验总结
一、前言 假如你会使用8051,会写C语言,那么STM32本身并不需要刻意地学习。 我们要考虑的是, 我可以快速用STM32实现什么?为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求? 是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住? 是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 是51的内存太小而你要存储的东西太多? 当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。 比如要用spi协议的网卡、要使用串口通信、要使用rtos等等... 快速上手的学习步骤 我们假定大家已经对STM32的
[单片机]
STM32新建keil工程具体步骤(详细)
1. 新建本地工程文件夹 在本地电脑上新建一个“工程模板”文件夹,在它之下再新建 6 个文件夹: 2.添加库文件到相应文件夹 把 ST 标准库必要的文件复制到工程模版对应文件夹的目录下 3.KEIL5新建工程 打开 KEIL5,新建一个工程,文件名自拟,工程放在Project目录下。 保存后弹出芯片选择,要根据自己芯片的型号提前按照PACK包,选择型号后点击OK。 随后弹出在线添加库文件,关闭即可。 4.添加组文件夹 在新建的工程中添加常用的文件夹,用来存放不同的文件。 5.添加文件 在新建的工程中添加这些文件,双击组文件夹就会出现添加文件的路径,然后选择文件即可。 6.配置魔术棒选
[单片机]
<font color='red'>STM32</font>新建keil工程具体步骤(详细)
防盗功能的智能车模型举例
简介:本文采用增强型32位低功耗单片机STM32F103VC、指纹识别技术和无线通信GSM技术设计了汽车防盗系统,它利用人体指纹的生物特征的惟一性,通过指纹识别控制汽车的电路、油路等,从而达到防盗的目的,解决了目前广泛采用的无线遥控方式存在空中截码和非法获取电子钥匙合法开车等问题。GSM技术增加了人防功能,它能通过无线网络进行远程报警。本系统的设计,有效的弥补了单一防盗电路的缺点,保障了汽车的安全。 目前市场上销售的汽车防盗报警器多为加装式汽车防盗器和采用电子密码钥匙的汽车防盗器。加装式汽车防盗器主要采用串接式的线路,对于精通汽车电路的盗贼来说,用跨接的方法可很轻松地避开防盗电路,防盗系统如同虚设。 随着汽车市场的飞速发展
[单片机]
防盗功能的智能车模型举例
STM32启动流程
1、stm32初始化流程 void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit(); //时钟控制寄存器全部恢复默认值 /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); //外部高速时钟源开启(8M晶振) /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部时钟HSE就绪 if(HSEStartUpStatus == SUCCESS) //如果时钟启动成功 {
[单片机]
<font color='red'>STM32</font>启动流程
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved