MicroPython:Библиотеки/machine/Класс UART

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс UART – двусторонняя последовательная шина[1]

В классе UART реализован стандартный двусторонний протокол для последовательной коммуникации UART/USART. На физическом уровне он состоит из 2 линий: RX и TX. Единицей коммуникации считается символ (не путайте со строковым символом), размер которого может составлять 8 или 9 бит.

Создать и инициализировать объект UART можно следующим образом:

from machine import UART

# инициализируем с заданной скоростью передачи данных:
uart = UART(1, 9600)
# инициализируем с заданными параметрами:
uart.init(9600, bits=8, parity=None, stop=1)

Поддерживаемые аргументы на разных платах могут отличаться.

Pyboard: в bits можно задать «7», «8» или «9» (т.е. битов может быть 7, 8 или 9). В stop можно задать «1» или «2» (т.е. стоп-битов будет 1 или 2). Если в parity будет None (т.е. если бит четности будет отсутствовать), поддерживается только 8 или 9 бит. При наличии бита четности поддерживаются только 7 или 8 бит.

WiPy/CC3200: Битов может быть 5, 6, 7 или 8. Стоп-битов может быть 1 или 2.

Объекты UART функционируют аналогично потоковым объектам, а считывание/запись в них выполняются при помощи стандартных потоковых методов:

uart.read(10)       # считываем 10 символов, возвращаем объект «bytes» 
uart.read()         # считываем все доступные символы
uart.readline()     # считываем строку
uart.readinto(buf)  # считываем данные и сохраняем их в заданный буфер 
uart.write('abc')   # записываем 3 символа

Конструкторы

  • Класс machine.UART(id, ...) – конструирует объект UART с заданным id.

Методы

  • UART.init(baudrate=9600, bits=8, parity=None, stop=1, *, ...) – инициализирует шину UART с заданными аргументами:
    • baudrate – тактовая частота.
    • bits – количество битов на символ (7, 8 или 9).
    • parity – бит четности. Здесь можно задать None, «0» (четность) или «1» (нечетность).
    • stop – количество стоп-битов (1 или 2).

Дополнительные именованные аргументы, которые могут поддерживаться в некоторых портах:

    • tx – здесь задается, какой TX-контакт использовать.
    • rx – здесь задается, какой RX-контакт использовать.
    • txbuf – здесь задается размер TX-буфера в символах.
    • rxbuf – здесь задается размер RX-буфера в символах.
    • timeout – здесь задается время ожидания первого символа (в миллисекундах)
    • timeout_char – здесь задается время ожидания между символами (в миллисекундах).
    • invert – здесь указывается, какие строчки надо инвертировать.

На WiPy поддерживается только один именованный аргумент:

    • pins – это список из 2 или 4 элементов, обозначающих контакты TX, RX, RTS и CTS (в таком порядке). Если вы хотите, чтобы UART работал в ограниченном режиме, в любом из этих элементов можно указать None. Если задан контакт RTS, то нужно также обязательно задать и контакт RX. То же самое касается и CTS. Если не будет задано ни одного контакта, то в TX и RX будут использованы значения по умолчанию, а аппаратное управление потоками будет отключено. Если во всех контактах будет указано None, не будет назначено ни одного контакта.
  • UART.deinit() – выключает шину UART.
  • UART.any() – возвращает целое число, обозначающее количество символов, которые можно прочесть без блокировки. Если доступных символов не будет, метод вернет «0», а если есть, то вернет положительное число. Метод может вернуть «1», даже если для считывания доступно более одного символа.

Есть и более продвинутый способ запроса доступных символов – с помощью select.poll(): poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)

  • UART.read([nbytes]) – считывает символы. Если задан аргумент nbytes, то этот метод будет считывать как можно больше байтов – пока они не кончатся. Но если истечет таймаут, метод может вернуть результат и раньше. Таймаут настраивается в конструкторе.

Возвращаемое значение: объект bytes, содержащий считанные байты. Если истечет таймаут, метод вернет None.

  • UART.readinto(buf[, nbytes]) – считывает байты в буфер buf. Если задан аргумент nbytes, то метод будет считывать как можно больше байтов. В противном случае размер считанных байтов не будет превышать размер buf. Если истечет таймаут, метод может вернуть результат и раньше. Таймаут настраивается в конструкторе.

Возвращаемое значение: количество байтов, считанных и сохраненных в буфер buf, или None при таймауте.

  • UART.readline() – считывает строку, заканчивающуюся символом новой строки. Если истечет таймаут, может вернуть результат раньше. Таймаут настраивается в конструкторе.

Возвращаемое значение: считанная строка или None при таймауте.

  • UART.write(buf) – записывает данные из буфера на шину.

Возвращаемое значение: количество записанных байтов или None при таймауте.

  • UART.sendbreak() – отправляет шине состояние прерывания. Это задает шине значение LOW на промежуток времени, который дольше, чем нужно для нормальной отправки символа.
  • UART.irq(trigger, priority=1, handler=None, wake=machine.IDLE) – создает функцию обратного вызова, которая будет запущена, когда данные будут присланы на UART.
    • trigger – здесь может быть только UART.RX_ANY.
    • priority – уровень приоритета прерывания. Здесь могут быть значения в диапазоне 1-7. Чем выше значение, тем выше приоритет.
    • handler – опциональная функция, вызываемая при прибытии новых символов.
    • wake – здесь может быть только machine.IDLE.

Примечание: Функция-обработчик будет вызвана при выполнении одного из следующих условий:

    • Прибытие 8 новых символов.
    • В RX-буфере ожидает как минимум 1 символ, а RX-линии «молчит» на протяжении как минимум одного фрейма.

Это значит, что функция-обработчик будет вызываться каждый раз, когда в ожидании будет находиться от 1 до 8 символов. Возвращает объект запроса на прерывание. Доступность: WiPy.

Константы

  • UART.RX_ANY – источники запуска запроса на прерывание.

Доступность: WiPy.

См.также

Внешние ссылки