MicroPython:Библиотеки/pyb
Модуль pyb – функции для Pyboard-платы[1]
Модуль pyb содержит функции, связанные с функционалом платы Pyboard.
Функции для работы со временем
- pyb.delay(ms) – делает задержку на заданное количество миллисекунд.
- pyb.udelay(us) – делает задержку на заданное количество микросекунд.
- pyb.millis() – возвращает количество миллисекунд, прошедших с последнего сброса платы.
Возвращаемым значением всегда будет MicroPython’овское малое целое число (31-битное знаковое число), поэтому спустя 230 миллисекунд (это примерно 12.4 дня) эта функция начнет возвращать отрицательные числа. При вызове pyb.stop() работа функции pyb.millis() встанет на паузу и будет находиться в таком состоянии, пока устройство не выйдет из режима сна. Это также повлияет на результат функции pyb.elapsed_millis().
- pyb.micros() – возвращает количество микросекунд, прошедших с последнего сброса платы.
Возвращаемым значением всегда будет MicroPython’овское малое целое число (31-битное знаковое число), поэтому спустя 230 микросекунд (это примерно 17.8 минут) эта функция начнет возвращать отрицательные числа. При вызове pyb.stop() работа функции pyb.micros() встанет на паузу и будет находиться в таком состоянии, пока устройство не выйдет из режима сна. Это также повлияет на результат функции pyb.elapsed_micros().
- pyb.elapsed_millis(start) – возвращает количество миллисекунд, прошедших с запуска платы.
Эта функция умеет работать с остатком по модулю (то есть с ситуациями, когда значение переваливает за некоторый порог и идет дальше) и всегда возвращает положительное число. Это значит, что ее можно использовать для измерения периодов, длящихся до 12.4 дней. Пример:
start = pyb.millis()
while pyb.elapsed_millis(start) < 1000:
# Далее выполняем какие-то операции
- pyb.elapsed_micros(start) – возвращает количество микросекунд, прошедших с запуска платы.
Эта функция умеет работать с остатком по модулю (то есть с ситуациями, когда значение переваливает за некоторый порог и идет дальше) и всегда возвращает положительное число. Это значит, что ее можно использовать для измерения периодов, длящихся до 17.8 минут. Пример:
start = pyb.micros()
while pyb.elapsed_micros(start) < 1000:
# Далее выполняем какие-то операции.
pass
Функции для работы со сбросом
- pyb.hard_reset() – выполняет сброс платы Pyboard, как если бы это было нажатие на кнопку RESET на плате.
- pyb.bootloader() – активирует загрузчик без использования контакта BOOT.
- pyb.fault_debug(value) – включает/выключает отладку т.н. «тяжелых отказов». Тяжелый отказ – это ситуация, когда в используемой системе возникла фатальная ошибка вроде недопустимого обращения к памяти.
Если в аргументе value будет задано False, при возникновении тяжелого отказа будет выполнен автоматический сброс платы. Если в аргументе value будет задано True, то при возникновении тяжелого отказа система распечатает значения регистров и стек-трейс, а затем запустит бесконечное циклическое мигание светодиодами. По умолчанию в этой функции задано False, т.е. автоматический сброс.
Функции для работы с прерываниями
- pyb.disable_irq() – отключает запросы на прерывания. Возвращает предыдущее состояние запросов на прерывание: False для отключенных прерываний и True – для включенных. Значение, возвращенное этой функцией, можно передать функции enable_irq(), чтобы восстановить исходное состояние прерываний.
- pyb.enable_irq(state=True) – включает запросы на прерывания. Если задать в state значение True (это значение по умолчанию), это включит прерывания, а если False, это их выключит. Самый распространенный вариант применения этой функции – это передача возвращенного ею значения функции disable_irq(), чтобы выйти из критического раздела кода.
Функции для работы с электропитанием
- pyb.freq([sysclk[, hclk[, pclk1[, pclk2]]]]) – если не задавать в этой функции никаких аргументов, она вернет кортеж с тактовыми частотами: (sysclk, hclk, pclk1, pclk2). Они означают следующее:
- sysclk – частота процессора.
- hclk – частота шины AHB (оперативная память и DMA).
- pclk1 – частота шины APB1.
- pclk2 – частота шины APB2.
Если задать в этой функции аргументы, она задаст частоту процессора и шин. Частота задается в герцах. Например, freq(120000000) задаст частоту процессора (sysclk) на 120 МГц. Поддерживаются не все значения, и функцией будет выбрано наибольшее поддерживаемое значение, но не выше того, что было задано в аргументе. Поддерживаемые частоты для sysclk (в МГц): 8, 16, 24, 30, 32, 36, 40, 42, 48, 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. Максимальная частота для hclk – это 168 МГц, для pclk1 – 42 МГц, для pclk2 – 84 МГц. Ни в коем случае не задавайте частоты, превышающие эти значения. Частоты для hclk, pclk1 и pclk2 – это производные от частоты sysclk (они генерируются при помощи предварительных делителей частоты). Поддерживаемые делители для hclk: 1, 2, 4, 8, 16, 64, 128, 256, 512. Поддерживаемые делители для pclk1 и pclk2: 1, 2, 4, 8. Выбор делителя будет осуществляться так, чтобы он наилучшим образом соответствовал запрошенной частоте. Частота sysclk в 8 МГц напрямую использует HSE-генератор (внешний высокоскоростной генератор), а в 16 МГц – HSI-генератор (внутренний высокоскоростной генератор). Более высокие частоты используются HSE-генератором для управления PLL (фазовой автоподстройкой частоты), а затем используют результат PLL. Если поменять частоту при включенном USB-соединении, оно может стать ненадежным. Частоту лучше менять в «boot.py» – еще до запуска USB-компонентов. Также помните, что при частоте процессора ниже 36 МГц USB-соединение будет работать некорректно.
- pyb.wfi() – ждет внутреннего или внешнего прерывания.
Эта функция выполняет команду wfi, которая снижает энергопотребление микроконтроллера до срабатывания прерывания (внутреннего или внешнего), после чего выполнение кода возобновляется. Помните, что прерывания системного таймера возникают каждую миллисекунду (1000 Гц), так что эта функция заблокирует выполнение кода максимум на 1 миллисекунду.
- pyb.stop() – переводит PyBoard в режим сна.
Это снижает энергопотребление до уровня ниже 500 мкА (микроампер). Чтобы выйти из этого состояния, требуется либо RTC-событие, либо внешнее прерывание. При пробуждении выполнение кода возобновляется с того места, где оно было прекращено. О настройке пробуждающего RTC-события читайте в описании функции rtc.wakeup().
- pyb.standby() – переводит PyBoard в режим «глубокого сна».
Это снижает энергопотребление до уровня ниже 50 мкА (микроампер). Чтобы выйти из этого состояния, требуется либо RTC-событие, либо внешнее прерывание на X1 (PA0=WKUP) или X18 (PC13=TAMP1). При пробуждении система выполняет аппаратный сброс. О настройке пробуждающего RTC-события читайте в описании функции rtc.wakeup().
Прочие функции
- pyb.have_cdc() – возвращает True, если к USB-порту подключено последовательное устройство. В противном случае возвращает False.
Примечание: Эта функция устарела. Вместо нее используйте yb.USB_VCP().isconnected().
- pyb.hid((buttons, x, y, z)) – берет 4-элементный кортеж (или список) и отправляет его USB-хосту (ПК), чтобы сообщить о HID-событии движения мышки.
Примечание: Эта функция устарела. Вместо нее используйте pyb.USB_HID.send().
- pyb.info([dump_alloc_table]) – печатает много информации о плате.
- pyb.main(filename) – задает название для главного скрипта, который будет запущен после завершения «boot.py». Если не вызвать эту функцию, будет выполнен «main.py», заданный по умолчанию.
Эту функцию имеет смысл вызывать только из «boot.py».
- pyb.mount(device, mountpoint, *, readonly=False, mkfs=False)
Примечание: Эта функция устарела. Монтирование и размонтирование устройств теперь делаются при помощи функций uos.mount() и uos.umount(). Монтирует блочное устройство и делает его доступным в виде части файловой системы. В аргументе device должен быть задан объект с блочным протоколом. Функции ниже тоже устарели. О том, как правильно создавать блочные устройства, читайте в описании класса uos.AbstractBlockDev().
- readblocks(self, blocknum, buf)
- writeblocks(self, blocknum, buf) (опционально)
- count(self)
- sync(self) (опционально)
Функции readblocks() и writeblocks() отвечают за копирование данных между буфером buf и блочным устройством, начиная с блока под номером blocknum на устройстве. В buf будет массив байтов с размером, кратным 512. Если функция writeblocks() не определена, то устройство монтируется только для чтения. Значение, возвращаемое двумя этими функциями, игнорируется. Функция count() возвращает количество блоков, доступных на устройстве. Функция sync(), если реализована, синхронизирует данные на устройстве. Аргумент mountpoint – это место в корне файловой системы, куда будет смонтировано устройство. Значение в нем должно начинаться с прямого слэша. Если в readonly задано True, то устройство будет смонтировано только для чтения, в противном случае на нем будет доступно и чтение, и запись. Если в mkfs задано True и если файловой системы еще нет, то она будет создана.
- pyb.repl_uart(uart) – задает или считывает объект UART, на котором запущен REPL.
- pyb.rng() – возвращает 30-битное аппаратно-сгенерированное случайное число.
- pyb.sync() – синхронизирует все файловые системы.
- pyb.unique_id() – возвращает строку с 12 байтами (96 битами), являющуюся уникальным ID микроконтроллера.
- pyb.usb_mode([modestr, ]port=-1, vid=0xf055, pid=-1, msc=(), hid=pyb.hid_mouse, high_speed=False) – если вызвать эту функцию без аргументов, она вернет строку, содержащую информацию о текущем USB-режиме.
Если вызвать ее с аргументом modestr, она попытается задать USB-режим. Вот доступные значения для этого аргумента:
- None – отключает USB.
- 'VCP' – включает USB с VCP-интерфейсом (от англ. «virtual COM port», т.е. «виртуальный COM-порт»).
- 'MSC' – включает USB с MSC-интерфейсом (от англ. «mass storage device class», т.е. «устройство-накопитель»).
- 'VCP+MSC' – включает USB с VCP- и MSC-интерфейсами.
- 'VCP+HID' – включает USB с VCP- и HID-интерфейсами (от англ. «human interface device», т.е. «человеко-машинный интерфейс»).
- 'VCP+MSC+HID' – включает USB с VCP-, MSC- и HID-интерфейсами (этот вариант доступен только на PYBD-платах).
В целях обратной совместимости под 'CDC' также подразумевается 'VCP' (то же самое касается режимов 'CDC+MSC' и 'CDC+HID'). В аргументе port должно быть целое число («0», «1» и т.д.) – в нем задается, какой USB-порт использовать, если плата оснащена несколькими USB-портами. Если задать «-1», это выберет порт по умолчанию или автоматически выбранный порт. В аргументах vid и pid задаются VID (ID поставщика) и PID (ID продукта). Если задать в pid значение «-1», то PID будет выбран в зависимости от значения в modestr. Если вы выбрали MSC-режим, то также можете задать аргумент msc, чтобы задать список адресов SCSI LUN, которые можно использовать через MSC-интерфейс. Например, msc=(pyb.Flash(), pyb.SDCard()). Если вы выбрали HID-режим, то также можете задать дополнительные HID-данные при помощи аргумента hid. В нем задается кортеж в формате (subclass, protocol, max packet length, polling interval, report descriptor). По умолчанию в нем задаются параметры для USB-мышки. Также есть константа pyb.hid_keyboard с кортежем для USB-клавиатуры. Если задать в аргументе high_speed значение True, это включит режим USB HS (если он поддерживается используемой платформой).
Классы
- Класс Accel – управление акселерометром.
- Класс ADC – аналогово-цифровое преобразование.
- Класс CAN – коммуникационная шина CAN (controller area network).
- Класс DAC – цифро-аналоговое преобразование.
- Класс ExtInt – настройка I/O-контактов для прерываний на внешних событиях.
- Класс Flash – доступ к встроенной flash-памяти.
- Класс I2C – класс для работы с протоколом I2C.
- Класс LCD – управление LCD-дисплеем на плате LCD32MKv1.0.
- Класс LED – управление светодиодом.
- Класс Pin – управление I/O-контактами.
- Класс PinAF – альтернативные функции контактов.
- Класс RTC – часы реального времени.
- Класс Servo – драйвер для 3-проводного сервомотора.
- Класс SPI – протокол последовательной коммуникации SPI, управляемый через ведущее устройство (мастера).
- Класс Switch – управление кнопками.
- Класс Timer – управление внутренними таймерами.
- Класс TimerChannel — настройка канала для таймера.
- Класс UART – шина для двусторонней последовательной передачи данных.
- Класс USB_HID – USB с HID-интерфейсом
- Класс USB_VCP – USB c VCP-интерфейсом
<syntaxhighlight lang="python" enclose="div">