- Bases de la communication UART
- Configuration matérielle requise et configuration
- Schéma de principe pour la communication UART Nuvoton N76E003
- Broches UART sur le microcontrôleur Nuvoton N76E003
- Registres UART dans le microcontrôleur Nuvoton N76E003
- Modes de fonctionnement UART dans N76E003
- Programmation du Nuvoton N76E003 pour la communication UART
UART signifie récepteur / émetteur asynchrone universel et c'est une fonctionnalité matérielle utile dans toute unité de microcontrôleur. Un microcontrôleur doit recevoir des données, les traiter et les envoyer aux autres appareils. Il existe différents types de protocoles de communication disponibles dans le microcontrôleur, cependant, UART est le plus utilisé parmi les autres protocoles de communication tels que SPI et I2C. Si quelqu'un a besoin de recevoir ou de transmettre des données en série, UART est toujours l'option la plus simple et la plus courante. L'avantage de l'UART est qu'il ne nécessite que deux fils pour transmettre les données entre les appareils. Poursuivant notre didacticiel sur le microcontrôleur Nuvoton, dans cet article, nous allons apprendre à effectuer une communication série à l'aide du microcontrôleur N76E003.
Bases de la communication UART
Maintenant, comme nous savons ce qu'est UART, il est important de connaître les paramètres associés de l'UART.
Deux appareils UART reçoivent et transmettent des données à la même fréquence. Lorsque le périphérique UART récepteur détecte un bit de démarrage, il commence à lire les bits entrants à une fréquence spécifique connue sous le nom de vitesse de transmission. Le débit en bauds est une chose importante pour la communication UART et il est utilisé pour mesurer la vitesse de transfert de données en bits par seconde (bps). Cette vitesse de transmission, pour l'émission et la réception, doit être à la même vitesse de transmission. La différence de vitesse de débit en bauds entre les UART émetteurs et récepteurs ne peut être que d'environ 10% avant que la synchronisation des bits ne soit trop éloignée. Les vitesses de transmission les plus courantes sont de 4800, 9600, 115200 bps, etc. Auparavant, nous avons utilisé la communication UART dans de nombreux autres microcontrôleurs répertoriés ci-dessous.
- Communication UART entre ATmega8 et Arduino Uno
- Communication UART entre deux microcontrôleurs ATmega8
- Communication UART à l'aide de microcontrôleurs PIC
- Communication UART sur microcontrôleur STM8S
Le N76E003 possède deux UART - UART0 et UART1. Dans ce tutoriel, nous utiliserons le périphérique UART sur l' unité de microcontrôleur N76E003. Sans perdre beaucoup de temps, évaluons le type de configuration matérielle dont nous avons besoin pour cette application.
Configuration matérielle requise et configuration
Le composant principal requis pour ce projet est le module de conversion USB vers UART ou TTL qui rendra l'interface requise entre le PC ou l'ordinateur portable avec le module de microcontrôleur. Pour ce projet, nous utiliserons le module USB vers UART basé sur CP2102, illustré ci-dessous.
Sans oublier, à part le composant ci-dessus, nous avons besoin de la carte de développement basée sur le microcontrôleur N76E003 ainsi que du programmeur Nu-Link. Un bloc d'alimentation supplémentaire de 5 V peut être nécessaire si le programmateur n'est pas utilisé comme source d'alimentation.
Schéma de principe pour la communication UART Nuvoton N76E003
Comme nous pouvons le voir dans le schéma de la carte de développement ci-dessous, les 2e et 3e broches de l'unité de microcontrôleur sont utilisées respectivement comme UART0 Tx et Rx. À l'extrême gauche, la connexion de l'interface de programmation est affichée.
Broches UART sur le microcontrôleur Nuvoton N76E003
Le N76E003 dispose de 20 broches dont 4 peuvent être utilisées pour la communication UART. L'image ci-dessous montre les broches UART en surbrillance dans une boîte carrée rouge (Rx) et une boîte carrée bleue (Tx).
Pour l'UART0, les broches 2 et 3 sont utilisées pour la communication UART, et pour l'UART1, les broches 8 et 18 sont utilisées pour la communication.
Registres UART dans le microcontrôleur Nuvoton N76E003
N76E003 dispose de deux UART full-duplex améliorés avec reconnaissance d'adresse automatique et détection d'erreur de cadrage - UART0 et UART1. Ces deux UART sont contrôlés à l'aide de registres classés en deux UART différents. Il existe deux paires de broches RX et TX disponibles dans N76E003 pour les opérations UART. Ainsi, la première étape consiste à sélectionner le port UART souhaité pour les opérations.
Dans ce tutoriel, nous utiliserons l' UART0, ainsi la configuration sera affichée pour l'UART0 uniquement. UART1 aura la même configuration mais les registres seront différents.
Après avoir sélectionné un UART (UART0 dans ce cas), les broches d'E / S qui doivent être utilisées pour la communication RX et TX doivent être configurées comme entrée et sortie. La broche RX de UART0 est la broche 3 du microcontrôleur qui est le port 0.7. Comme il s'agit d'une broche de réception de port série, le port 0.7 doit être défini comme entrée. D'autre part, le port 0.6 qui est la 2ème broche du microcontrôleur est une broche de transmission ou une broche de sortie. Il doit être défini comme un mode quasi bidirectionnel. Ceux-ci peuvent être sélectionnés à l'aide des registres PxM1 et PxM2. Ces deux registres définissent les modes d'E / S où le x représente le numéro de port (par exemple, Port P1.0, le registre sera P1M1 et P1M2, pour P3.0 ce sera P3M1 et P3M2, etc.) La configuration peut être vu dans l'image ci-dessous-
Modes de fonctionnement UART dans N76E003
Ensuite, l'étape suivante consiste à déterminer le mode des opérations UART. Les deux UART pourraient fonctionner dans 4 modes. Les modes sont-
Comme nous pouvons le voir, les SM0 et SM1 (7e et 6e bits du registre SCON) sélectionnent le mode d'opérations UART. Le mode 0 est l' opération synchrone et les trois autres modes sont des opérations asynchrones. Cependant, le générateur de débit en bauds et les bits de trame sont différents pour chaque mode de port série. N'importe lequel des modes peut être sélectionné selon les exigences de l'application et c'est la même chose pour l'UART1 également. Pour ce didacticiel, un fonctionnement de 10 bits avec un taux de débordement de la minuterie 3 divisé par 32 ou 16 est utilisé.
Il est maintenant temps d'obtenir des informations et de configurer le registre SCON (SCON_1 pour UART1) pour UART0.
Les 6e et 7e bits définiront le mode UART comme indiqué précédemment. Le bit 5 est utilisé pour définir le mode de communication multiprocesseur pour activer les options. Cependant, le processus dépend du mode UART sélectionné. En dehors de ceux-ci, le bit REN sera mis à 1 pour activer la réception et l'indicateur TI sera mis à 1 pour que la fonction printf soit utilisée à la place de la fonction de transmission UART0 personnalisée.
Le registre important suivant est le registre du registre de contrôle de puissance (PCON) (Timer 3 bit 7 et 6 pour UART1). Si vous êtes nouveau dans les minuteries, consultez le didacticiel Nuvoton N76E003 Timer pour comprendre comment utiliser les minuteries sur le microcontrôleur N76E003.
Le bit SMOD est important pour sélectionner le double débit en bauds en mode UART0 1. Maintenant, comme nous utilisons le temporisateur 3, le registre de contrôle du temporisateur 3 T3CON doit être configuré. Cependant, les bits 7e et 6e sont réservés pour le réglage du double débit de données pour UART1.
Et la valeur du pré-détartreur Timer 3-
Le 5ème bit BRCK définira le Timer 3 comme source d'horloge de vitesse de transmission pour UART1. Maintenant, la fiche technique du N76E003 reçoit la formule pour calculer le débit en bauds souhaité ainsi que la valeur de jeu d'échantillons pour les registres haut et bas de la minuterie 3 (16 bits).
Exemple de valeur pour une source d'horloge 16 Mhz
Ainsi, le débit en bauds doit être configuré dans le registre Timer 3 en utilisant la formule ci-dessus. Dans notre cas, ce sera la Formule 4. Après cela, démarrer le Timer 3 en réglant le registre TR3 sur 1 terminera le Timer d'initialisation UART0 3. Pour recevoir et envoyer les données UART0 utiliser le registre ci-dessous-
Le registre SBUF est automatiquement configuré pour la réception et la transmission. Pour recevoir des données de l'UART, attendez que le drapeau RI définisse 1 et lisez le registre SBUF et envoyez les données à UART0, envoyez les données à SBUF et attendez que le drapeau TI obtienne 1 pour confirmer la réussite de la transmission des données.
Programmation du Nuvoton N76E003 pour la communication UART
La partie codage est simple et le code complet utilisé dans ce tutoriel se trouve au bas de cette page. L'explication du code est la suivante, l'UART0 est initialisé à 9600 bauds en utilisant l'instruction dans la fonction principale-
InitialUART0_Timer3 (9600);
La fonction ci-dessus est définie dans le fichier common.c et configure l'UART0 avec Timer 3 comme source de vitesse de transmission, en mode 1, et avec une vitesse de transmission de 9600. La définition de la fonction est la suivante:
void InitialUART0_Timer3 (UINT32 u32Baudrate) // utilise timer3 comme générateur de Baudrate { P06_Quasi_Mode; // Définition de la broche UART comme mode Quasi pour la transmission P07_Input_Mode; // Définition de la broche UART comme mode d'entrée pour recevoir SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // Activer le double taux UART0 T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // Source d'horloge de fréquence de transmission UART0 = Timer3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / #endif #ifdef FOSC_166000 RH3 = HIBYTE (65536 - (1037500 / u32Baudrate)); /*16,6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /* 16,6 MHz * / #endif set_TR3; // Trigger Timer3 set_TI; // Pour la fonction printf, il faut définir TI = 1 }
La déclaration se fait étape par étape comme indiqué précédemment et les registres sont configurés en conséquence. Cependant, dans la bibliothèque BSP du N76E003, il existe un bogue au lieu de P07_Input_Mode; il y a P07_Quasi_Mode . Pour cette raison, la fonction de réception UART ne fonctionnera pas.
Le débit en bauds est également configuré selon l'entrée de débit en bauds et en utilisant la formule donnée par la fiche technique. Maintenant, dans la fonction principale ou la boucle while , la fonction printf est utilisée. Pour utiliser la fonction printf , le TI doit être défini sur 1. A part cela, dans la boucle while , un boîtier de commutation est utilisé et selon les données UART reçues, la valeur est imprimée.
while (1) { printf ("\ r \ nAppuyez sur 1 ou Appuyez sur 2 ou Appuyez sur 3 ou Appuyez sur 4"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 est pressé"); Pause; case '2': printf ("\ r \ n2 est pressé"); Pause; case '3': printf ("\ r \ n3 est pressé"); Pause; case '4': printf ("\ r \ n4 est pressé"); Pause; par défaut: printf ("\ r \ nWrong key pressed"); } Timer0_Delay1ms (300); } }
Eh bien, pour l'UART0, recevez le Receive_Data_From_UART0 (); la fonction est utilisée. Il est également défini dans la bibliothèque common.c .
UINT8 Receive_Data_From_UART0 (vide) { UINT8 c; tandis que (! RI); c = SBUF; RI = 0; retour (c); }
Il attendra que l'indicateur RI obtienne 1 et renvoie les données de réception en utilisant la variable c.
Clignotement du code et de la sortie
Le code a renvoyé 0 avertissement et 0 erreurs et a clignoté en utilisant la méthode de clignotement par défaut par le Keil. Si vous ne savez pas comment compiler et télécharger du code, consultez l'article Premiers pas avec nuvoton. Les lignes ci-dessous confirment que notre code a été téléchargé avec succès.
Reconstruction commencée: Projet: printf_UART0 Reconstruire la cible 'GPIO' en compilant PUTCHAR.C… en compilant Print_UART0.C… en compilant Delay.c… en compilant Common.c… en assemblant STARTUP.A51… en liant… Taille du programme: data = 54.2 xdata = 0 code = 2341 création d'un fichier hexadécimal à partir de ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 Erreur (s), 0 Avertissement (s). Temps de construction écoulé: 00:00:02 Charger "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Flash Erase Done. Flash Write Done: 2341 octets programmés. Vérification Flash terminée: 2341 octets vérifiés. Flash Load terminé à 15:48:08
La carte de développement est connectée à la source d'alimentation via le programmateur et l'ordinateur portable à l'aide du module USB vers UART. Pour afficher ou envoyer les données UART, un logiciel de surveillance série est nécessaire. J'utilise un terme téra pour ce processus.
Comme vous pouvez le voir dans l'image ci-dessous, j'ai pu afficher les chaînes envoyées depuis notre contrôleur nuvoton et les afficher sur le logiciel du moniteur série. A également pu lire les valeurs du moniteur série.
Vous pouvez consulter la vidéo ci-dessous pour la démonstration complète de ce tutoriel. J'espère que vous avez apprécié l'article et appris quelque chose d'utile. Si vous avez des questions, vous pouvez les laisser dans la section commentaires ci-dessous ou utiliser nos forums pour publier d'autres questions techniques.