classe UART – bus de communication série en duplex¶
UART implémente le protocole standard de communication série en duplex UART/USART. Au niveau physique, il se compose de 2 lignes : RX et TX. L’unité de communication est un caractère (à ne pas confondre avec un caractère de chaîne) qui peut faire 8 ou 9 bits de large.
Les objets UART peuvent être créés et initialisés à l’aide de
from pyb import UART
# init with the given baudrate
uart = UART(3, 9600, timeout_char=1000)
# init with explicit parameters
uart.init(9600, bits=8, parity=None, stop=1, timeout_char=1000)
Bits peut valoir 7, 8 ou 9. Parity peut valoir None, 0 (pair) ou 1 (impair). Stop peut valoir 1 ou 2.
Note : avec parity=None, seuls 8 et 9 bits sont pris en charge. Avec la parité activée, seuls 7 et 8 bits sont pris en charge.
Un objet UART se comporte comme un objet stream et la lecture et l’écriture s’effectuent à l’aide des méthodes de flux standard
uart.read(10) # read 10 characters, returns a bytes object
uart.read() # read all available characters
uart.readline() # read a line
uart.readinto(buf) # read and store into the given buffer
uart.write('abc') # write the 3 characters
Les caractères individuels peuvent être lus/écrits à l’aide de
uart.readchar() # read 1 character and returns it as an integer
uart.writechar(42) # write 1 character
Pour vérifier s’il y a quelque chose à lire, utilisez
uart.any() # returns the number of characters waiting
Note : Les fonctions de flux read, write, etc. sont nouvelles dans MicroPython v1.3.4. Les versions antérieures utilisent uart.send et uart.recv.
Constructeurs¶
- class pyb.UART(bus: int | str, *args, **kwargs)¶
Construit un objet UART sur le
busdonné (un index entier de périphérique, par ex.3pourUART3). Sans paramètre supplémentaire, l’objet est créé mais non initialisé (il conserve les réglages précédents du bus, le cas échéant) ; si des arguments supplémentaires sont fournis, le bus est initialisé. Voirinit()pour les paramètres disponibles.UART(3)est câblé sur les mêmes broches d’en-tête sur toutes les OpenMV Cam STM32 :Signal
Broche d’en-tête
TXP4RXP5Des bus UART supplémentaires sont disponibles sur certaines cartes :
Bus
Broche TX
Broche RX
Disponible sur
UART(1)P1P0OpenMV Cam M7 / H7 / H7 Plus / Pure Thermal
UART(4)P2P3OpenMV Cam N6
UART(7)P14P13OpenMV Cam N6
Méthodes¶
- init(baudrate: int, bits: int = 8, parity: int | None = None, stop: int = 1, *, timeout: int = 1000, flow: int = 0, timeout_char: int = 0, read_buf_len: int = 64) None¶
Initialise le bus UART avec les paramètres donnés :
baudrateest la fréquence d’horloge.bitsest le nombre de bits par caractère, 7, 8 ou 9.parityest la parité,None, 0 (pair) ou 1 (impair).stopest le nombre de bits d’arrêt, 1 ou 2.flowdéfinit le type de contrôle de flux. Peut valoir 0,UART.RTS,UART.CTSouUART.RTS | UART.CTS.timeoutest le délai d’attente en millisecondes pour l’écriture/lecture du premier caractère.timeout_charest le délai d’attente en millisecondes entre les caractères lors de l’écriture ou de la lecture.read_buf_lenest la longueur en caractères du tampon de lecture (0 pour désactiver).
Cette méthode lèvera une exception si le débit en bauds n’a pas pu être réglé à moins de 5 % de la valeur souhaitée.
Note : avec parity=None, seuls 8 et 9 bits sont pris en charge. Avec la parité activée, seuls 7 et 8 bits sont pris en charge.
- read(nbytes: int | None = None) bytes | None¶
Lit des caractères. Si
nbytesest spécifié, lit au plus ce nombre d’octets. Sinbytessont disponibles dans le tampon, renvoie immédiatement, sinon renvoie lorsque suffisamment de caractères arrivent ou que le délai d’attente expire.Si
nbytesn’est pas fourni, la méthode lit autant de données que possible. Elle renvoie une fois le délai d’attente écoulé.Note : pour les caractères de 9 bits, chaque caractère occupe deux octets,
nbytesdoit être pair, et le nombre de caractères estnbytes/2.Valeur de retour : un objet bytes contenant les octets lus. Renvoie
Noneen cas d’expiration du délai.
- readchar() int¶
Reçoit un seul caractère sur le bus.
Valeur de retour : le caractère lu, sous forme d’entier. Renvoie -1 en cas d’expiration du délai.
- readinto(buf: bytearray, nbytes: int | None = None) int | None¶
Lit des octets dans
buf. Sinbytesest spécifié, lit au plus ce nombre d’octets. Sinon, lit au pluslen(buf)octets.Valeur de retour : nombre d’octets lus et stockés dans
bufouNoneen cas d’expiration du délai.
- readline() bytes | None¶
Lit une ligne, se terminant par un caractère de saut de ligne. Si une telle ligne existe, le retour est immédiat. Si le délai d’attente expire, toutes les données disponibles sont renvoyées, qu’un saut de ligne existe ou non.
Valeur de retour : la ligne lue ou
Noneen cas d’expiration du délai si aucune donnée n’est disponible.
- write(buf: bytes | bytearray | str) int | None¶
Écrit le tampon d’octets sur le bus. Si les caractères font 7 ou 8 bits de large, alors chaque octet est un caractère. Si les caractères font 9 bits de large, alors deux octets sont utilisés pour chaque caractère (petit-boutiste), et
bufdoit contenir un nombre pair d’octets.Valeur de retour : nombre d’octets écrits. Si un délai d’attente expire et qu’aucun octet n’a été écrit, renvoie
None.
Constantes¶
Contrôle de flux¶
UART(3) prend en charge le contrôle de flux matériel RTS/CTS. Sur les OpenMV Cam M7, H7, H7 Plus et Pure Thermal, les broches de contrôle de flux sont :
(TX, RX, nRTS, nCTS) = (P4, P5, P1, P2)
Sur l’OpenMV Cam N6, seul nRTS est exposé (sur la broche d’en-tête P7) ; nCTS n’est pas routé vers l’en-tête d’E/S.
Dans les paragraphes suivants, le terme « cible » désigne le périphérique connecté à l’UART.
Lorsque la méthode init() de l’UART est appelée avec flow défini sur l’une ou les deux valeurs UART.RTS et UART.CTS, les broches de contrôle de flux concernées sont configurées. nRTS est une sortie active à l’état bas et nCTS est une entrée active à l’état bas avec résistance de tirage activée. Pour câbler le contrôle de flux, connectez le nCTS de l’OpenMV Cam au nRTS de la cible et le nRTS de l’OpenMV Cam au nCTS de la cible.
CTS : la cible contrôle l’émetteur de l’OpenMV Cam¶
Si le contrôle de flux CTS est activé, le comportement d’écriture est le suivant :
Si la méthode UART.write(buf) de l’OpenMV Cam est appelée, la transmission se met en pause pendant les périodes où nCTS est False. Cela entraînera une expiration du délai si l’intégralité du tampon n’a pas été transmise pendant la période de délai. La méthode renvoie le nombre d’octets écrits, permettant à l’utilisateur d’écrire le reste des données si nécessaire. En cas d’expiration du délai, un caractère restera dans l’UART en attente de nCTS. Le nombre d’octets composant ce caractère sera inclus dans la valeur de retour.
Si UART.writechar() est appelée lorsque nCTS est False, la méthode expirera à moins que la cible n’affirme nCTS à temps. En cas d’expiration, OSError 116 sera levée. Le caractère sera transmis dès que la cible affirme nCTS.
RTS : l’OpenMV Cam contrôle l’émetteur de la cible¶
Si le contrôle de flux RTS est activé, le comportement est le suivant :
Si l’entrée tamponnée est utilisée (read_buf_len > 0), les caractères entrants sont mis en tampon. Si le tampon devient plein, le prochain caractère à arriver fera passer nRTS à False : la cible doit cesser la transmission. nRTS passera à True lorsque les caractères seront lus depuis le tampon.
Notez que la méthode any() renvoie le nombre d’octets dans le tampon. Supposons une longueur de tampon de N octets. Si le tampon devient plein et qu’un autre caractère arrive, nRTS sera mis à False, et any() renverra le décompte N. Lorsque les caractères seront lus, le caractère supplémentaire sera placé dans le tampon et sera inclus dans le résultat d’un appel ultérieur à any().
Si l’entrée tamponnée n’est pas utilisée (read_buf_len == 0), l’arrivée d’un caractère fera passer nRTS à False jusqu’à ce que le caractère soit lu.