MicroPython:Библиотеки/machine/Класс UART: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} <syntaxhighlight lang="python" enclose="div"> =...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Класс UART – двусторонняя последовательная шина<ref>[http://docs.micropython.org/en/latest/library/machine.UART.html docs.micropython.org - class UART – duplex serial communication bus]</ref>= | |||
В классе UART реализован стандартный двусторонний протокол для последовательной коммуникации UART/USART. На физическом уровне он состоит из 2 линий: RX и TX. Единицей коммуникации считается символ (не путайте со строковым символом), размер которого может составлять 8 или 9 бит. | |||
Создать и инициализировать объект UART можно следующим образом: | |||
<syntaxhighlight lang="python" enclose="div"> | <syntaxhighlight lang="python" enclose="div"> | ||
from machine import UART | |||
# инициализируем с заданной скоростью передачи данных: | |||
uart = UART(1, 9600) | |||
# инициализируем с заданными параметрами: | |||
uart.init(9600, bits=8, parity=None, stop=1) | |||
</syntaxhighlight> | |||
Поддерживаемые аргументы на разных платах могут отличаться. | |||
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 функционируют аналогично потоковым объектам, а считывание/запись в них выполняются при помощи стандартных потоковых методов: | |||
<syntaxhighlight lang="python" enclose="div"> | |||
uart.read(10) # считываем 10 символов, возвращаем объект «bytes» | |||
uart.read() # считываем все доступные символы | |||
uart.readline() # считываем строку | |||
uart.readinto(buf) # считываем данные и сохраняем их в заданный буфер | |||
uart.write('abc') # записываем 3 символа | |||
</syntaxhighlight> | |||
==Конструкторы== | |||
* Класс 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. | |||
=См.также= | =См.также= |
Версия от 20:19, 2 сентября 2020
Класс 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.