machine — funções relacionadas com o hardware¶
O módulo machine contém funções específicas relacionadas com o hardware de uma determinada placa. A maioria das funções neste módulo permitem obter acesso directo e irrestrito e controlo dos blocos de hardware de um sistema (como CPU, temporizadores, buses, etc.).
Acesso à memória¶
O módulo expõe três objectos subscritos utilizados para acesso directo à memória. Cada um comporta-se como um array esparso indexado por endereço de byte: value = memN[addr] lê, memN[addr] = value escreve. O endereço é sempre um endereço de byte, independentemente da largura de acesso.
- machine.mem8¶
Acessor de memória de 8 bits subscritível.
mem8[addr]lê umintno intervalo 0-255 do byte emaddr;mem8[addr] = valueescreve os 8 bits menos significativos devalue.addrdeve estar alinhado a 1 byte (qualquer endereço).
- machine.mem16¶
Acessor de memória de 16 bits (meia palavra) subscritível.
mem16[addr]lê umintno intervalo 0-65535;mem16[addr] = valueescreve os 16 bits menos significativos.addrdeve estar alinhado a 2 bytes.
- machine.mem32¶
Acessor de memória de 32 bits (palavra) subscritível.
mem32[addr]lê umintno intervalo 0-0xFFFFFFFF;mem32[addr] = valueescreve os 32 bits menos significativos.addrdeve estar alinhado a 4 bytes.
Exemplo de utilização (os registos são específicos de um microcontrolador STM32H7 – na OpenMV Cam H7 / H7 Plus / Pure Thermal, o pino do cabeçalho P0 está ligado a 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
Funções diversas¶
- machine.unique_id() bytes¶
Devolve um objecto
bytescontendo um identificador único para esta placa. O valor é lido do hardware do MCU (tipicamente o número de série do dispositivo programado de fábrica), pelo que é estável entre reinicializações e difere de uma placa para outra.O comprimento depende da família do MCU – 12 bytes em STM32, 8 bytes nos ports mimxrt e alif. Se a sua aplicação necessitar de um ID de comprimento fixo, corte ou faça hash do valor devolvido.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mede a largura de um único pulso em
pine devolve a sua duração em microssegundos.pindeve estar configurado como entrada digital.pulse_levelé a polaridade do pulso a medir:1para um pulso alto,0para um pulso baixo.A função funciona em duas fases. Primeiro, se o pino não estiver já em
pulse_level, aguarda que o pino transite parapulse_level(o início do pulso). Depois mede o tempo que o pino permanece empulse_levelantes de transitar de volta (o fim do pulso). O tempo medido é devolvido em microssegundos.timeout_uslimita cada fase independentemente (pelo que uma chamada no pior caso dura até2 * timeout_us). Em caso de timeout, a função devolve um valor negativo identificando qual a fase que expirou:-2– timeout a aguardar o flanco de subida (o pino nunca atingiupulse_level).-1– timeout a aguardar o flanco de descida (o pulso foi mais longo do quetimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Transmite data por bit-banging no pin especificado. O argumento encoding especifica como os bits são codificados, e timing é uma especificação de temporização específica da codificação.
As codificações suportadas são:
0para modulação de duração de pulso «alto baixo». Isto transmitirá os bits 0 e 1 como pulsos temporizados, começando pelo bit mais significativo. O timing deve ser um tuplo de quatro nanosegundos no formato(high_time_0, low_time_0, high_time_1, low_time_1). Por exemplo,(400, 850, 800, 450)é a especificação de temporização para LEDs RGB WS2812 a 800kHz.
A precisão da temporização depende do hardware; MCUs mais rápidos produzem pulsos mais precisos (tipicamente dezenas de nanosegundos).
Nota
Para controlar tiras WS2812 / NeoPixel, consulte o módulo
neopixelpara uma API de nível mais alto.
Constantes¶
As constantes abaixo são devolvidas por reset_cause() e identificam o motivo do último reset do MCU. Disponíveis nos ports STM32 e mimxrt; o port alif (OpenMV Cam AE3) não expõe actualmente constantes de causa de reset e o seu reset_cause() devolve sempre 0.
- machine.WDT_RESET: int¶
Reset causado pela expiração do temporizador watchdog. Ports STM32 e mimxrt.
- machine.SOFT_RESET: int¶
Reset causado por
soft_reset()(o interpretador Python reiniciou sem reset de hardware). Ports STM32 e mimxrt.
Classes¶
- classe Pin – controlar pinos I/O
- classe Signal – controlo e leitura de dispositivos de E/S externos
- classe LED – controlo portátil do LED integrado
- classe ADC – conversão analógico-digital
- classe PWM – modulação por largura de pulso
- classe UART – bus de comunicação série duplex
- classe SPI – protocolo de barramento de interface periférica série (lado do controlador)
- classe SoftSPI – barramento SPI emulado por software
- classe I2C – um protocolo série de dois fios
- classe SoftI2C – barramento I2C emulado por software
- classe I2CTarget – um dispositivo alvo I2C
- classe I2S – protocolo de barramento Inter-IC Sound
- classe CAN – protocolo Controller Area Network
- classe RTC – relógio de tempo real
- classe Timer – temporizador virtual periódico / de disparo único
- classe WDT – temporizador watchdog
- classe SDCard – controlador de cartão SD / MMC
- classe Counter – contador de impulsos
- classe Encoder – descodificador em quadratura