machine — функции, связанные с аппаратным обеспечением¶
Модуль machine содержит специальные функции, связанные с аппаратным обеспечением конкретной платы. Большинство функций в этом модуле позволяют получить прямой и неограниченный доступ к аппаратным блокам системы (таким как ЦП, таймеры, шины и т. д.) и управление ими.
Доступ к памяти¶
Модуль предоставляет три индексируемых объекта, используемых для прямого доступа к памяти. Каждый ведёт себя как разреженный массив, индексируемый по адресу байта: value = memN[addr] читает, memN[addr] = value записывает. Адрес всегда является адресом байта, независимо от ширины доступа.
- machine.mem8¶
Индексируемый 8-битный аксессор памяти.
mem8[addr]читаетintв диапазоне 0-255 из байта по адресуaddr;mem8[addr] = valueзаписывает младшие 8 битvalue.addrдолжен быть выровнен по 1 байту (любой адрес).
- machine.mem16¶
Индексируемый 16-битный (полуслово) аксессор памяти.
mem16[addr]читаетintв диапазоне 0-65535;mem16[addr] = valueзаписывает младшие 16 бит.addrдолжен быть выровнен по 2 байтам.
- machine.mem32¶
Индексируемый 32-битный (слово) аксессор памяти.
mem32[addr]читаетintв диапазоне 0-0xFFFFFFFF;mem32[addr] = valueзаписывает младшие 32 бита.addrдолжен быть выровнен по 4 байтам.
Пример использования (регистры специфичны для микроконтроллера STM32H7 — на OpenMV Cam H7 / H7 Plus / Pure Thermal вывод разъёма P0 подключён к PB15):
import machine
from micropython import const
GPIOB = const(0x58020400)
GPIO_BSRR = const(0x18)
GPIO_IDR = const(0x10)
# set P0 (PB15) high via the GPIOB bit-set/reset register
machine.mem32[GPIOB + GPIO_BSRR] = 1 << 15
# read P0 (PB15) directly out of the GPIOB input-data register
value = (machine.mem32[GPIOB + GPIO_IDR] >> 15) & 1
Прочие функции¶
- machine.unique_id() bytes¶
Возвращает объект
bytes, содержащий уникальный идентификатор этой платы. Значение считывается из аппаратного обеспечения MCU (как правило, заводской серийный номер устройства), поэтому оно стабильно между перезагрузками и различается от одной платы к другой.Длина зависит от семейства MCU — 12 байт на STM32, 8 байт на портах mimxrt и alif. Если вашему приложению нужен идентификатор фиксированной длины, нарежьте или хешируйте возвращаемое значение.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Измеряет ширину одного импульса на
pinи возвращает его длительность в микросекундах.pinдолжен быть настроен как цифровой вход.pulse_level— полярность импульса, который нужно измерить:1для высокого импульса,0для низкого импульса.Функция работает в две фазы. Сначала, если вывод ещё не находится на уровне
pulse_level, она ждёт перехода вывода на уровеньpulse_level(начало импульса). Затем она измеряет время, в течение которого вывод остаётся на уровнеpulse_levelдо обратного перехода (конец импульса). Измеренное время возвращается в микросекундах.timeout_usограничивает каждую фазу независимо (поэтому в худшем случае вызов длится до2 * timeout_us). При тайм-ауте функция возвращает отрицательное значение, указывающее, в какой фазе произошёл тайм-аут:-2— тайм-аут при ожидании переднего фронта (вывод так и не достигpulse_level).-1— тайм-аут при ожидании заднего фронта (импульс был длиннееtimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Передаёт data, выполняя битовую манипуляцию на указанном pin. Аргумент encoding задаёт, как кодируются биты, а timing — специфичная для кодирования спецификация тайминга.
Поддерживаются следующие кодировки:
0для модуляции длительности импульса по принципу «high low». Это передаёт биты 0 и 1 как тактированные импульсы, начиная со старшего значащего бита. timing должен быть кортежем из четырёх элементов в наносекундах в формате(high_time_0, low_time_0, high_time_1, low_time_1). Например,(400, 850, 800, 450)— это спецификация тайминга для RGB-светодиодов WS2812 на частоте 800 кГц.
Точность тайминга зависит от аппаратного обеспечения; более быстрые MCU дают более точные импульсы (как правило, десятки наносекунд).
Примечание
Для управления лентами WS2812 / NeoPixel см. модуль
neopixel, предоставляющий более высокоуровневый API.
Константы¶
Приведённые ниже константы возвращаются функцией reset_cause() и указывают, почему MCU в последний раз был сброшен. Доступно на портах STM32 и mimxrt; порт alif (OpenMV Cam AE3) в настоящее время не предоставляет констант причины сброса, и его reset_cause() всегда возвращает 0.
- machine.SOFT_RESET: int¶
Сброс, вызванный
soft_reset()(интерпретатор Python был перезапущен без аппаратного сброса). Порты STM32 и mimxrt.
Классы¶
- class Pin – управление вводами/выводами
- class Signal – управление и считывание внешних устройств ввода-вывода
- класс LED – переносимое управление встроенным светодиодом
- class ADC – аналого-цифровое преобразование
- класс PWM – широтно-импульсная модуляция
- class UART – дуплексная последовательная шина связи
- class SPI – протокол шины последовательного периферийного интерфейса (Serial Peripheral Interface, сторона контроллера)
- class SoftSPI – программно эмулируемая шина SPI
- class I2C – двухпроводной последовательный протокол
- class SoftI2C – программно-эмулируемая шина I2C
- class I2CTarget – целевое устройство I2C
- класс I2S – протокол шины Inter-IC Sound
- class CAN – протокол Controller Area Network
- class RTC – часы реального времени
- class Timer – виртуальный периодический / однократный таймер
- class WDT – сторожевой таймер
- class SDCard – драйвер карт SD / MMC
- class Counter – счётчик импульсов
- class Encoder – квадратурный декодер