Skip to content
Omnikalc

Calculer le diviseur et l'erreur de débit UART

Trouvez le diviseur entier qu'il faut à l'UART d'un microcontrôleur pour un débit visé, le débit réellement obtenu, l'erreur de cadencement et le débit utile de chaque trame.

Mis à jour le
Vos paramètres
MHz

Valeur hors limites

Suréchantillonnage
Bits de données
Bit de parité
Bits de stop

Résultats

Diviseur (registre UBRR des AVR = diviseur − 1)

9

Erreur de débit

-3,55 %

De 2 à 4 % : peut fonctionner, mais des erreurs apparaissent si l'autre côté dérive aussi ; essayez le 8× ou une autre horloge
Débit réel
111 111 bauds
Bits par trame (start + données + parité + stop)
10
Débit utile
11 111 octets/s
Durée d'envoi d'un octet
90,0 µs

Comment un UART fabrique son débit

Un UART tire la cadence de ses bits d’une horloge de périphérique. Il divise cette horloge par un entier et échantillonne chaque bit plusieurs fois, en général 16 fois (certaines puces proposent le 8× pour monter plus haut) :

Diviseur = arrondi(f_horloge ÷ (suréchantillonnage × débit)) Débit réel = f_horloge ÷ (suréchantillonnage × diviseur) Erreur = débit réel ÷ débit visé − 1

Le diviseur étant entier, la plupart des couples horloge-débit laissent une petite erreur.

Exemple : le cas classique de l’Arduino

Un ATmega à 16 MHz réglé à 115 200 bauds en 16× demande un diviseur de 8,68. Arrondi à 9, l’UART tourne en réalité à 111 111 bauds, soit −3,5 %. Beaucoup de liaisons fonctionnent quand même, mais elles sont fragiles. En 8× (bit U2X), le diviseur vaut 17, le débit 117 647 bauds et l’erreur +2,1 %, ce qui est bien plus sûr. Sur les AVR, le registre UBRR contient diviseur − 1.

Quelle erreur est acceptable ?

Le récepteur se resynchronise sur chaque bit de start et doit encore lire le bit de stop dans sa fenêtre. Avec des trames de 10 bits :

Écart total Résultat
Moins de ±2 % Fiable
De 2 à 4 % Fonctionne seulement si l’autre côté est précis
Plus de 4 à 5 % Trames corrompues

La limite porte sur la somme des erreurs des deux côtés : deux appareils à −2,5 % et +2,5 % échoueront.

Les quartz « amis des bauds »

Les fréquences 1,8432, 3,6864, 7,3728, 11,0592, 14,7456 et 18,432 MHz se divisent exactement pour tous les débits standard et donnent 0 % d’erreur. Les puces récentes à générateur fractionnaire (STM32, ESP32, nombreux ARM) atténuent le problème, mais le calcul reste le même.

Débit utile

Chaque octet part dans une trame : 1 bit de start, 7 à 9 bits de données, un bit de parité facultatif et 1 ou 2 bits de stop. En 8N1 (8 données, pas de parité, 1 stop), une trame fait 10 bits : 115 200 bauds transportent au plus 11 520 octets par seconde, et chaque octet prend environ 87 µs.

Bon réflexe

Avant de choisir un débit élevé, vérifiez l’erreur des deux côtés de la liaison, surtout avec un oscillateur RC interne, dont la précision n’est souvent que de ±1 à ±2 % et varie avec la température.

Questions fréquentes

Quelle erreur de débit est acceptable ?

Visez moins de ±2 % au total. L'erreur cumulée des deux côtés doit rester sous 4 à 5 % environ pour des trames de 10 bits, donc chaque côté doit être nettement en dessous.

Pourquoi 115 200 bauds posent-ils problème sur certaines cartes à 16 MHz ?

En 16×, le diviseur s'arrondit à 9, ce qui donne 111 111 bauds, soit −3,5 %. Le mode double vitesse (8×) ramène l'erreur à +2,1 %, et un quartz de 14,7456 MHz donne 0 %.

Baud et bit par seconde, est-ce pareil ?

Pour un UART standard, chaque symbole vaut un bit, donc oui. Le débit utile est plus faible, car les bits de start, de stop et de parité occupent une partie de chaque trame.

Un oscillateur RC interne suffit-il pour l'UART ?

Souvent à bas débit, mais les oscillateurs internes peuvent s'écarter de 1 à 2 % ou plus et dériver avec la température. Pour les débits élevés, utilisez un quartz ou une horloge calibrée.

Ce calculateur vous a-t-il été utile ?

Merci pour votre avis !

Résultats indicatifs fournis à titre d'information. Ils ne remplacent pas l'avis d'un professionnel.