class Pin – I/O 핀 제어

Pin 객체는 STM32의 단일 GPIO를 나타냅니다. 핀의 모드(입력, 출력, 대체 기능, 아날로그)와 풀 저항을 구성하고 디지털 레벨을 읽거나 구동하는 메서드를 제공합니다. 아날로그 샘플링에 대해서는 pyb.ADC를, 대체 기능 열거에 대해서는 PinAF를 참조하십시오.

모든 헤더 핀은 pyb.Pin.board.<name> 형태로 미리 정의되어 있습니다. 대부분의 STM32 OpenMV Cam은 I/O 헤더 핀 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)

주어진 id와 연결된 새 Pin 객체를 생성합니다. 추가 인자가 주어지면 핀을 구성하기 위해 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 풀 모드가 활성화되면, 해당 핀은 내부 저항(일반적으로 수십 kOhm – 사용 중인 OpenMV Cam에 대한 STM32 데이터시트의 전기적 특성 참조)을 통해 각각 3V3 또는 GND로 당겨집니다.

  • 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

핀에 현재 구성된 대체 기능을 반환합니다. 반환되는 정수는 init 함수의 af 인자에 허용되는 상수 중 하나와 일치합니다.

af_list() List[PinAF]

이 핀에 사용 가능한 대체 기능의 배열을 반환합니다.

gpio() int

이 핀과 연결된 GPIO 블록의 기본 주소를 반환합니다.

mode() int

핀에 현재 구성된 모드를 반환합니다. 반환되는 정수는 init 함수의 mode 인자에 허용되는 상수 중 하나와 일치합니다.

name() str

핀 이름을 가져옵니다.

names() List[str]

이 핀의 cpu 및 board 이름을 반환합니다.

pin() int

핀 번호를 가져옵니다.

port() int

핀 포트를 가져옵니다.

pull() int

핀에 현재 구성된 풀을 반환합니다. 반환되는 정수는 init 함수의 pull 인자에 허용되는 상수 중 하나와 일치합니다.

상수

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

핀의 내부 풀다운 저항을 활성화합니다.