class Pin – controlo de pinos de E/S

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

Todos os pinos do conector estão predefinidos como pyb.Pin.board.<name>. A maioria das OpenMV Cams STM32 expõe os pinos de E/S 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 par porta/pino STM32 subjacente também pode ser endereçado diretamente através de pyb.Pin.cpu.<name>, designado pela letra da porta seguida do número do pino (por exemplo pyb.Pin.cpu.A0). O mapeamento de cada pino do conector OpenMV para um pino da CPU é fixo pela placa.

Os pinos também podem ser selecionados pelo nome em formato de cadeia de caracteres:

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

Podem ser adicionados nomes definidos pelo utilizador 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")

Em alternativa, pode ser instalada uma função de mapeamento personalizada 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 ao mapeador.

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

  1. É passado diretamente um objeto Pin.

  2. A função de mapeamento fornecida pelo utilizador devolve um pino.

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

  4. A cadeia de caracteres corresponde a um nome de pino do conector (P0, P1, …).

  5. A cadeia de caracteres corresponde a um nome de porta/pino da CPU (A0, B7, …).

Execute 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 forem dados argumentos adicionais, estes são encaminhados 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 ativar ou desativar).

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 como entrada;

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

    • Pin.OUT_OD - configura o pino como saída, com controlo de dreno aberto;

    • 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, dreno aberto;

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

  • pull pode ser um dos seguintes:

    • Pin.PULL_NONE - sem resistências de pull-up ou pull-down;

    • Pin.PULL_UP - ativa a resistência de pull-up;

    • Pin.PULL_DOWN - ativa a resistência de pull-down.

    Quando um pino tem o modo de pull Pin.PULL_UP ou Pin.PULL_DOWN ativado, esse pino é ligado a 3V3 ou GND, respetivamente, através de uma resistência interna (tipicamente dezenas de kOhm – consulte as características elétricas na folha de dados do STM32 para a OpenMV Cam em uso).

  • value se não for None irá definir o valor de saída da porta antes de ativar o pino.

  • alt pode ser usado quando o modo é 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 denominado af, que ainda pode ser usado se necessário.

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

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

  • Sem argumento, devolve 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 a alto, caso contrário é colocado a baixo.

__str__() str

Devolve uma cadeia de caracteres que descreve o objeto pino.

af() int

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

af_list() List[PinAF]

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

gpio() int

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

mode() int

Devolve o modo atualmente configurado do pino. O inteiro devolvido 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]

Devolve os nomes da CPU e do conector para este pino.

pin() int

Obtém o número do pino.

port() int

Obtém a porta do pino.

pull() int

Devolve o pull atualmente configurado do pino. O inteiro devolvido 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 de dreno aberto.

ANALOG: int

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

ALT: int

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

AF_PP: int

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

AF_OD: int

Configura o pino para função alternativa com driver de dreno aberto.

PULL_NONE: int

Desativa as resistências de pull-up e pull-down no pino.

PULL_UP: int

Ativa a resistência de pull-up interna no pino.

PULL_DOWN: int

Ativa a resistência de pull-down interna no pino.