MicroPython:Библиотеки/pyb/Класс Pin: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 52: Строка 52:


Итак, привязка номера обычного контакта к какому-то интересному названию осуществляется в следующем порядке:
Итак, привязка номера обычного контакта к какому-то интересному названию осуществляется в следующем порядке:
# Напрямую указываем объект Pin.
# Напрямую указываем объект ''Pin''.
# Создаем пользовательскую привязочную функцию.
# Создаем пользовательскую привязочную функцию.
# Выполняем пользовательскую привязку (нужно, чтобы объект можно было использовать в качестве ключа словаря).
# Выполняем пользовательскую привязку (нужно, чтобы объект можно было использовать в качестве ключа словаря).
Строка 60: Строка 60:
Некоторую отладочную информацию о том, как объект привязан к контакту, можно узнать с помощью метода pyb.Pin.debug(True).
Некоторую отладочную информацию о том, как объект привязан к контакту, можно узнать с помощью метода pyb.Pin.debug(True).


Если у контакта включен режим Pin.PULL_UP или Pin.PULL_DOWN, его резистор на 40 кОм будет притянут, соответственно, либо к 3.3 вольтам, либо к «земле» (за исключением контакта Y5, который оснащен резисторами на 11 кОм).
Если у контакта включен режим [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.PULL_UP|Pin.PULL_UP]] или [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.PULL_DOWN|Pin.PULL_DOWN]], его [[резистор]] на [[40 кОм]] будет притянут, соответственно, либо к ''3.3 вольтам'', либо к ''«земле»'' (за исключением контакта ''Y5'', который оснащен [[резистор]]ами на [[11 кОм]]).
Теперь, когда на GPIO-контакте будет замечен задний фронт, это будет запускать функцию обратного вызова. Внимание: механические кнопки страдают так называемым «дребезгом» – их нажатие или отпускание может привести к нескольким ложным срабатываниям. Более подробно о дребезге, а также о том, как с ним справиться, читайте [http://www.eng.utah.edu/~cs5780/debouncing.pdf тут].


Все объекты Pin привязываются к GPIO-контактам через привязывающую функцию.
Теперь, когда на GPIO-контакте будет замечен задний фронт, это будет запускать функцию обратного вызова. Внимание: механические кнопки страдают так называемым ''«дребезгом»'' – их нажатие или отпускание может привести к нескольким ложным срабатываниям. Более подробно о дребезге, а также о том, как с ним справиться, читайте [http://www.eng.utah.edu/~cs5780/debouncing.pdf тут].
 
Все объекты ''Pin'' привязываются к GPIO-контактам через привязывающую функцию.


== Конструкторы ==
== Конструкторы ==
Строка 104: Строка 105:
== Класс PinAF – альтернативные функции контакта ==
== Класс PinAF – альтернативные функции контакта ==


В классе Pin реализована программная презентация физического контакта микропроцессора. Один контакт может выполнять несколько функций (GPIO, I2C SDA и т.д.) – их презентация реализуется с помощью класса PinAF.
В классе ''Pin'' реализована программная презентация физического контакта [[микропроцессор]]а. Один контакт может выполнять несколько функций ([[GPIO]], [[I2C]] [[SDA]] и т.д.) – их презентация реализуется с помощью класса PinAF.


Пример использования:
Пример использования:
Строка 113: Строка 114:
</syntaxhighlight>
</syntaxhighlight>


В x3_af теперь будет содержаться массив объектов PinAF, доступных на контакте X3.  
В ''x3_af'' теперь будет содержаться массив объектов ''PinAF'', доступных на контакте X3.  


На PyBoard в x3_af будет содержаться:
На [[PyBoard]] в ''x3_af'' будет содержаться:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python" enclose="div">
Строка 123: Строка 124:
Обычно каждый контакт самостоятельно настраивает свои альтернативные функции, но иногда одна и та же функция доступна на разных контактах, что вынуждает прибегнуть к использованию дополнительного кода.
Обычно каждый контакт самостоятельно настраивает свои альтернативные функции, но иногда одна и та же функция доступна на разных контактах, что вынуждает прибегнуть к использованию дополнительного кода.


Чтобы настроить X3 на использование TIM2_CH3, можно выполнить следующее:
Чтобы настроить ''X3'' на использование ''TIM2_CH3'', можно выполнить следующее:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python" enclose="div">
Строка 136: Строка 137:


===Методы===
===Методы===
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF|Класс PinAF/pinaf.__str__()|pinaf.__str__()]]
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF|Класс PinAF/pinaf.index()|pinaf.index()]]
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF|Класс PinAF/pinaf.name()|pinaf.name()]]
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF|Класс PinAF/pinaf.reg()|pinaf.reg()]]


