🛠 Première machine à états PIO : un blink sans CPU

Raspberry Pi Pico · intermediaire · Schéma : IMG-pico-intermediaire-2-pico-pio-machine-etats.svg — bloc PIO du RP2040 avec une machine à états (SM0) et sa boucle d'états set/delay/jmp, sortie reliée à GP25, cœur CPU endormi à côté

Objetivos

Comprender la función signature del RP2040: los PIO (Programmable I/O) — 2 bloques de 4 máquinas de estados programables que fabrican interfaces de bajo nivel sin consumir tiempo de CPU. Escribirás una pequeña máquina de estados que hace parpadear el LED GP25 a 1 Hz de forma autónoma, dejando el núcleo principal libre para otras tareas. Cada SM posee 4 registros (X, Y, FIFO, OSR) y ejecuta sus instrucciones en 1 ciclo.

Material

Código completo

# pio_blink.py — d'après la quick reference MicroPython rp2
from machine import Pin
import rp2

@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink_1hz:
    # 1000 cycles par moitié à freq=2000 -> 0,5 s
    set(pins, 1)          # LED ON
    set(x, 31) [6]
    label("high")
    nop [29]            # 30 cycles par boucle
    jmp(x_dec, "high")

    set(pins, 0)          # LED OFF
    set(x, 31) [6]
    label("low")
    nop [29]
    jmp(x_dec, "low")

sm = rp2.StateMachine(0, blink_1hz, freq=2000, set_base=Pin(25))
sm.active(1)              # la PIO clignote seule

# Le CPU est 100 % libre : la tâche ci-dessous tourne en parallèle
import time, machine
aux = machine.Pin(21, machine.Pin.OUT)  # > 
while True:
    aux.toggle
    time.sleep_ms(7)

Verificación esperada

El LED GP25 parpadea a 1 Hz permanentemente, incluso si ejecutas en bucle una tarea de CPU ocupada al lado (el pin auxiliar conmuta mucho más rápido en paralelo). Esta es la prueba de que el temporizador lo mantiene el hardware PIO, no el software. Detén el script en el REPL: la SM se detiene, el CPU debe seguir siendo el maestro.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales