класс ExtInt – настройка выводов I/O для прерывания по внешним событиям¶
Микроконтроллеры 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, строкой с именем вывода или целым числом в диапазоне16-21для выбора внутреннего источника прерывания.mode– режим срабатывания. Один из:Константа
Срабатывание
Нарастающий фронт.
Спадающий фронт.
Нарастающий или спадающий фронт.
pull– конфигурация подтяжки вывода. Одна изpyb.Pin.PULL_NONE,pyb.Pin.PULL_UPилиpyb.Pin.PULL_DOWN.callback– вызываемый объект, выполняемый при срабатывании. Должен принимать ровно один аргумент: номер линии EXTI, которая сработала.
Методы класса¶
Методы¶
Константы¶
- IRQ_RISING: int¶
Запускает прерывание по нарастающему фронту. Python-функция обратного вызова выполняется.
- IRQ_FALLING: int¶
Запускает прерывание по спадающему фронту. Python-функция обратного вызова выполняется.
- IRQ_RISING_FALLING: int¶
Запускает прерывание по любому фронту. Python-функция обратного вызова выполняется.
- EVT_RISING: int¶
Направляет нарастающий фронт на вход событий Cortex. Python-функция обратного вызова не вызывается; предназначено для использования с инструкцией
WFEв энергосберегающем коде.