class Pin – controle de pinos de I/O

Um objeto Pin representa um único GPIO no STM32. Ele fornece métodos para configurar o modo do pino (entrada, saída, função alternativa, analógico) e os resistores de pull, além de ler ou acionar seu nível digital. Para amostragem analógica veja pyb.ADC; para a enumeração de funções alternativas veja PinAF.

Todos os pinos do header são predefinidos como pyb.Pin.board.<name>. A maioria das OpenMV Cams STM32 expõe os pinos do header de I/O P0P9; a OpenMV Cam N6 expõe pinos adicionais até P18

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

O port/pin subjacente do STM32 também pode ser endereçado diretamente através de pyb.Pin.cpu.<name>, nomeado como a letra do port seguida pelo número do pino (por exemplo pyb.Pin.cpu.A0). O mapeamento de cada pino do header da OpenMV para um pino da CPU é fixo na placa.

Os pinos também podem ser selecionados por nome em string:

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

Nomes definidos pelo usuário podem ser adicionados com Pin.dict()

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

e consultados de volta:

pin = pyb.Pin("LeftMotorDir")

Alternativamente, uma função de mapeamento personalizada pode ser instalada com Pin.mapper()

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

pyb.Pin.mapper(MyMapper)

assim, uma chamada a pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) passa "LeftMotorDir" diretamente para o mapeador.

A ordem a seguir determina como um nome é mapeado para um pino físico:

  1. Um objeto Pin é passado diretamente.

  2. A função de mapeamento fornecida pelo usuário retorna um pino.

  3. O dicionário fornecido pelo usuário contém uma chave correspondente.

  4. A string corresponde a um nome de pino da placa (P0, P1, …).

  5. A string corresponde a um nome de port/pin da CPU (A0, B7, …).

Chame pyb.Pin.debug(True) para imprimir informações de diagnóstico sobre como cada objeto é mapeado para um pino.

Construtores

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

Cria um novo objeto Pin associado ao id fornecido. Se argumentos adicionais forem dados, eles são repassados para Pin.init() para configurar o pino.

Métodos de classe

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

Obtém ou define o estado de depuração (True ou False para ligado ou desligado).

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

Obtém ou define o dicionário do mapeador de pinos.

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

Obtém ou define a função do mapeador de pinos.

Métodos

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

Inicializa o pino:

  • mode pode ser um dos seguintes:

    • Pin.IN - configura o pino para entrada;

    • Pin.OUT_PP - configura o pino para saída, com controle push-pull;

    • Pin.OUT_OD - configura o pino para saída, com controle open-drain;

    • Pin.ALT - configura o pino para função alternativa, entrada ou saída;

    • Pin.AF_PP - configura o pino para função alternativa, push-pull;

    • Pin.AF_OD - configura o pino para função alternativa, open-drain;

    • Pin.ANALOG - configura o pino para analógico.

  • pull pode ser um dos seguintes:

    • Pin.PULL_NONE - sem resistores de pull-up ou pull-down;

    • Pin.PULL_UP - habilita o resistor de pull-up;

    • Pin.PULL_DOWN - habilita o resistor de pull-down.

    Quando um pino tem o modo de pull Pin.PULL_UP ou Pin.PULL_DOWN habilitado, esse pino é puxado para 3V3 ou GND respectivamente através de um resistor interno (tipicamente dezenas de kOhm – veja as características elétricas no datasheet do STM32 da OpenMV Cam em uso).

  • value se não for None definirá o valor de saída do port antes de habilitar o pino.

  • alt pode ser usado quando o modo for Pin.ALT, Pin.AF_PP ou Pin.AF_OD para definir o índice ou nome de uma das funções alternativas associadas a um pino. Este argumento era anteriormente chamado de af, que ainda pode ser usado se necessário.

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

Obtém ou define o nível de lógica digital do pino:

  • Sem argumento, retorna 0 ou 1 dependendo do nível lógico do pino.

  • Com value fornecido, define o nível lógico do pino. value pode ser qualquer coisa que converta para um booleano. Se converter para True, o pino é colocado em nível alto, caso contrário é colocado em nível baixo.

__str__() str

Retorna uma string descrevendo o objeto do pino.

af() int

Retorna a função alternativa atualmente configurada do pino. O inteiro retornado corresponderá a uma das constantes permitidas para o argumento af da função init.

af_list() List[PinAF]

Retorna um array das funções alternativas disponíveis para este pino.

gpio() int

Retorna o endereço base do bloco GPIO associado a este pino.

mode() int

Retorna o modo atualmente configurado do pino. O inteiro retornado corresponderá a uma das constantes permitidas para o argumento mode da função init.

name() str

Obtém o nome do pino.

names() List[str]

Retorna os nomes da cpu e da placa para este pino.

pin() int

Obtém o número do pino.

port() int

Obtém o port do pino.

pull() int

Retorna o pull atualmente configurado do pino. O inteiro retornado corresponderá a uma das constantes permitidas para o argumento pull da função init.

Constantes

IN: int

Configura o pino como entrada digital (alta impedância).

OUT_PP: int

Configura o pino como saída digital com driver push-pull.

OUT_OD: int

Configura o pino como saída digital com driver open-drain.

ANALOG: int

Configura o pino como entrada analógica (por exemplo, para uso com ADC).

ALT: int

Configura o pino como função alternativa (entrada ou saída).

AF_PP: int

Configura o pino como função alternativa com driver push-pull.

AF_OD: int

Configura o pino como função alternativa com driver open-drain.

PULL_NONE: int

Desabilita os resistores de pull-up e pull-down no pino.

PULL_UP: int

Habilita o resistor de pull-up interno no pino.

PULL_DOWN: int

Habilita o resistor de pull-down interno no pino.