第8课(上):晶振与时钟,单片机的心跳

硬件学习路线 · 第八课分两部分 · 本页讲时钟从哪里来、怎么接、误差有多大;下一页讲复位、启动、下载和电源去耦,并把整块最小系统组装起来

一、什么是"最小系统"?

单片机芯片本身只是一块黑色的集成电路。要让它真正跑起来,至少还需要下面几样东西。把它们凑齐、接对,就是最小系统:

🔌
电源与去耦稳定的 3.3 V(或 5 V),加上靠近芯片的去耦电容
⏱️
时钟晶振加两颗负载电容,或者使用内部振荡器
🔁
复位上电复位电路,加一个复位按键
🧭
启动配置BOOT 引脚的上下拉,决定从哪里启动程序
🔗
下载接口SWD 或 JTAG,用来烧录和调试程序
💡
指示灯一颗 LED 加限流电阻,用来确认程序在运行
类比:单片机芯片像一台精密的发动机。它要转起来,需要燃料(电源)、点火的节拍器(时钟)、启动开关(复位)、选择启动方式的档位(BOOT),还要有仪表盘(指示灯)和维修接口(下载口)。少了任何一样,发动机都无法正常工作。
本课的目标:学完之后,你应该能看懂一张单片机最小系统原理图,并且知道每个元件为什么存在、取值大概是多少。这是后面所有单片机项目的地基。

二、为什么单片机需要时钟?

第6课讲过,数字电路靠时钟这个"节拍器"统一步调:每一个节拍(周期),内部的触发器就更新一次。单片机执行一条指令,往往需要若干个时钟周期。

指令执行时间 = 所需周期数 / 时钟频率 例:时钟 8 MHz(周期 125 ns),一条指令需要 2 个周期,则执行时间为 250 ns;时钟越快,单位时间能执行的指令越多

2.1 时钟从哪里来?

单片机的时钟主要有三种来源:

来源特点精度(参考)典型用途
外部晶振(HSE)石英晶体,频率稳定±10 ~ ±50 ppm串口通信、精确定时、USB
内部 RC 振荡器(HSI)芯片内部自带,不用外接元件约 ±1%(随温度、电压变化)对时间不敏感的场合,省元件
锁相环 PLL把较低的基准频率倍频到需要的主频继承基准的精度把 8 MHz 晶振倍频到 72 MHz 等
常见配置:很多单片机是"外部 8 MHz 晶振 → PLL 倍频 → 系统主频 72 MHz 或 168 MHz"。晶振决定精度,PLL 决定速度。GD32F4 系列也是类似的结构,具体倍频系数要看参考手册的时钟树。

三、石英晶振:压电的"音叉"

石英晶体(Crystal)是一小片经过切割的石英晶片,两面镀上金属电极。它有一个奇妙的性质:压电效应。

类比:石英晶体像一把音叉。你用一个固定的音调去敲它,只有音调和音叉的固有频率完全一致时,它才会嗡嗡地大声响起来。晶振就是靠这个"只对一个频率共振"的特性,为单片机提供极其稳定的节拍。

3.1 石英为什么稳定?

石英晶体的固有频率由晶片的尺寸和切割方向决定,并且对温度、时间变化很不敏感。这使它的频率非常稳,比普通的 RC 振荡器稳定得多。这就是为什么需要精确时间的电路(串口、USB、时钟、射频)几乎都用晶振。

3.2 晶振的电路符号与两个引脚

无源晶振有两个引脚,电路中通常要和单片机内部的振荡电路(反相放大器)一起组成一个振荡回路:

晶振与负载电容 无源晶振典型连接示意
OSC_INOSC_OUT晶振 Y频率按器件选型C1GNDC2GND负载电容值须结合晶振、引脚和寄生电容计算

晶振两端各接一颗负载电容 C1、C2,它们与单片机内部的电路配合,让振荡在晶振的固有频率上稳定地维持下去。

四、无源晶振与有源振荡器

时钟器件有两大类,外形和接法完全不同,新手最容易接错。

对比项无源晶振(2 脚)有源振荡器(4 脚,有源晶振)
内部结构只有石英晶片和电极,不自己起振晶振 + 振荡电路 + 可能的分频,自己输出方波
引脚2 脚(两端接单片机和负载电容)4 脚:电源(VCC)、地(GND)、输出(OUT)、使能(EN 或 NC)
需要外接的元件两颗负载电容,且要匹配单片机的振荡电路只需要一颗电源去耦电容,输出接到单片机的时钟输入脚
成本与设计难度便宜,但布线和参数要求高,容易起振失败稍贵,但设计简单、不易出问题
典型应用大量的单片机开发板、低成本设计对可靠性要求高、布线复杂或要求时钟可直接输出的场合
常见事故:把有源振荡器当成无源晶振接(两脚焊上去、外加负载电容),时钟输出不正常甚至烧坏振荡器。反过来,把无源晶振接到有源振荡器的位置,也不会工作。接之前必须看清器件型号和引脚定义。
选择口诀:单片机的 OSC 引脚要配负载电容,就用无源晶振;如果手册推荐"外部时钟输入"或者板子空间小、要求稳,就用有源振荡器。

