When should one use an external crystal for this MCU given that the internal oscillator is much faster?

The internal oscillator is much less stable than an external crystal oscillator.

If I'm reading the datasheet correctly, the internal 48 MHz oscillator is only factory calibrated to within 2.9% of the specified frequency - not even good enough for RS-232. There are ways to synchronize it to an external clock, I think it's designed to be used in a USB device situation where you can lock the PLL to the USB bitstream.

An external crystal is typically accurate to around 20 ppm, parts-per-million. That's 0.002% from the specified frequency. If you need even better, there are even temperature compensated, ovenized crystal oscillators.

Additionally, you may want an exact clock speed at a different frequency, typically for communication with a device or master over an asynchronous communications channel. For this you might need an oscillator at for example 29491200 Hz (115200*256).


The internal is an oscillator, usually an RC oscillator. These oscillators are far less accurate than crystals. Also these oscillators tend to drift with temperature changes.

Crystals on the other hand can be as accurate as the money you want to spend. The accuracy is needed when, for example, high speed communication is used such as USB. USB has very tight tolerances.


See this diagram on page 16:

ST clock tree

It looks like you can also use the crystal as an input to the PLL, allowing you to achieve internal clock speeds of 48MHz from a slower crystal.