класс Pin – управление выводами ввода-вывода

Объект Pin представляет один вывод GPIO на STM32. Он предоставляет методы для настройки режима вывода (вход, выход, альтернативная функция, аналоговый) и подтягивающих резисторов, а также для чтения или установки его цифрового уровня. Для аналогового измерения см. pyb.ADC; для перечисления альтернативных функций см. PinAF.

Все выводы разъёма предопределены как pyb.Pin.board.<name>. Большинство STM32 OpenMV Cam предоставляют выводы разъёма ввода-вывода P0P9; OpenMV Cam N6 предоставляет дополнительные выводы вплоть до P18:

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

К физическому порту/выводу STM32 также можно обращаться напрямую через pyb.Pin.cpu.<name>, обозначаемому буквой порта, за которой следует номер вывода (например, pyb.Pin.cpu.A0). Сопоставление каждого вывода разъёма OpenMV выводу CPU фиксировано платой.

Выводы также можно выбирать по строковому имени:

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

Пользовательские имена можно добавить с помощью Pin.dict():

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

и запросить обратно:

pin = pyb.Pin("LeftMotorDir")

Кроме того, с помощью Pin.mapper() можно установить пользовательскую функцию сопоставления:

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

pyb.Pin.mapper(MyMapper)

так что вызов pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP) передаёт "LeftMotorDir" напрямую функции сопоставления.

Следующий порядок определяет, как имя сопоставляется с физическим выводом:

  1. Объект Pin передаётся напрямую.

  2. Заданная пользователем функция сопоставления возвращает вывод.

  3. Заданный пользователем словарь содержит подходящий ключ.

  4. Строка совпадает с именем вывода платы (P0, P1, …).

  5. Строка совпадает с именем порта/вывода CPU (A0, B7, …).

Вызовите pyb.Pin.debug(True) для вывода диагностической информации о том, как каждый объект сопоставляется с выводом.

Конструкторы

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

Создаёт новый объект Pin, связанный с заданным id. Если переданы дополнительные аргументы, они перенаправляются в Pin.init() для настройки вывода.

Методы класса

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

Получает или задаёт состояние отладки (True или False для включения или выключения).

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

Получает или задаёт словарь функции сопоставления выводов.

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

Получает или задаёт функцию сопоставления выводов.

Методы

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

Инициализирует вывод:

  • mode может быть одним из:

    • Pin.IN - настроить вывод как вход;

    • Pin.OUT_PP - настроить вывод как выход с двухтактным управлением;

    • Pin.OUT_OD - настроить вывод как выход с управлением с открытым стоком;

    • Pin.ALT - настроить вывод как альтернативную функцию, вход или выход;

    • Pin.AF_PP - настроить вывод как альтернативную функцию, двухтактную;

    • Pin.AF_OD - настроить вывод как альтернативную функцию, с открытым стоком;

    • Pin.ANALOG - настроить вывод как аналоговый.

  • pull может быть одним из:

    • Pin.PULL_NONE - без подтягивающих резисторов вверх или вниз;

    • Pin.PULL_UP - включить подтягивающий вверх резистор;

    • Pin.PULL_DOWN - включить подтягивающий вниз резистор.

    Когда у вывода включён режим подтяжки Pin.PULL_UP или Pin.PULL_DOWN, этот вывод подтягивается к 3V3 или GND соответственно через внутренний резистор (обычно десятки кОм – см. электрические характеристики в технической документации STM32 для используемой OpenMV Cam).

  • value, если не None, задаёт выходное значение порта перед включением вывода.

  • alt можно использовать, когда режим равен Pin.ALT, Pin.AF_PP или Pin.AF_OD, для задания индекса или имени одной из альтернативных функций, связанных с выводом. Этот аргумент ранее назывался af, который при необходимости всё ещё можно использовать.

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

Получает или задаёт цифровой логический уровень вывода:

  • Без аргумента возвращает 0 или 1 в зависимости от логического уровня вывода.

  • Если задан value, устанавливает логический уровень вывода. value может быть чем угодно, что преобразуется в булево значение. Если оно преобразуется в True, вывод устанавливается в высокий уровень, иначе — в низкий.

__str__() str

Возвращает строку, описывающую объект вывода.

af() int

Возвращает текущую настроенную альтернативную функцию вывода. Возвращаемое целое число совпадает с одной из допустимых констант для аргумента af функции init.

af_list() List[PinAF]

Возвращает массив альтернативных функций, доступных для этого вывода.

gpio() int

Возвращает базовый адрес блока GPIO, связанного с этим выводом.

mode() int

Возвращает текущий настроенный режим вывода. Возвращаемое целое число совпадает с одной из допустимых констант для аргумента mode функции init.

name() str

Возвращает имя вывода.

names() List[str]

Возвращает имена cpu и платы для этого вывода.

pin() int

Возвращает номер вывода.

port() int

Возвращает порт вывода.

pull() int

Возвращает текущую настроенную подтяжку вывода. Возвращаемое целое число совпадает с одной из допустимых констант для аргумента pull функции init.

Константы

IN: int

Настроить вывод как цифровой вход (высокоомный).

OUT_PP: int

Настроить вывод как цифровой выход с двухтактным драйвером.

OUT_OD: int

Настроить вывод как цифровой выход с драйвером с открытым стоком.

ANALOG: int

Настроить вывод как аналоговый вход (например, для использования с ADC).

ALT: int

Настроить вывод как альтернативную функцию (вход или выход).

AF_PP: int

Настроить вывод как альтернативную функцию с двухтактным драйвером.

AF_OD: int

Настроить вывод как альтернативную функцию с драйвером с открытым стоком.

PULL_NONE: int

Отключить оба подтягивающих резистора (вверх и вниз) на выводе.

PULL_UP: int

Включить внутренний подтягивающий вверх резистор на выводе.

PULL_DOWN: int

Включить внутренний подтягивающий вниз резистор на выводе.