五、晶振的关键参数

参数含义怎么选 / 注意什么
标称频率 晶振的固有频率,如 8 MHz、12 MHz、25 MHz 必须与单片机手册推荐的 HSE 范围一致,并能通过 PLL 得到需要的主频
频率精度(ppm) 实际频率与标称值的最大偏差,1 ppm = 百万分之一 常见 ±10、±20、±50 ppm。精度越高,串口、USB 等越可靠,但价格也越高
负载电容 CL 晶振设计时假定它"看到"的外部电容,单位 pF 选晶振时要和电路的负载电容匹配,常见 12 pF、18 pF、20 pF 等。匹配不当,频率会偏
等效串联电阻 ESR 晶振在谐振时的等效电阻,决定起振难易 ESR 越小越容易起振;ESR 太大,可能不起振或起振很慢
驱动电平 DL 晶振能承受的最大功耗(μW 或 mW) 驱动过大,晶片会过应力,频率漂移甚至损坏。通常靠增大或减小负载电容、串联电阻来调节
把参数串起来看:频率决定"音调",精度决定"音准",负载电容决定"调音时的工况",ESR 决定"能不能敲响",驱动电平决定"敲得会不会过猛"。买晶振时这五个都要看。

六、负载电容:怎么算?

负载电容 CL 是晶振的一个"设计条件"。电路中实际接的两颗电容 C1、C2,要通过下面的经验公式来确定:

C1 = C2 ≈ 2 × (CL − Cs) CL 是晶振规格书给出的负载电容,Cs 是电路中引脚和走线的杂散电容(经验值约 2 ~ 5 pF)。两颗电容取相同值,使振荡对称

6.1 算一算

例:某 8 MHz 晶振规格书写 CL = 20 pF,PCB 杂散电容约 4 pF,则 C1 = C2 = 2 × (20 − 4) = 32 pF。取最接近的标准值 33 pF(或 30 pF、33 pF 视规格书而定)。

6.2 动手拨一拨:负载电容计算器

理论值 2×(CL−Cs)-
建议取标准值-
注意:负载电容不是越大越好。电容太大,晶振可能起振变慢甚至不起振;电容太小,频率会偏高,并可能过驱动。最终以单片机厂家推荐值和实际测量(用示波器或频率计看时钟输出)为准。

七、布线:晶振是最"娇气"的器件

晶振的振荡非常微弱,很容易受到周围噪声的干扰。布线不当,轻则频率抖动,重则不起振。

  1. 尽量短:晶振和单片机之间的走线越短越好,负载电容要紧靠晶振放置。
  2. 远离噪声源:不要靠近开关电源的电感、DC-DC 的开关节点、继电器、电机。
  3. 地线包围:在晶振周围画一圈地线(或铺地),把它"包起来",减少外界干扰。注意地线要完整、不要被切断。
  4. 不穿越其它信号线:晶振下方不要走其它数字或模拟信号线,尤其不要让高速信号从晶振下面穿过。
  5. 两根线对称:OSC_IN 和 OSC_OUT 两根线尽量等长、对称,减少寄生差异。
  6. 不要用过长的线接晶振:长线会引入额外的电感和电容,改变负载条件。
类比:晶振像一根细弦,它的声音很微弱。你要在安静的房间里(短线、地包围)弹它,而不是在嘈杂的大街(开关噪声旁边)。把弦拉得太长、弹的地方被别的东西挡住,声音都会变。
调试技巧:如果晶振不起振,先用示波器看 OSC_OUT 或 OSC_IN 两端,有没有正弦或方波。没有,就检查负载电容、晶振型号、布线和单片机的时钟配置。有,但频率不对,就检查负载电容和 PLL 设置。

八、时钟误差会影响什么?

8.1 串口波特率

串口通信靠"数着时间"来区分每一位数据。如果发送方和接收方的时钟都有误差,每一位的时间就会慢慢偏移,数据就读错了。两边误差加起来,超过一定范围,通信就会出错。

波特率误差 ≈ 发送方时钟误差 + 接收方时钟误差 经验上,双方合计误差最好控制在 ±2% 以内(8N1 格式)。误差越大,越容易在一串数据中间"错位"

8.2 不同时钟源的误差对比

时钟源典型误差对串口的影响
外部晶振 8 MHz,±20 ppm0.002%几乎可以忽略,串口非常可靠
内部 RC 振荡器,±1%1%单独使用时可以通信,但两端都用它就需要注意
内部 RC 振荡器,温度变化大可能超过 ±2%高温或低温时通信可能出错,不建议用于串口

8.3 动手算一算

最大频率偏差-
时钟误差百分比-
两端合计(双方同源)-
类比:两个人用各自的节拍器打拍子,一个快一点、一个慢一点。开始时还能合上,时间一长就越来越错开。串口就是这样:误差越大,一串数据越容易在后面错开。

九、小测验:晶振与时钟

十、本节小结

下一页:第8课(下):复位、启动、下载接口与电源去耦,组装最小系统