====== Soporte UART y RS485: Clase UART ======

La clase UART permitirá crear objetos que representan los módulos UART y RS845 de la placa.

===== Constructor =====

La clase posee un constructor que recibe como argumento el número de UART que controlará. Los valores posibles son 
  * 0: RS485
  * 3: UART  


===== Métodos =====

  * init(): Recibe la configuración de la UART, la cual consta de 1 argumento obligatorio(baudrate) y 9 opcionales:
    * baudrate : Obligatorio. Define la velocidad de comunicación
    * bits: Solo se soporta el valor 8
    * parity: Indica la paridad: None: sin paridad. 1: Impar. 2: Par. 3: F1. 4: F2
    * stop: Indica la cantidad de bits de stop (1 o 2)
    * timeout: En el modo recepción por paquete, indica el tiempo que debe pasar para que se reconozca la recepción de una trama. Indicado en ms
    * timeout_char: Tiempo entre envio de bytes indicado en ms.
    * read_buf_len: En el modo recepción por paquete, tamaño del buffer de recepción. (Max 2048)
    * packet_mode: Indica si la recepcíon será por byte o por trama. True: Por trama. False: Por byte.
    * packet_end_char: En el modo recepción por paquete, espera este valor para detectar un fin de trama.

  * write(buff): Envía una trama por la UART. buff puede ser un bytearray o un string.
  * writechar(ch): Envía un caracter por la UART
  * get_baudrate(): Devuelve el baudrate configurado
  * any(): Devuelve True si se recibió un byte/trama
  * readchar(): Espera el tiempo "timeout" para leer un byte recibido. En el caso de que no haya nada para recibir, devuelve -1, de lo contrario devuelve el byte recibido.
  * read([nBytes]): Espera el tiempo "timeout" y devuelve un bytearray con los datos recibidos. En forma opcional se puede indicar un máximo de bytes a recibir.
  * readall(): Espera el tiempo "timeout" y devuelve un bytearray con los datos recibidos.
  * readinto(buf[, nbytes]): Espera el tiempo "timeout" y carga los datos recibidos en el objeto bytearray pasado como primer argumento, el forma opcional se puede indicar un máximo.

===== Ejemplo 1, envío y recepción en modo byte =====

  import pyb
  uart = pyb.UART(3)
  uart.init(115200,bits=8, parity=None, stop=1,timeout=500, timeout_char=1, read_buf_len=64)
  uart.write("Hola mundo")
  while True:
          if uart.any():
                  print("hay data:")
                  data = uart.readall()
                  print(data)

===== Ejemplo 2, envío y recepción en modo trama =====

Se agregó un modo de recepcion por "paquete" en donde la trama que llega se almacena en un buffer interno y luego el metodo "any()" devuelve True. Utilizando el metodo "readall()" se obtiene la trama completa. Para habilitar la recepcion por paquete se deben agregar el argumento "packet_mode" en True al final del metodo "init()".

  uart.init(115200,bits=8, parity=None, stop=1,timeout=200, timeout_char=1, read_buf_len=64,packet_mode=True)


