Table des matières
ToggleLe récepteur/émetteur asynchrone universel, souvent appelé UART, est un récepteur/émetteur asynchrone.
Commençons par présenter les concepts de communication synchrone et asynchrone. La communication synchrone signifie qu’après avoir envoyé les données, l’émetteur attend que le récepteur lui renvoie une réponse avant d’envoyer le paquet de données suivant ; la communication asynchrone signifie qu’après avoir envoyé les données, l’émetteur attend que le récepteur les reçoive. Le destinataire renvoie une réponse, puis envoie le mode de transmission du paquet de données suivant. En d’autres termes, la communication synchrone est une méthode bloquante, tandis que la communication asynchrone est une méthode non bloquante. Parmi les protocoles de bus de communication courants, I2C et SPI relèvent de la communication synchrone, tandis que l’UART relève de la communication asynchrone. Dans une communication synchrone, les deux parties doivent d’abord établir une synchronisation, c’est-à-dire que leurs horloges doivent être réglées sur la même fréquence, et l’émetteur et le récepteur doivent envoyer et recevoir en continu un flux binaire de synchronisation. Lors de l’envoi de caractères en communication asynchrone, l’émetteur peut commencer à envoyer des caractères à tout moment. C’est pourquoi, dans la communication UART, le bit de départ et le bit d’arrêt sont indispensables.
couche matérielle
La norme RS-232, couramment utilisée, ne sera pas expliquée en détail ici. L'essentiel est que les lignes Tx et Rx du périphérique concerné soient correctement appariées.
Couche de protocole
Au niveau de la couche protocole, le contenu du paquet de données est défini : celui-ci se compose d'un bit de départ, des données du corps du paquet, d'un bit de contrôle et d'un bit d'arrêt. Le format des paquets de données doit être convenu entre les deux parties communicantes pour permettre l'envoi et la réception normaux des données.
Débit en bauds : comme il n'y a pas de signal d'horloge dans la communication asynchrone, les deux appareils de communication doivent s'accorder sur le débit en bauds. Les débits courants sont 4 800, 9 600, 115 200, etc.
Signaux de début et de fin de communication : un paquet de données dans une communication série commence par le signal de début et se termine par le signal de fin. Le signal de début du paquet de données est représenté par un bit de données logique 0, tandis que le signal d'arrêt du paquet de données peut être représenté par 0,5, 1, 1,5 ou 2 bits de données logiques 1, à condition que les deux parties s'accordent sur ce point.
Données valides : Immédiatement après le bit de départ du paquet de données se trouvent les données principales à transmettre, également appelées « données valides ». La longueur des données valides est souvent fixée à 8 ou 9 bits.
Contrôle des données : après les données valides, un chiffre de contrôle facultatif est ajouté. La communication de données étant relativement sensible aux interférences externes, qui peuvent entraîner des anomalies dans les données transmises, un bit de contrôle peut être ajouté au processus de transmission afin de résoudre ce problème. Les méthodes de vérification comprennent la parité impaire (odd), la parité paire (even), la parité 0 (espace), la parité 1 (marque) et l'absence de parité (noparity).
La parité impaire exige que le nombre de “ 1 ” dans les données valides et les bits de contrôle soit impair. Par exemple, prenons des données valides de 8 bits : 01101001. Dans ce cas, on compte au total 4 “ 1 ”. Afin d’obtenir une parité impaire, le bit de parité est un “ 1 ” ; les données transmises au final seront donc composées de 8 bits de données valides plus 1 bit de contrôle, soit un total de 9 bits. Les exigences relatives à la parité paire et à la parité impaire sont exactement opposées. Le nombre de “ 1 ” dans les données de la trame et les bits de parité doit être pair. Par exemple, trame de données : 11001010. Dans ce cas, le nombre de “ 1 ” dans la trame de données est de 4, il est donc pair. Le chiffre de contrôle est “ 0 ”. Une parité 0 signifie que, quel que soit le contenu des données valides, le chiffre de contrôle est toujours “ 0 ” ; une parité 1 signifie que le chiffre de contrôle est toujours “ 1 ”.
Analyse du schéma fonctionnel de l'UART
Cette image représente un schéma de module de modélisation UART réalisé avec System C lorsque j'étais étudiant. En ce qui concerne la partie interface, les éléments importants sont les sorties de données Tx et Rx, l'interface de réception, ainsi que clk qui fournit le signal d'horloge initial au module de génération de la vitesse de transmission. Quant à la partie contrôleur, des circuits logiques sont utilisés ici pour mettre en œuvre le contrôle spécifique de l'activation de l'émission/réception, de l'activation du périphérique, etc.