* pinaf.__str__() – возвращает строку, описывающую альтернативную функцию.
* pinaf.__str__() – возвращает строку, описывающую альтернативную функцию.

Версия от 13:53, 10 октября 2020

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс Pin – управление I/O-контактами[1]

Класс Pin – это базовый класс для управления I/O-контактами. В нем есть методы, чтобы задать режим работы контакта (входной, выходной и т.д.), а также методы, позволяющие задать и прочесть цифровой логический уровень контакта. Об управлении аналоговыми контактами читайте в статье о классе ADC.

Модель использования

Все контакты платы предварительно определены в pyb.Pin.board.Name:

x1_pin = pyb.Pin.board.X1

g = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.IN)

Контакты CPU, соответствующие контактам платы, заданы в pyb.Pin.cpu.Name. Название CPU-контакта состоит из буквы порта, после которой идет номер контакта. На PYBv1.0 pyb.Pin.board.X1 и pyb.Pin.cpu.A0 – это один и тот же контакт.

Также можно использовать строки:

g = pyb.Pin('X1', pyb.Pin.OUT_PP)

Кроме того, пользователи могут задавать собственные названия контактов...

MyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 }
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)

...и запрашивать привязочные данные:

pin = pyb.Pin("LeftMotorDir")

Также пользователь может создать собственную привязочную функцию:

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. Задаем строку, соответствующую номеру платы.
  5. Задаем строку, соответствующую контакту/порту CPU.

Некоторую отладочную информацию о том, как объект привязан к контакту, можно узнать с помощью метода pyb.Pin.debug(True).

Если у контакта включен режим Pin.PULL_UP или Pin.PULL_DOWN, его резистор на 40 кОм будет притянут, соответственно, либо к 3.3 вольтам, либо к «земле» (за исключением контакта Y5, который оснащен резисторами на 11 кОм).

Теперь, когда на GPIO-контакте будет замечен задний фронт, это будет запускать функцию обратного вызова. Внимание: механические кнопки страдают так называемым «дребезгом» – их нажатие или отпускание может привести к нескольким ложным срабатываниям. Более подробно о дребезге, а также о том, как с ним справиться, читайте тут.

Все объекты Pin привязываются к GPIO-контактам через привязывающую функцию.

Конструкторы

Методы класса

Методы

Константы

Класс PinAF – альтернативные функции контакта

В классе Pin реализована программная презентация физического контакта микропроцессора. Один контакт может выполнять несколько функций (GPIO, I2C SDA и т.д.) – их презентация реализуется с помощью класса PinAF.

Пример использования:

x3 = pyb.Pin.board.X3
x3_af = x3.af_list()

В x3_af теперь будет содержаться массив объектов PinAF, доступных на контакте X3.

На PyBoard в x3_af будет содержаться:

[Pin.AF1_TIM2, Pin.AF2_TIM5, Pin.AF3_TIM9, Pin.AF7_USART2]

Обычно каждый контакт самостоятельно настраивает свои альтернативные функции, но иногда одна и та же функция доступна на разных контактах, что вынуждает прибегнуть к использованию дополнительного кода.

Чтобы настроить X3 на использование TIM2_CH3, можно выполнить следующее:

pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=pyb.Pin.AF1_TIM2)

...или...

pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=1)

Методы

  • pinaf.__str__() – возвращает строку, описывающую альтернативную функцию.
  • pinaf.index() – возвращает индекс альтернативной функции.
  • pinaf.name() – возвращает название альтернативной функции.
  • pinaf.reg() – возвращает базовый регистр, связанный с периферийным устройством, которое использует эту альтернативную функцию. К примеру, если альтернативная функция – это TIM2_CH3, то эта функция вернет stm.TIM2.


<syntaxhighlight lang="python" enclose="div">

См.также

Внешние ссылки