الصنف Pin -- التحكم في دبابيس الإدخال/الإخراج

يمثل كائن Pin دبوس GPIO واحدًا على STM32. وهو يوفر طرقًا لتهيئة وضع الدبوس (إدخال، إخراج، وظيفة بديلة، تناظري) ومقاومات السحب، ولقراءة مستواه الرقمي أو قيادته. للاطلاع على أخذ العينات التناظرية راجع pyb.ADC؛ ولتعداد الوظائف البديلة راجع PinAF.

جميع دبابيس الترويسة معرّفة مسبقًا على هيئة pyb.Pin.board.<name>. تكشف معظم كاميرات STM32 OpenMV Cam عن دبابيس ترويسة الإدخال/الإخراج P0 ... P9؛ بينما تكشف 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 - تهيئة الدبوس للوظيفة البديلة، دفع-سحب؛

    • 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

تهيئة الدبوس كإخراج رقمي بمشغّل دفع-سحب (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_DOWN: int

تمكين مقاومة السحب الداخلية للأسفل على الدبوس.