machine --- các hàm liên quan đến phần cứng¶
Module machine chứa các hàm đặc thù liên quan đến phần cứng của một bo mạch cụ thể. Hầu hết các hàm trong module này cho phép truy cập trực tiếp và không bị hạn chế vào các khối phần cứng trên hệ thống (như CPU, bộ định thời, bus, v.v.).
Truy cập bộ nhớ¶
Module cung cấp ba đối tượng có thể đăng ký dùng để truy cập bộ nhớ thô. Mỗi đối tượng hoạt động như một mảng thưa được lập chỉ mục theo địa chỉ byte: value = memN[addr] để đọc, memN[addr] = value để ghi. Địa chỉ luôn là địa chỉ byte, bất kể độ rộng truy cập.
- machine.mem8¶
Bộ truy cập bộ nhớ 8-bit có thể đăng ký.
mem8[addr]đọc mộtinttrong khoảng 0-255 từ byte tạiaddr;mem8[addr] = valueghi 8 bit thấp củavalue.addrphải căn chỉnh theo 1 byte (bất kỳ địa chỉ nào).
- machine.mem16¶
Bộ truy cập bộ nhớ 16-bit (halfword) có thể đăng ký.
mem16[addr]đọc mộtinttrong khoảng 0-65535;mem16[addr] = valueghi 16 bit thấp.addrphải căn chỉnh theo 2 byte.
- machine.mem32¶
Bộ truy cập bộ nhớ 32-bit (word) có thể đăng ký.
mem32[addr]đọc mộtinttrong khoảng 0-0xFFFFFFFF;mem32[addr] = valueghi 32 bit thấp.addrphải căn chỉnh theo 4 byte.
Ví dụ sử dụng (các thanh ghi dành riêng cho vi điều khiển STM32H7 -- trên OpenMV Cam H7 / H7 Plus / Pure Thermal, chân header P0 được nối với 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
Các hàm khác¶
- machine.unique_id() bytes¶
Trả về một đối tượng
byteschứa định danh duy nhất cho bo mạch này. Giá trị được đọc từ phần cứng của MCU (thường là số seri thiết bị được lập trình tại nhà máy), do đó nó ổn định qua các lần khởi động lại và khác nhau giữa các bo mạch.Độ dài phụ thuộc vào họ MCU -- 12 byte trên STM32, 8 byte trên các port mimxrt và alif. Nếu ứng dụng của bạn cần ID có độ dài cố định, hãy cắt hoặc băm giá trị trả về.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Đo độ rộng của một xung đơn trên
pinvà trả về thời gian của nó tính bằng micro giây.pinphải được cấu hình như một đầu vào kỹ thuật số.pulse_levellà cực tính xung cần đo thời gian:1cho xung cao,0cho xung thấp.Hàm hoạt động theo hai giai đoạn. Đầu tiên, nếu chân (pin) chưa ở
pulse_level, nó chờ chân chuyển sangpulse_level(bắt đầu xung). Sau đó nó đo thời gian chân ở tạipulse_leveltrước khi chuyển trở lại (kết thúc xung). Thời gian đo được trả về tính bằng micro giây.timeout_usgiới hạn mỗi giai đoạn một cách độc lập (do đó một lệnh gọi trong trường hợp xấu nhất kéo dài đến2 * timeout_us). Khi hết thời gian chờ, hàm trả về một giá trị âm xác định giai đoạn nào đã hết thời gian:-2-- hết thời gian chờ cạnh dẫn (chân (pin) không bao giờ đạtpulse_level).-1-- hết thời gian chờ cạnh cuối (xung dài hơntimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Truyền data bằng cách bit-banging chân (pin) pin được chỉ định. Đối số encoding chỉ định cách các bit được mã hóa, và timing là thông số kỹ thuật thời gian đặc thù cho mã hóa.
Các mã hóa được hỗ trợ:
0cho điều chế thời lượng xung "high low". Điều này sẽ truyền các bit 0 và 1 dưới dạng các xung có thời gian, bắt đầu từ bit có nghĩa nhất. timing phải là một tuple bốn phần tử tính bằng nano giây theo định dạng(high_time_0, low_time_0, high_time_1, low_time_1). Ví dụ,(400, 850, 800, 450)là thông số kỹ thuật thời gian cho đèn LED RGB WS2812 ở 800kHz.
Độ chính xác thời gian phụ thuộc vào phần cứng; MCU nhanh hơn tạo ra các xung chặt chẽ hơn (thường hàng chục nano giây).
Ghi chú
Để điều khiển các dải WS2812 / NeoPixel, hãy xem module
neopixelđể có API cấp cao hơn.
Hằng số¶
Các hằng số dưới đây được trả về bởi reset_cause() và xác định lý do MCU reset lần cuối. Có sẵn trên các port STM32 và mimxrt; port alif (OpenMV Cam AE3) hiện không cung cấp hằng số nguyên nhân reset và reset_cause() của nó luôn trả về 0.
- machine.SOFT_RESET: int¶
Reset do
soft_reset()(trình thông dịch Python được khởi động lại mà không reset phần cứng). Các port STM32 và mimxrt.
Lớp¶
- class Pin -- điều khiển chân (pin) I/O
- lớp Signal -- điều khiển và cảm nhận thiết bị I/O bên ngoài
- class LED -- điều khiển đèn LED trên bo mạch đa nền tảng
- lớp ADC -- chuyển đổi tương tự sang số
- class PWM -- điều chế độ rộng xung
- lớp UART -- bus truyền thông nối tiếp song công
- lớp SPI -- giao thức bus giao tiếp ngoại vi nối tiếp (phía điều khiển)
- lớp SoftSPI -- bus SPI mô phỏng bằng phần mềm
- lớp I2C -- giao thức nối tiếp hai dây
- lớp SoftI2C -- bus I2C mô phỏng bằng phần mềm
- lớp I2CTarget -- thiết bị đích I2C
- class I2S -- Giao thức bus âm thanh Inter-IC
- class CAN -- Giao thức Controller Area Network
- class RTC -- đồng hồ thời gian thực
- lớp Timer -- bộ định thời ảo định kỳ / một lần
- lớp WDT -- bộ định thời watchdog
- lớp SDCard -- trình điều khiển thẻ SD / MMC
- class Counter -- bộ đếm xung
- class Encoder -- bộ giải mã cầu phương