---
# System prepended metadata

title: How to connect a crystal oscillator to a microcontroller?
tags: [Microcontroller]

---

There are two common cases:

1. A 2-pin quartz [crystal](https://www.onzuu.com/category/crystals)/[resonator](https://www.onzuu.com/category/resonators) (the MCU provides the amplifier → “Pierce oscillator”)
2. A 4-pin [oscillator](https://www.onzuu.com/category/oscillators) module (it outputs a ready-to-use clock)

I’ll cover both, plus how to choose the capacitors and the layout rules that make or break startup.

![CrystalLocked4MHzCD4001_bb_build](https://hackmd.io/_uploads/rJnNHI04-e.jpg)

**1) Using a 2-pin crystal (most common)**
**Typical wiring (Pierce oscillator)**
```
          C1                     C2
OSC_IN o--||----+---------Xtal----||--o OSC_OUT
                |                 |
               (R)               GND
                |
               GND

```

* OSC_IN / OSC_OUT are often labeled XTAL1/XTAL2, OSC1/OSC2, HSE_IN/HSE_OUT, etc.
* C1 and C2 are the load capacitors (usually NP0/C0G ceramic).
* R is optional (depends on MCU and crystal); common options:
  * No [resistor](https://www.onzuu.com/category/resistors) (many MCUs already include the bias resistor internally)
  * 1 MΩ in parallel across the crystal (bias / startup help on some designs)
  * 0–100 Ω in series with OSC_OUT (or crystal) to reduce drive/EMI if needed

**How to pick the load capacitors (C1, C2)**

Crystals are specified with a load capacitance 𝐶𝐿(e.g., 8 pF, 12 pF, 18 pF).

If you use two equal caps C1 = C2 = C, the crystal “sees” approximately:

𝐶𝐿≈𝐶/2+𝐶𝑠𝑡𝑟𝑎𝑦

So a good starting estimate is:

𝐶≈2⋅(𝐶𝐿−𝐶𝑠𝑡𝑟𝑎𝑦)

Where 𝐶𝑠𝑡𝑟𝑎𝑦 (pin + trace + pad) is often 2–5 pF per side.

**Example (very common):**
Crystal CL = 18 pF, assume stray ≈ 3 pF →
C ≈ 2 × (18 − 3) = 30 pF → choose 27 pF or 33 pF (most people land on 22–33 pF depending on layout and MCU).

**Common “works most of the time” values:**

* For 8–16 MHz crystals: 18–33 pF (often 22 pF)
* For 32.768 kHz watch crystals: 6–12 pF (often 8–10 pF)
(LSE circuits are more sensitive to ESR and stray capacitance.)

**Crystal selection checklist**

* Frequency within MCU oscillator range (and allowed drive level)
* Correct CL value and acceptable ESR (especially important for 32 kHz crystals)
* Temperature tolerance and stability as needed

**2) Using a 4-pin oscillator module (XO/CMOS oscillator)**

An oscillator module already generates a clock. Wiring is simpler:

* VCC → supply (often 3.3 V or 5 V per part)
* GND → ground
* OUT → MCU clock input pin (often OSC_IN / EXTCLK / CLKIN)
* EN/OE (if present) → tie high (or to an MCU pin)

Important: with an oscillator module you usually connect only the input pin (OSC_IN). The MCU’s OSC_OUT pin is typically left unconnected.

Also ensure:

* The oscillator output level is compatible (CMOS 3.3 V into a 3.3 V MCU, etc.)
* Add local decoupling: 0.1 µF at the oscillator VCC pin (very close)

**3) Layout rules (this is where most failures come from)**

Do these and crystals “just work”:

* Place the crystal as close as possible to the MCU pins (a few mm if you can)
* Keep the two traces short, symmetric, and isolated
* Put C1/C2 right next to the MCU pins, and connect their ground to a clean ground with short return (often a dedicated via each)
* Avoid running other signals under/near the crystal traces (especially fast clocks, SPI, USB, DC/DC switch node)
* Avoid soldermask openings / long pads that add stray capacitance
* If you have EMI/noise issues: consider a guard ring ground around the oscillator area (board-dependent)

**4) Firmware/config steps (don’t forget this)**

Hardware can be perfect but it still won’t run if you don’t enable it:

* Select external crystal/oscillator mode in the MCU configuration:
  * AVR: fuse bits (external crystal/clock)
  * [STM32](https://www.ampheo.com/search/STM32): RCC clock config (HSE/LSE on, correct drive)
  * [PIC](https://www.ampheo.com/search/PIC): oscillator configuration bits
* Set the correct frequency in toolchains if needed (for baud rate, delays, etc.)

**5) Quick troubleshooting**

If it doesn’t start oscillating:

* Wrong [capacitor](https://www.onzuu.com/category/capacitors) values (too big or too small) → try stepping C1/C2 up/down
* Crystal ESR too high (common with 32 kHz watch crystals)
* [MCU](https://www.ampheoelec.de/c/microcontrollers) drive strength too weak/strong → adjust drive settings (if available) or add small series resistor
* Layout too long/noisy → shorten/clean routing, move parts
* You selected “external clock” in firmware but wired a crystal (or vice versa)

Measuring tip: probing the crystal pins with a normal scope probe can stop oscillation. Use a 10× probe, short ground spring, or use the MCU’s clock-out feature if available.