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для модуляції тривалості імпульсу «високий-низький». Це передає біти 0 та 1 як часові імпульси, починаючи з найбільш значущого біта. timing повинен бути чотирьох-елементним кортежем наносекунд у форматі(high_time_0, low_time_0, high_time_1, low_time_1). Наприклад,(400, 850, 800, 450)– це специфікація часових параметрів для RGB LED WS2812 на частоті 800 кГц.
Точність часових параметрів залежить від апаратного забезпечення; швидші MCU генерують тісніші імпульси (зазвичай десятки наносекунд).
Примітка
Для керування стрічками WS2812 / NeoPixel дивіться модуль
neopixelз API вищого рівня.
Константи¶
Наведені нижче константи повертаються функцією reset_cause() і вказують причину останнього скидання MCU. Доступно на портах STM32 та mimxrt; порт alif (OpenMV Cam AE3) наразі не надає констант причини скидання, і його reset_cause() завжди повертає 0.
- machine.PWRON_RESET: int¶
Скидання спричинено подачею живлення на мікросхему. Порти STM32 та mimxrt.
- machine.WDT_RESET: int¶
Скидання спричинено спрацьовуванням сторожового таймера. Порти STM32 та mimxrt.
- machine.SOFT_RESET: int¶
Скидання спричинено
soft_reset()(інтерпретатор Python перезапустився без апаратного скидання). Порти STM32 та mimxrt.
Класи¶
- клас Pin – керування виводами введення/виведення
- клас Signal – керування та зчитування зовнішніх пристроїв введення/виведення
- клас LED – переносне керування вбудованим світлодіодом
- клас ADC – аналого-цифрове перетворення
- клас PWM – широтно-імпульсна модуляція
- клас UART – дуплексна шина послідовного зв’язку
- клас SPI – протокол шини Serial Peripheral Interface (з боку контролера)
- клас SoftSPI – шина SPI з програмною емуляцією
- клас I2C – двопровідний послідовний протокол
- клас SoftI2C – програмна емуляція шини I2C
- клас I2CTarget – цільовий пристрій I2C
- клас I2S – протокол міжмікросхемної звукової шини
- клас CAN – протокол Controller Area Network
- клас RTC – годинник реального часу
- клас Timer – віртуальний одноразовий / переодичний таймер
- клас WDT – сторожовий таймер
- клас SDCard – драйвер карти SD / MMC
- клас Counter – лічильник імпульсів
- клас Encoder – квадратурний декодер