class Pin – controllo dei pin di I/O

Un oggetto Pin rappresenta un singolo GPIO sull’STM32. Fornisce metodi per configurare la modalità del pin (input, output, funzione alternativa, analogica) e le resistenze di pull, e per leggere o pilotare il suo livello digitale. Per il campionamento analogico vedere pyb.ADC; per l’enumerazione delle funzioni alternative vedere PinAF.

Tutti i pin del connettore sono predefiniti come pyb.Pin.board.<name>. La maggior parte delle OpenMV Cam STM32 espone i pin del connettore di I/O P0P9; la OpenMV Cam N6 espone pin aggiuntivi fino a P18

p0 = pyb.Pin.board.P0
g = pyb.Pin(pyb.Pin.board.P0, pyb.Pin.IN)

Il port/pin sottostante dell’STM32 può anche essere indirizzato direttamente tramite pyb.Pin.cpu.<name>, denominato con la lettera del port seguita dal numero del pin (per esempio pyb.Pin.cpu.A0). La corrispondenza tra ciascun pin del connettore OpenMV e un pin della CPU è fissata dalla scheda.

I pin possono anche essere selezionati tramite nome stringa:

g = pyb.Pin("P0", pyb.Pin.OUT_PP)

È possibile aggiungere nomi definiti dall’utente con Pin.dict()

MyMapperDict = {"LeftMotorDir": pyb.Pin.cpu.A0}
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)

e interrogarli successivamente:

pin = pyb.Pin("LeftMotorDir")

In alternativa, è possibile installare una funzione di mappatura personalizzata con Pin.mapper()

def MyMapper(pin_name):
    if pin_name == "LeftMotorDir":
        return pyb.Pin.cpu.A0

pyb.Pin.mapper(MyMapper)

così una chiamata a pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) passa "LeftMotorDir" direttamente al mapper.

Il seguente ordine determina come un nome viene mappato su un pin fisico:

  1. Viene passato direttamente un oggetto Pin.

  2. La funzione mapper fornita dall’utente restituisce un pin.

  3. Il dizionario fornito dall’utente contiene una chiave corrispondente.

  4. La stringa corrisponde al nome di un pin della scheda (P0, P1, …).

  5. La stringa corrisponde al nome di un port/pin della CPU (A0, B7, …).

Chiamare pyb.Pin.debug(True) per stampare informazioni diagnostiche su come ciascun oggetto viene mappato su un pin.

Costruttori

class pyb.Pin(id: str | Pin, *args, **kwargs)

Crea un nuovo oggetto Pin associato all”id indicato. Se vengono forniti argomenti aggiuntivi, questi vengono inoltrati a Pin.init() per configurare il pin.

Metodi di classe

classmethod debug(state: bool | None = None) bool | None

Ottiene o imposta lo stato di debug (True o False per attivo o disattivo).

classmethod dict(dict: dict | None = None) dict | None

Ottiene o imposta il dizionario del mapper dei pin.

classmethod mapper(fun: Callable[[str], Pin] | None = None) Callable[[str], Pin] | None

Ottiene o imposta la funzione mapper dei pin.

Metodi

init(mode: int, pull: int = Pin.PULL_NONE, *, value: int | None = None, alt: int | str = -1) None

Inizializza il pin:

  • mode può essere uno tra:

    • Pin.IN - configura il pin come input;

    • Pin.OUT_PP - configura il pin come output, con controllo push-pull;

    • Pin.OUT_OD - configura il pin come output, con controllo open-drain;

    • Pin.ALT - configura il pin per una funzione alternativa, input o output;

    • Pin.AF_PP - configura il pin per una funzione alternativa, push-pull;

    • Pin.AF_OD - configura il pin per una funzione alternativa, open-drain;

    • Pin.ANALOG - configura il pin come analogico.

  • pull può essere uno tra:

    • Pin.PULL_NONE - nessuna resistenza di pull-up o pull-down;

    • Pin.PULL_UP - abilita la resistenza di pull-up;

    • Pin.PULL_DOWN - abilita la resistenza di pull-down.

    Quando un pin ha la modalità di pull Pin.PULL_UP o Pin.PULL_DOWN abilitata, quel pin viene portato rispettivamente a 3V3 o GND tramite una resistenza interna (tipicamente decine di kOhm – vedere le caratteristiche elettriche nel datasheet dell’STM32 per la OpenMV Cam in uso).

  • value, se diverso da None, imposterà il valore di output del port prima di abilitare il pin.

  • alt può essere usato quando la modalità è Pin.ALT, Pin.AF_PP o Pin.AF_OD per impostare l’indice o il nome di una delle funzioni alternative associate a un pin. Questo argomento era precedentemente chiamato af, che può ancora essere usato se necessario.

value(value: Any | None = None) int | None

Ottiene o imposta il livello logico digitale del pin:

  • Senza argomenti, restituisce 0 o 1 a seconda del livello logico del pin.

  • Con value indicato, imposta il livello logico del pin. value può essere qualsiasi cosa convertibile in un booleano. Se si converte in True, il pin viene impostato alto, altrimenti viene impostato basso.

__str__() str

Restituisce una stringa che descrive l’oggetto pin.

af() int

Restituisce la funzione alternativa attualmente configurata del pin. L’intero restituito corrisponderà a una delle costanti consentite per l’argomento af della funzione init.

af_list() List[PinAF]

Restituisce un array delle funzioni alternative disponibili per questo pin.

gpio() int

Restituisce l’indirizzo base del blocco GPIO associato a questo pin.

mode() int

Restituisce la modalità attualmente configurata del pin. L’intero restituito corrisponderà a una delle costanti consentite per l’argomento mode della funzione init.

name() str

Ottiene il nome del pin.

names() List[str]

Restituisce i nomi cpu e board per questo pin.

pin() int

Ottiene il numero del pin.

port() int

Ottiene il port del pin.

pull() int

Restituisce il pull attualmente configurato del pin. L’intero restituito corrisponderà a una delle costanti consentite per l’argomento pull della funzione init.

Costanti

IN: int

Configura il pin come input digitale (ad alta impedenza).

OUT_PP: int

Configura il pin come output digitale con un driver push-pull.

OUT_OD: int

Configura il pin come output digitale con un driver open-drain.

ANALOG: int

Configura il pin come input analogico (ad es. per l’uso con ADC).

ALT: int

Configura il pin come funzione alternativa (input o output).

AF_PP: int

Configura il pin come funzione alternativa con un driver push-pull.

AF_OD: int

Configura il pin come funzione alternativa con un driver open-drain.

PULL_NONE: int

Disabilita sia le resistenze di pull-up che di pull-down sul pin.

PULL_UP: int

Abilita la resistenza di pull-up interna sul pin.

PULL_DOWN: int

Abilita la resistenza di pull-down interna sul pin.