machine — funktioner relaterade till hårdvaran¶
Modulen machine innehåller specifika funktioner relaterade till hårdvaran på ett visst kort. De flesta funktionerna i denna modul gör det möjligt att uppnå direkt och obegränsad åtkomst till och kontroll av hårdvarublock i ett system (som CPU, timers, bussar, etc.).
Minnesåtkomst¶
Modulen exponerar tre indexerbara objekt som används för rå minnesåtkomst. Var och en beter sig som en gles array indexerad efter byteadress: value = memN[addr] läser, memN[addr] = value skriver. Adressen är alltid en byteadress, oavsett åtkomstbredd.
- machine.mem8¶
Indexerbar 8-bitars minnesåtkomst.
mem8[addr]läser eninti intervallet 0-255 från byten vidaddr;mem8[addr] = valueskriver de låga 8 bitarna avvalue.addrmåste vara justerad till 1 byte (valfri adress).
- machine.mem16¶
Indexerbar 16-bitars (halvord) minnesåtkomst.
mem16[addr]läser eninti intervallet 0-65535;mem16[addr] = valueskriver de låga 16 bitarna.addrmåste vara justerad till 2 byte.
- machine.mem32¶
Indexerbar 32-bitars (ord) minnesåtkomst.
mem32[addr]läser eninti intervallet 0-0xFFFFFFFF;mem32[addr] = valueskriver de låga 32 bitarna.addrmåste vara justerad till 4 byte.
Exempelanvändning (registren är specifika för en STM32H7-mikrokontroller – på OpenMV Cam H7 / H7 Plus / Pure Thermal är header-stiftet P0 kopplat till 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
Diverse funktioner¶
- machine.unique_id() bytes¶
Returnera ett
bytes-objekt som innehåller en unik identifierare för detta kort. Värdet läses ut från MCU:ns hårdvara (vanligtvis det fabriksprogrammerade enhetsserienumret), så det är stabilt mellan omstarter och skiljer sig från ett kort till nästa.Längden beror på MCU-familjen – 12 byte på STM32, 8 byte på mimxrt- och alif-portarna. Om din applikation behöver ett ID med fast längd, skiva eller hasha det returnerade värdet.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mät bredden på en enstaka puls på
pinoch returnera dess varaktighet i mikrosekunder.pinmåste vara konfigurerad som en digital ingång.pulse_levelär pulspolariteten som ska tidsmätas:1för en hög puls,0för en låg puls.Funktionen arbetar i två faser. Först, om stiftet inte redan är vid
pulse_level, väntar den på att stiftet ska övergå tillpulse_level(början av pulsen). Sedan mäter den tiden stiftet stannar vidpulse_levelinnan det övergår tillbaka (slutet av pulsen). Den uppmätta tiden returneras i mikrosekunder.timeout_usbegränsar varje fas oberoende (så ett värsta-fall-anrop varar upp till2 * timeout_us). Vid timeout returnerar funktionen ett negativt värde som identifierar vilken fas som fick timeout:-2– timeout vid väntan på den ledande flanken (stiftet nådde aldrigpulse_level).-1– timeout vid väntan på den efterföljande flanken (pulsen var längre äntimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Sänder data genom bit-banging av det angivna pin. Argumentet encoding anger hur bitarna kodas, och timing är en kodningsspecifik tidsspecifikation.
De kodningar som stöds är:
0för pulslängdsmodulering av typen ”high low”. Detta sänder 0- och 1-bitar som tidsstyrda pulser, med början på den mest signifikanta biten. timing måste vara en fyr-tupel av nanosekunder i formatet(high_time_0, low_time_0, high_time_1, low_time_1). Till exempel är(400, 850, 800, 450)tidsspecifikationen för WS2812 RGB-lysdioder vid 800kHz.
Tidsprecisionen är hårdvaruberoende; snabbare MCU:er producerar tätare pulser (vanligtvis tiotals nanosekunder).
Anteckning
För att styra WS2812-/NeoPixel-remsor, se modulen
neopixelför ett API på högre nivå.
Konstanter¶
Konstanterna nedan returneras av reset_cause() och identifierar varför MCU:n senast återställdes. Tillgängliga på STM32- och mimxrt-portarna; alif-porten (OpenMV Cam AE3) exponerar för närvarande inte konstanter för återställningsorsak och dess reset_cause() returnerar alltid 0.
- machine.PWRON_RESET: int¶
Återställning orsakad av att ström tillförs chippet. STM32- och mimxrt-portarna.
- machine.WDT_RESET: int¶
Återställning orsakad av att watchdog-timern löper ut. STM32- och mimxrt-portarna.
- machine.SOFT_RESET: int¶
Återställning orsakad av
soft_reset()(Python-interpretatorn startades om utan en hårdvaruåterställning). STM32- och mimxrt-portarna.
Klasser¶
- class Pin – styr I/O-stift
- class Signal – styr och avläs externa I/O-enheter
- klass LED – portabel styrning av inbyggd LED
- class ADC – analog till digital-konvertering
- klass PWM – pulsbreddsmodulering
- class UART – duplex seriell kommunikationsbuss
- class SPI – ett bussprotokoll för Serial Peripheral Interface (styrenhetssidan)
- class SoftSPI – mjukvaruemulerad SPI-buss
- class I2C – ett tvåtrådigt seriellt protokoll
- class SoftI2C – en mjukvaruemulerad I2C-buss
- class I2CTarget – en I2C-målenhet
- klass I2S – Inter-IC Sound-bussprotokoll
- class CAN – protokollet Controller Area Network
- class RTC – realtidsklocka
- class Timer – virtuell periodisk/engångstimer
- class WDT – watchdog-timer
- class SDCard – drivrutin för SD-/MMC-kort
- klassen Counter – pulsräknare
- klassen Encoder – kvadraturavkodare