Donc, la semaine dernière, j'ai travaillé à obtenir des messages UART envoyés à partir d'un STM32F407 et à les lire sur mon ordinateur portable via un câble ugreen RS232 vers USB à l'aide de termites.
J'ai utilisé STMCube pour générer du code et y ajouter en lisant les instructions pertinentes en haut du fichier "stm32f4xx_hal_uart.c" (et en regardant beaucoup de vidéos et en lisant en ligne).
J'ai vérifié le message transmis sur un oscilloscope et il correspond à sa représentation ASCII.
Par exemple, j'envoie 'Q' qui est 0101 0001, je reçois 'W' qui est 0101 0111. La lecture sur la portée montre:
Sortie de termites pour le même signal que celui affiché sur l'oscilloscope.
J'ai confirmé que les taux de transmission / parité / HWcontrol correspondent sur les termites et dans mon code.
Pour recevoir un caractère correct, j'ai essayé d'abaisser et d'augmenter les vitesses de transmission.
J'ai essayé différents jeux de caractères pour essayer de trouver un motif qui provoque l'affichage de mauvais caractères.
De plus, j'ai essayé différents terminaux tels que Putty ou Teraterm.
1
symbole avec le fond jaune à gauche de la trace - c'est le niveau 0V) puis des impulsions en dessous de 0V. Ce ne serait pas vrai pour un signal logique provenant directement d'un STM32 et, en effet, ce n'est pas vrai. En regardant dans le coin inférieur gauche, vous avez défini le canal 1 sur le couplage AC (c'est le~
symbole que vous voyez là-bas). Le signal tourne vraiment au ralenti haut et bat autour de 0V. Utilisez le couplage CC pour une vue saine de ce signal.Réponses:
Vous avez manqué un détail majeur de RS232. Les niveaux logiques sont les suivants:
Figure 1. Niveaux de signal RS232. Source: Wikimedia Commons .
Pour convertir de la logique TTL (5 V) en RS232, un pilote est requis. Les puces telles que le MAX232 font l'inversion du niveau logique et l'augmentation de tension pour vous.
Il est parfois possible de "tricher" et d'introduire un signal TTL dans une entrée RS232 à condition que le niveau logique soit inversé. La fiabilité de cette méthode dépend de la puce utilisée sur l'entrée RS232.
Figure 2. La forme d'onde transmise. En haut se trouve la configuration binaire du «Q» que vous avez transmis. En bas se trouve la lecture de l'entrée RS232.
Notez que l'entrée RS232 recherche un front positif pour indiquer le bit de départ. Cela ne se produit pas avant le deuxième bit de vos données, donc tout ce qui suit est un bit vers la droite et inversé comme le récepteur le voit. Par chance, votre MSB est le niveau logique correct pour le bit d'arrêt, donc le récepteur l'a interprété comme une trame valide, l'a décodé et a affiché un «W».
À des fins de test, vous pouvez inverser votre sortie TTL. Cela fonctionnera probablement car il "fonctionne" en ce moment.
Figure 3. Le MAX232 puce utilise des condensateurs dans les circuits de pompe de charge pour augmenter l'alimentation 5 V pour les niveaux RS232.
Pour plus de fiabilité, ajoutez une puce MAX232 pour transmettre et recevoir un signal de niveau RS232 approprié.
la source
Compte tenu du court courrier et du faible débit binaire de 9600, les niveaux TTL et CMOS fonctionnent bien. Le problème éloquemment détaillé par @Transistor est que les données UART sont de logique négative 0 ~ 5V et RS-232 est de logique positive +/- V f entre +/- 3 et +/- 15V (?)
Par conséquent, comme il le suggère également, un onduleur fonctionnera.
Le problème n'est pas un problème de taux d'erreur binaire (BER) ou d'intégrité du signal, mais une logique inversée.
De plus, la "zone grise" est pour la marge de bruit longue distance. Elle n'est pas <+/- 3V pour vous car votre câble est court. Le seuil logique réel du RS-232 Rx est exactement le même que l'ancienne tolérance TTL (deux gouttes Vbe) ou 1,4 V +/- 20% (?).
Ils appellent cela une zone grise afin de répondre à toutes les spécifications de distance et de débit en bauds en raison des parasites de bruit et de la sonnerie des bords.
Pour des câbles plus longs, achetez n'importe quel MAX232. Les variations peuvent dépendre de la vitesse et des caractéristiques de la tension.
la source