machine — funcții legate de hardware¶
Modulul machine conține funcții specifice legate de hardware-ul de pe o anumită placă. Majoritatea funcțiilor din acest modul permit obținerea accesului direct și nerestricționat la blocurile hardware ale unui sistem (cum ar fi CPU, temporizatoare, magistrale etc.), precum și controlul acestora.
Acces la memorie¶
Modulul expune trei obiecte indexabile folosite pentru accesul brut la memorie. Fiecare se comportă ca un tablou rar indexat după adresa de octet: value = memN[addr] citește, memN[addr] = value scrie. Adresa este întotdeauna o adresă de octet, indiferent de lățimea accesului.
- machine.mem8¶
Accesor de memorie pe 8 biți, indexabil.
mem8[addr]citește unintîn intervalul 0-255 din octetul de laaddr;mem8[addr] = valuescrie cei mai puțin semnificativi 8 biți ai luivalue.addrtrebuie aliniat la 1 octet (orice adresă).
- machine.mem16¶
Accesor de memorie pe 16 biți (semicuvânt), indexabil.
mem16[addr]citește unintîn intervalul 0-65535;mem16[addr] = valuescrie cei mai puțin semnificativi 16 biți.addrtrebuie aliniat la 2 octeți.
- machine.mem32¶
Accesor de memorie pe 32 de biți (cuvânt), indexabil.
mem32[addr]citește unintîn intervalul 0-0xFFFFFFFF;mem32[addr] = valuescrie cei mai puțin semnificativi 32 de biți.addrtrebuie aliniat la 4 octeți.
Exemplu de utilizare (registrele sunt specifice unui microcontroler STM32H7 – pe OpenMV Cam H7 / H7 Plus / Pure Thermal pinul de pe header P0 este conectat la 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
Funcții diverse¶
- machine.unique_id() bytes¶
Returnează un obiect
bytesce conține un identificator unic pentru această placă. Valoarea este citită din hardware-ul MCU-ului (de obicei numărul de serie al dispozitivului programat din fabrică), deci este stabilă între reporniri și diferă de la o placă la alta.Lungimea depinde de familia MCU-ului – 12 octeți pe STM32, 8 octeți pe porturile mimxrt și alif. Dacă aplicația dvs. are nevoie de un ID de lungime fixă, secționați sau aplicați hash valorii returnate.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Măsoară lățimea unui singur impuls pe
pinși returnează durata acestuia în microsecunde.pintrebuie configurat ca intrare digitală.pulse_leveleste polaritatea impulsului care urmează să fie cronometrat:1pentru un impuls la nivel ridicat,0pentru un impuls la nivel coborât.Funcția lucrează în două faze. Mai întâi, dacă pinul nu se află deja la
pulse_level, așteaptă ca pinul să treacă lapulse_level(începutul impulsului). Apoi măsoară timpul cât pinul rămâne lapulse_levelînainte de a reveni (sfârșitul impulsului). Timpul măsurat este returnat în microsecunde.timeout_uslimitează fiecare fază independent (astfel încât un apel în cel mai rău caz durează până la2 * timeout_us). La timeout, funcția returnează o valoare negativă care identifică ce fază a expirat:-2– a expirat în așteptarea muchiei ascendente (pinul nu a atins niciodatăpulse_level).-1– a expirat în așteptarea muchiei descendente (impulsul a fost mai lung decâttimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Transmite data prin bit-banging pe pin-ul specificat. Argumentul encoding specifică modul în care sunt codificați biții, iar timing este o specificație de temporizare specifică codificării.
Codificările acceptate sunt:
0pentru modulația duratei impulsului „high low”. Aceasta va transmite biții 0 și 1 ca impulsuri cronometrate, începând cu cel mai semnificativ bit. timing trebuie să fie un tuplu cu patru elemente de nanosecunde în formatul(high_time_0, low_time_0, high_time_1, low_time_1). De exemplu,(400, 850, 800, 450)este specificația de temporizare pentru LED-urile RGB WS2812 la 800kHz.
Acuratețea temporizării depinde de hardware; MCU-urile mai rapide produc impulsuri mai precise (de obicei zeci de nanosecunde).
Notă
Pentru controlul benzilor WS2812 / NeoPixel, vezi modulul
neopixelpentru un API de nivel superior.
Constante¶
Constantele de mai jos sunt returnate de reset_cause() și identifică motivul ultimei resetări a MCU-ului. Disponibile pe porturile STM32 și mimxrt; portul alif (OpenMV Cam AE3) nu expune în prezent constante pentru cauza resetării, iar reset_cause() al său returnează întotdeauna 0.
- machine.PWRON_RESET: int¶
Resetare cauzată de aplicarea alimentării la cip. Porturile STM32 și mimxrt.
- machine.WDT_RESET: int¶
Resetare cauzată de expirarea temporizatorului de supraveghere (watchdog). Porturile STM32 și mimxrt.
- machine.SOFT_RESET: int¶
Resetare cauzată de
soft_reset()(interpretorul Python a repornit fără o resetare hardware). Porturile STM32 și mimxrt.
Clase¶
- clasa Pin – controlul pinilor de I/O
- class Signal – controlează și detectează dispozitive I/O externe
- clasa LED – control portabil al LED-ului de pe placă
- clasa ADC – conversie analog-digitală
- clasa PWM – modulație în lățimea impulsului
- clasa UART – magistrală de comunicație serială duplex
- class SPI – un protocol de magistrală Serial Peripheral Interface (partea de controler)
- class SoftSPI – magistrală SPI emulată software
- clasa I2C – un protocol serial cu două fire
- clasa SoftI2C – magistrală I2C emulată software
- clasa I2CTarget – un dispozitiv țintă I2C
- clasa I2S – protocolul magistralei de sunet Inter-IC
- clasa CAN – protocolul Controller Area Network
- clasa RTC – ceas în timp real
- class Timer – temporizator virtual periodic / cu o singură declanșare
- clasa WDT – temporizator de supraveghere (watchdog)
- class SDCard – driver pentru carduri SD / MMC
- clasa Counter – numărător de impulsuri
- clasa Encoder – decodor în cuadratură