class Pin – שליטה בפיני קלט/פלט

אובייקט Pin מייצג GPIO בודד ב-STM32. הוא מספק מתודות להגדרת מצב הפין (קלט, פלט, פונקציה חלופית, אנלוגי) ונגדי משיכה (pull), ולקריאה או נהיגה של הרמה הדיגיטלית שלו. לדגימה אנלוגית ראו pyb.ADC; לרשימת הפונקציות החלופיות ראו PinAF.

כל פיני המחבר מוגדרים מראש כ-pyb.Pin.board.<name>. רוב מצלמות OpenMV Cam מבוססות STM32 חושפות את פיני מחבר הקלט/פלט 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 - הגדרת הפין לפלט, עם בקרת push-pull;

    • Pin.OUT_OD - הגדרת הפין לפלט, עם בקרת open-drain;

    • Pin.ALT - הגדרת הפין לפונקציה חלופית, קלט או פלט;

    • Pin.AF_PP - הגדרת הפין לפונקציה חלופית, push-pull;

    • Pin.AF_OD - הגדרת הפין לפונקציה חלופית, open-drain;

    • Pin.ANALOG - הגדרת הפין למצב אנלוגי.

  • pull יכול להיות אחד מהבאים:

    • Pin.PULL_NONE - ללא נגדי משיכה למעלה או למטה;

    • Pin.PULL_UP - הפעלת נגד המשיכה למעלה (pull-up);

    • Pin.PULL_DOWN - הפעלת נגד המשיכה למטה (pull-down).

    כאשר לפין מופעל מצב המשיכה Pin.PULL_UP או Pin.PULL_DOWN, הפין נמשך ל-3V3 או ל-GND בהתאמה דרך נגד פנימי (בדרך כלל עשרות kOhm – ראו את המאפיינים החשמליים בגיליון הנתונים של ה-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 של פונקציית האתחול.

af_list() List[PinAF]

מחזיר מערך של הפונקציות החלופיות הזמינות עבור פין זה.

gpio() int

מחזיר את כתובת הבסיס של בלוק ה-GPIO המשויך לפין זה.

mode() int

מחזיר את המצב המוגדר כעת של הפין. המספר השלם המוחזר יתאים לאחד הקבועים המותרים לארגומנט mode של פונקציית האתחול.

name() str

מקבל את שם הפין.

names() List[str]

מחזיר את שמות ה-cpu וה-board עבור פין זה.

pin() int

מקבל את מספר הפין.

port() int

מקבל את פורט הפין.

pull() int

מחזיר את מצב המשיכה (pull) המוגדר כעת של הפין. המספר השלם המוחזר יתאים לאחד הקבועים המותרים לארגומנט pull של פונקציית האתחול.

קבועים

IN: int

הגדרת הפין כקלט דיגיטלי (עכבה גבוהה).

OUT_PP: int

הגדרת הפין כפלט דיגיטלי עם נהג push-pull.

OUT_OD: int

הגדרת הפין כפלט דיגיטלי עם נהג open-drain.

ANALOG: int

הגדרת הפין כקלט אנלוגי (לדוגמה לשימוש עם ADC).

ALT: int

הגדרת הפין כפונקציה חלופית (קלט או פלט).

AF_PP: int

הגדרת הפין כפונקציה חלופית עם נהג push-pull.

AF_OD: int

הגדרת הפין כפונקציה חלופית עם נהג open-drain.

PULL_NONE: int

השבתת נגדי המשיכה למעלה ולמטה כאחד בפין.

PULL_UP: int

הפעלת נגד המשיכה הפנימי למעלה (pull-up) בפין.

PULL_DOWN: int

הפעלת נגד המשיכה הפנימי למטה (pull-down) בפין.