UART

UART

UART-устройства кодируются в байт и зависят от платформы. По этой причине модуль UART определяет числовую константу для каждого доступного UART-устройства. Например, на ESP32 UART1 определяется константой uart.UART1. Пожалуйста, обратитесь к документации вашей платформы или платы, чтобы узнать, какие UART-устройства доступны. Если вы обращаетесь к несуществующему UART, возвращается значение nil.

Функции UART не являются потокобезопасными. Вы должны использовать функции блокировки и разблокировки, чтобы сделать функции UART потокобезопасными.

uart.pins([table])

Перечислить пины, назначенные портам UART. Начальные назначения определены в Kconfig в разделе Component config -> Lua RTOS -> Hardware -> UART pin map. Перед использованием любой функции модуля UART вы можете изменить назначенные пины с помощью функции uart.setpins.

Аргументы:

  • table: если true, список пинов возвращается в таблице Lua, если false — список пинов выводится в консоль.

Возвращает:

  • если table равно false: ничего или исключение.

  • если table равно true: таблицу Lua со списком пинов или исключение. Эта таблица представляет собой массив таблиц. Каждая запись соответствует порту UART. Каждый порт предоставляет следующие поля:

    • id: идентификатор порта UART.
    • rx: номер GPIO, назначенный сигналу приема (rx).
    • tx: номер GPIO, назначенный сигналу передачи (tx).
/ > uart.pins()
UART0: rx=GPIO3 tx=GPIO1 
UART1: rx=GPIO26 tx=GPIO25 
UART2: rx=GPIO2 tx=GPIO15 

uart.setpins(id, rx, tx)

Устанавливает пины, назначенные порту UART. Используйте эту функцию, если вам нужно изменить начальные назначения.

Аргументы:

  • id: идентификатор устройства UART. Используйте любую константу uart.UARTx для этой цели.
  • rx: номер GPIO, назначенный сигналу приема (rx). Используйте любую константу pio.GPIOxx для этого.
  • tx: номер GPIO, назначенный сигналу передачи (tx). Используйте любую константу pio.GPIOxx для этого.

uart = uart.attach(id, baud rate, data bits, parity, stop bits, [buffer size, flags])

Подключить устройство UART к модулю UART.

Аргументы:

  • id: идентификатор устройства UART. Используйте uart.UARTx, определенный для этой цели.
  • baud rate (скорость передачи): желаемая скорость передачи, выраженная в бодах.
  • data bits (биты данных): количество бит данных, может быть 8 или 9.
  • parity (паритет): паритет, может быть uart.PARNONE (без паритета), uart.PAREVEN (четный паритет) или uart.PARODD (нечетный паритет).
  • stop bits (стоп-биты): количество стоп-битов, может быть uart.STOP1 (1 стоп-бит) или uart.STOP2 (2 стоп-бита).
  • buffer size (размер буфера, необязательно): размер буфера приема UART, выраженный в байтах. Если вы не указываете значение, используется буфер на 1024 байта.
  • flags (флаги, необязательно): битовая маска, составленная из следующих констант:
    • uart.READ: подключить устройство UART только для чтения (используется только RX).
    • uart.WRITE: подключить устройство UART только для записи (используется только TX).
    • значение по умолчанию uart.READ | uart.WRITE: подключить устройство UART для чтения/записи (используются RX и TX).

Возвращает: реальную установленную скорость передачи на устройстве UART или исключение. Это значение может отличаться от желаемой скорости передачи.

-- Attach an UART device to UART2, 115200 bps, 8N1
uart.attach(uart.UART2, 115200, 8, uart.PARNONE, uart.STOP1)

uart.lock(id)

Блокировать UART вызывающим потоком.

  • id: идентификатор устройства UART. Используйте uart.UARTx, определенный для этой цели.

Возвращает: ничего или исключение.

-- Lock the console
uart.lock(uart.CONSOLE)

...
...

-- Unlock the console
uart.unlock(uart.CONSOLE)

uart.unlock(id)

Разблокировать UART вызывающим потоком.

  • id: идентификатор устройства UART. Используйте uart.UARTx, определенный для этой цели.

Возвращает: ничего или исключение.

-- Lock the console
uart.lock(uart.CONSOLE)

...
...

-- Unlock the console
uart.unlock(uart.CONSOLE)

uart.write(id, data)

Записать данные в устройство UART. Данные могут быть байтом (сырые данные) или строкой.

  • id: идентификатор устройства UART. Используйте uart.UARTx, определенный для этой цели.
  • data (данные): данные для записи могут быть либо байтом (от 0 до 255), либо строкой.

Возвращает: ничего или исключение.

-- Attach an UART device to UART2, 115200 bps, 8N1
uart.attach(uart.UART2, 115200, 8, uart.PARNONE, uart.STOP1)

-- Sends AT
uart.write(uart.UART2, "AT")

-- Sends \n and \r
uart.write(uart.UART2, '\n')
uart.write(uart.UART2, '\r')

uart.read(id, format, timeout)

Читать данные из устройства UART.

Аргументы:

  • id: идентификатор устройства UART. Используйте uart.UARTx, определенный для этой цели.
  • format (формат): строка, указывающая формат типа данных для чтения. Может быть “*l” для чтения строки без ожидания символа конца строки, “*el” для чтения строки до получения символа конца строки или “*c” для чтения байта.
  • timeout (тайм-аут): тайм-аут, выраженный в миллисекундах. Эта функция блокирует текущий поток до получения всех данных в указанный тайм-аут.

Возвращает: прочитанные данные, или nil, если ничего не получено в указанный тайм-аут, или исключение.

-- Attach an UART device to UART2, 115200 bps, 8N1
uart.attach(uart.UART2, 115200, 8, uart.PARNONE, uart.STOP1)

-- Read line from UART, with a 500 milliseconds timeout
uart.read(uart.UART2, "*l", 500)

uart.consume(id)

Удалить все байты, присутствующие в очереди UART, не выполняя с ними никаких действий.

Аргументы:

  • id: идентификатор модуля UART. Используйте uart.UARTx, определенный для этой цели.

Возвращает: ничего или исключение.

-- Attach an UART device to UART2, 115200 bps, 8N1
uart.attach(uart.UART2, 115200, 8, uart.PARNONE, uart.STOP1)

-- Do something

...
...

-- Consume all bytes from buffer
uart.consume(uart.UART2)