Sur les microcontrôleurs actuels, la partie logicielle de contrôle des circuits numériques a été intégrée, et il suffit désormais de manipuler les bits correspondants du registre approprié pour contrôler l'UART. Prenons l'exemple de la puce STM32F411 : la figure suivante présente le schéma fonctionnel de l'UART :

Module de génération de débit en bauds :
L'émetteur et le récepteur de l'USART utilisent le même débit en bauds. Voici la formule de calcul correspondante :

Parmi ceux-ci, « fck » correspond à l'horloge de l'USART, et « USARTDIV » est un nombre à virgule fixe non signé stocké dans le registre de débit en bauds (USART_BRR). Les bits DIV_Mantissa[11:0] définissent la partie entière de USARTDIV, tandis que les bits DIV_Fraction[3:0] définissent la partie fractionnaire de USARTDIV.
Par exemple : DIV_Mantissa = 24 (0x18), DIV_Fraction = 10 (0x0A), alors la valeur de USART_BRR est 0x18A ; les chiffres décimaux de USARTDIV sont donc 10/16 = 0,625 ; les chiffres entiers sont 24, et la valeur finale de USARTDIV est 24,625.
Les valeurs courantes pour la vitesse de transmission sont 2 400, 9 600, 19 200 et 115 200. L'exemple suivant explique comment régler la valeur du registre pour obtenir la vitesse de transmission souhaitée. Nous savons que l'USART1 utilise l'horloge du bus APB2, qui peut atteindre 72 MHz, tandis que les autres USART ont une fréquence maximale de 36 MHz. Nous choisissons l’USART1 comme exemple, c’est-à-dire fck = 72 MHz. Pour obtenir une vitesse de transmission de 115 200 bps, on a alors : 115 200 = 72 000 000 / (16 * USARTDIV), la solution est USARTDIV = 39,0625 ; on peut alors calculer que DIV_Fraction = 0,0625 * 16 = 1 = 0x01, DIV_Mantisse = 39 = 0x27, ce qui signifie que la valeur de USART_BRR doit être définie sur 0x171.
Registre de données :
Seuls les 9 bits de poids faible du registre de données UART (USART_DR) sont valides, et la validité du 9e bit dépend de la valeur du bit M du registre de contrôle UART 1 (USART_CR1). Lorsque le bit M est à 0, cela signifie que la longueur du mot de données est de 8 bits ; une valeur de 1 correspond à une longueur de mot de données de 9 bits. On utilise généralement une longueur de mot de données de 8 bits.
USART_DR contient les données envoyées ou reçues. USART_DR contient en réalité deux registres : un TDR (registres d'écriture) spécialement utilisé pour l'envoi, et un RDR (registres de lecture) spécialement utilisé pour la réception. Lors d'une opération d'envoi, les données écrites dans USART_DR sont automatiquement stockées dans le TDR ; lors d'une opération de lecture, les données lues dans USART_DR sont automatiquement extraites du RDR.
Le TDR et le RDR sont tous deux situés entre le bus système et le registre à décalage. La communication série s'effectue bit par bit. Lors de l'émission, le contenu du TDR est transféré vers le registre à décalage d'émission, puis chaque bit des données du registre à décalage est transmis. Lors de la réception, chaque bit reçu est stocké séquentiellement dans le registre à décalage de réception, puis transféré vers le RDR.
L'UART prend en charge la transmission DMA, ce qui permet d'assurer un transfert de données à haut débit (sans passer par le processeur). Pour activer la fonction DMA de l'UART, vous devez définir le bit DMAT du registre USART_CR1 sur 1.
Contrôleur :
L'UART dispose d'un émetteur qui gère spécifiquement l'envoi, d'un récepteur qui gère la réception, ainsi que d'une unité de réveil, d'un contrôle des interruptions, etc. Avant d'utiliser l'UART, vous devez l'activer en mettant à 1 le bit UE du registre USART_CR1. Le bit UE sert à activer l'horloge fournie au port série. La longueur des données envoyées ou reçues peut être de 8 ou 9 bits, ce qui est contrôlé par le bit M du registre USARTT_CR1.
1) Émetteur
Lorsque le bit d'activation de transmission TE du registre USART_CR1 est mis à 1, la transmission des données démarre et les données contenues dans le registre à décalage de transmission sont transmises sur la broche TX, le bit de poids faible en premier et le bit de poids fort en dernier.
La transmission d'une trame de caractères comprend trois éléments : le bit de départ, la trame de données et le bit d'arrêt. Le bit de départ correspond au niveau bas d'une période binaire, la période binaire étant le temps occupé par chaque bit ; la trame de données correspond aux 8 ou 9 bits de données que l'on souhaite envoyer, et la transmission des données commence par le bit le plus bas ; le bit d'arrêt correspond à une période donnée de niveau haut.
La longueur des bits d'arrêt peut être contrôlée par les bits STOP[1:0] du registre de contrôle UART 2 (USART_CR2) ; des options de 0,5, 1, 1,5 et 2 bits d'arrêt sont disponibles. Par défaut, 1 bit d'arrêt est utilisé. 2 bits d'arrêt sont disponibles en mode USART normal, en mode monofilaire et en mode modem. 0,5 et 1,5 bit d'arrêt sont utilisés en mode carte à puce.
Lorsque le bit d'activation de transmission TE est mis à 1, l'émetteur commence à envoyer une trame d'inactivité (un niveau haut correspondant à la longueur de la trame de données), puis les données à envoyer peuvent être écrites dans le registre USART_DR. Après avoir écrit les dernières données, il faut attendre que le bit TC du registre d'état UART (USART_SR) passe à 1, ce qui indique que le transfert de données est terminé. Si le bit TCIE du registre USART_CR1 est à 1, une interruption est générée.
Lors de l'envoi de données, voici quelques indicateurs importants :
TE : Activation de la transmission.
TXE : Le registre de transmission est vide ; cette valeur est utilisée lors de l'envoi d'un seul octet.
TC : Transmission terminée ; utilisé lors de l'envoi de plusieurs octets de données.
TXIE : Activation de l'interruption de fin de transmission.
2) Récepteur
Mettez à 1 le bit RE du registre CR1 pour activer la réception USART, ce qui déclenche la recherche du bit de départ sur la ligne RX par le récepteur. Une fois le bit de départ détecté, les données sont stockées dans le registre à décalage de réception en fonction de l'état de niveau de la ligne RX. Une fois la réception terminée, les données contenues dans le registre à décalage de réception sont transférées vers le PDR, et la position RXNE du registre USART_SR est modifiée. Une interruption peut être générée si le bit RXNEIE du registre USART_CR2 est défini à 1.
Lors de la réception de données, voici quelques indicateurs importants :
RE : activation de la réception.
RXNE : Le registre de données de lecture n'est pas vide.
RXNEIE : Activation de l'interruption de fin de transmission.
Registre USART_CR1 :

Registre USART_CR2 :

Registre USART_CR3 :

Mots-clés : module de port série