คลาส ExtInt -- กำหนดค่าพิน I/O เพื่ออินเทอร์รัปต์บนเหตุการณ์ภายนอก

MCU STM32 แบ่งตัวควบคุมอินเทอร์รัปต์ภายนอก (EXTI) ออกเป็นสองช่วง: สาย 0-15 ถูกขับจากพิน GPIO และสายที่สูงกว่า 15 เชื่อมต่อกับแหล่งภายใน (RTC alarm, RTC wakeup, USB wakeup เป็นต้น) จำนวนสายทั้งหมดและการแมปสายภายในที่สูงกว่า 15 นั้นขึ้นอยู่กับ MCU เฉพาะ โปรดดูส่วน EXTI ของคู่มืออ้างอิงสำหรับ MCU ของ OpenMV Cam เพื่อดูการกำหนดที่ชัดเจน

สาย GPIO แต่ละเส้น N สามารถถูกขับโดยพิน PxN บนพอร์ต GPIO ใดก็ได้ในแต่ละครั้ง -- ตัวอย่างเช่น สาย 0 อาจแมปไปยัง PA0, PB0, PC0 หรือพิน 0 ของพอร์ต A ถึงพอร์ต K อื่นๆ แต่ครั้งละหนึ่งเส้นทางเท่านั้น

ตัวอย่าง:

def callback(line):
    print("line =", line)

extint = pyb.ExtInt(pin, pyb.ExtInt.IRQ_FALLING, pyb.Pin.PULL_UP, callback)

ขอบขาลงทุกครั้งบน pin จะเรียก callback ExtInt กำหนดค่าสาย GPIO เป็นอินพุตโดยอัตโนมัติ คุณไม่จำเป็นต้องทำเองอีกต่อไป

Note

ปุ่มกดแบบกลไก "สั่น" และการกดหรือปล่อยครั้งเดียวมักสร้างขอบหลายขอบ ดูตัวอย่างเช่น บทนำการดีบาวนซ์นี้ สำหรับเทคนิคต่างๆ

การลงทะเบียนคอลแบ็กสองรายการบนพินเดียวกันจะทำให้เกิดข้อยกเว้น

หาก pin ถูกส่งเป็นจำนวนเต็ม ระบบจะถือว่ามันระบุหนึ่งในสายอินเทอร์รัปต์ภายในและต้องเป็น >= 16 และต่ำกว่าจำนวนสาย EXTI ทั้งหมดของ MCU ค่าพินอื่นๆ จะถูกแก้ไขผ่านตัวแมปพินมาตรฐาน

นอกจากโหมด IRQ_* แล้ว ยังมีโหมดเหตุการณ์ EVT_RISING, EVT_FALLING และ EVT_RISING_FALLING ที่กำหนดเส้นทางการเปลี่ยนแปลงไปยังอินพุตเหตุการณ์ของโปรเซสเซอร์ (ใช้กับคำสั่ง WFE สำหรับการรอแบบประหยัดพลังงาน) โหมด EVT_* ไม่เรียกคอลแบ็ก Python และมีไว้สำหรับการใช้งานโหมดสลีป / การจัดการพลังงาน โค้ดแอปพลิเคชันทั่วไปควรใช้โหมด IRQ_*

คอนสตรักเตอร์

class pyb.ExtInt(pin: int | str | Pin, mode: int, pull: int, callback: Callable[[int], None])

สร้างออบเจ็กต์ ExtInt

  • pin -- พินที่จะเปิดใช้งานอินเทอร์รัปต์ สามารถเป็นออบเจ็กต์ Pin, สตริงชื่อพิน หรือจำนวนเต็มในช่วง 16-21 เพื่อเลือกแหล่งอินเทอร์รัปต์ภายใน

  • mode -- โหมดทริกเกอร์ หนึ่งใน:

    ค่าคงที่

    ทริกเกอร์

    ExtInt.IRQ_RISING

    ขอบขาขึ้น

    ExtInt.IRQ_FALLING

    ขอบขาลง

    ExtInt.IRQ_RISING_FALLING

    ขอบขาขึ้นหรือขาลงก็ได้

  • pull -- การกำหนดค่าพูลของพิน หนึ่งใน pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP หรือ pyb.Pin.PULL_DOWN

  • callback -- callable ที่ถูกเรียกเมื่อเกิดทริกเกอร์ ต้องรับอาร์กิวเมนต์หนึ่งตัวพอดี: หมายเลขสาย EXTI ที่ทำงาน

เมธอดคลาส

classmethod regs() None

แสดงเนื้อหาของรีจิสเตอร์อุปกรณ์ต่อพ่วง EXTI (สำหรับการดีบัก)

เมธอด

disable() None

ปิดใช้งานอินเทอร์รัปต์ที่เกี่ยวข้องกับออบเจ็กต์ ExtInt นี้ มีประโยชน์สำหรับการดีบาวนซ์ในซอฟต์แวร์

enable() None

เปิดใช้งานอินเทอร์รัปต์อีกครั้งที่ถูกปิดไว้ก่อนหน้าด้วย disable()

line() int

คืนค่าหมายเลขสาย EXTI ที่ออบเจ็กต์นี้ถูกแมปไว้

swint() None

ทริกเกอร์คอลแบ็กจากซอฟต์แวร์ (ราวกับว่าขอบที่กำหนดค่าไว้เกิดขึ้นบนสาย)

ค่าคงที่

IRQ_RISING: int

ทริกเกอร์อินเทอร์รัปต์บนขอบขาขึ้น คอลแบ็ก Python จะทำงาน

IRQ_FALLING: int

ทริกเกอร์อินเทอร์รัปต์บนขอบขาลง คอลแบ็ก Python จะทำงาน

IRQ_RISING_FALLING: int

ทริกเกอร์อินเทอร์รัปต์บนขอบใดก็ได้ คอลแบ็ก Python จะทำงาน

EVT_RISING: int

กำหนดเส้นทางขอบขาขึ้นไปยังอินพุตเหตุการณ์ Cortex ไม่มีการเรียกคอลแบ็ก Python; มีไว้สำหรับใช้กับคำสั่ง WFE ในโค้ดที่ประหยัดพลังงาน

EVT_FALLING: int

กำหนดเส้นทางขอบขาลงไปยังอินพุตเหตุการณ์ Cortex ไม่มีการเรียกคอลแบ็ก Python

EVT_RISING_FALLING: int

กำหนดเส้นทางขอบใดก็ได้ไปยังอินพุตเหตุการณ์ Cortex ไม่มีการเรียกคอลแบ็ก Python