клас ExtInt – налаштування виводів введення/виведення для переривань від зовнішніх подій

Мікроконтролери STM32 розділяють контролер зовнішніх переривань (EXTI) на два діапазони: лінії 0–15 керуються від виводів GPIO, а лінії вище 15 прив’язані до внутрішніх джерел (будильник RTC, пробудження RTC, пробудження USB тощо). Загальна кількість ліній та відповідність внутрішніх ліній вище 15 залежать від конкретного мікроконтролера; точні призначення наведено у розділі EXTI довідкового посібника для МК даної 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 як вхід; вам не потрібно робити це самостійно.

Примітка

Механічні кнопки «брязкають», і один натиск або відпускання часто генерує декілька фронтів. Перегляньте, наприклад, цей посібник з усунення брязкоту для відповідних технік.

Реєстрація двох зворотних викликів на одному виводі спричиняє виняток.

Якщо pin передається як ціле число, передбачається, що воно ідентифікує одну з внутрішніх ліній переривань; значення має бути >= 16 і менше загальної кількості ліній EXTI мікроконтролера. Будь-яке інше значення виводу обробляється через стандартний маппер виводів.

На додачу до режимів 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, рядком з іменем виводу або цілим числом у діапазоні 1621 для вибору внутрішнього джерела переривання.

  • 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 – виклик, що виконується при спрацюванні. Повинен приймати рівно один аргумент: номер лінії 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 не викликається.