STM32 Розуміння налаштувань GPIO


41

У стандартній периферійній бібліотеці STM32 нам потрібно налаштувати GPIO.

Але є 3 функції, які я не знаю, як їх налаштувати;

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

У GPIO_Speed можна вибрати 4 налаштування

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

Як дізнатися, яку швидкість я вибираю? Чи є якась перевага чи недоліки використання високої або низької швидкості? (наприклад: споживання електроенергії?)

У GPIO_OType можна вибрати 2 налаштування

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

Як знати, що вибрати? а що таке відкритий злив та поштовх?

У GPIO_PuPd є 3 налаштування, з яких можна вибрати

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

Я думаю, що ці налаштування пов'язані з початковою настройкою push push.


Пов’язано: як явно примусити режим «відкритого зливу» на мікроконтролерах, які не підтримують його, наприклад, AVR / Arduino, PIC тощо: electronics.stackexchange.com/a/354993/26234
Габріель Степлес

Відповіді:


45
  • GPIO_PuPd (підтяжка / пониження)

    У цифрових схемах важливо, щоб сигнальні лінії ніколи не дозволяли «плавати». Тобто вони завжди повинні бути у високому або низькому стані. Під час плавання стан не визначений і викликає кілька різних типів проблем.

    Спосіб виправити це - додати резистор із сигнальної лінії до Vcc чи Gnd. Таким чином, якщо лінія не ведеться активно або високо, чи низько, резистор призведе до відтоку потенціалу до відомого рівня.

    АРМ (та інші мікроконтролери) мають вбудовану схему для цього. Таким чином, вам не потрібно додавати іншу частину до схеми. Якщо ви вибрали, наприклад, "GPIO_PuPd_UP", це рівнозначно додати резистор між сигнальною лінією та Vcc.

  • GPIO_OType (тип виходу):

    Push-Pull: це вихідний тип, який більшість людей вважають "стандартним". Коли вихід знижується, він активно «тягнеться» на землю. І навпаки, коли вихід встановлений на високий, він активно «висувається» у бік Vcc. Спрощено, це виглядає приблизно так:

    двотактний

    З іншого боку, вихід з відкритим стоком активний лише в одному напрямку. Він може тягнути штифт до землі, але він не може загнати його високо. Уявіть попереднє зображення, але без верхнього MOSFET. Коли він не тягнеться на землю, MOSFET просто не проводить, що призводить до виходу плаваючого:

    опердраїну

    Для цього виду виходу в ланцюг повинен бути доданий резистор, що підтягується, що призведе до того, що лінія буде виходити високо, коли вона не буде низькою. Це можна зробити за допомогою зовнішньої частини або встановивши значення GPIO_PuPd на GPIO_PuPd_UP.

    Назва походить від того, що стік MOSFET внутрішньо ні до чого не пов'язаний. Цей тип виводу також називається "відкритим колектором" при використанні BJT замість MOSFET.

  • GPIO_Speed

    В основному, це регулює швидкість повороту (час підйому і час падіння) вихідного сигналу. Чим швидше швидкість холостого ходу, тим більше шуму випромінюється від ланцюга. Це хороша практика тримати повільний показник повільно, а збільшувати його лише у випадку, якщо у вас є конкретні причини.


Спасибі! на відмінну відповідь;), ви не хочете пояснити трохи більше про різні проблеми, коли він знаходиться в плаваючому стані?
Тім

3
Ідея полягає в тому, що житло протягом будь-якого проміжку часу при проміжному вхідному напрузі може частково включати як верхній, так і нижній БНТ у вхідному блоці і частково не вистачати електроживлення через них, що призводить до надмірного споживання електроенергії або (в особливо важких випадках ) потенційно пошкодження.
Кріс Страттон,

@Tim Так, що тільки що сказав Кріс Страттон :)
bitsmack

3
@Tim Крім того, коли лінії плавають, порушити рівень напруги дуже просто. Просто махаючи рукою по ланцюгу, можна змінити стан вхідного сигналу через ємнісні взаємодії ...
бітмак

1
@Tim Це дійсно залежить від програми. Якщо ви читаєте перемикач (або кнопку), це насправді не має значення. Якщо ви взаємодієте з іншими компонентами, це залежить від інтерфейсу. Наприклад, для SPI-комунікацій лінія CS активна-низька. У такому випадку ви хочете підтягувати резистор, тому CS ніколи не знижується ненавмисно. Ви можете подумати, що це зайве, якщо ви завжди будете активно вести лінію за допомогою мікроконтролера. Але що робити перед ініціалізацією мікроконтролера? Або якщо він скидається?
Підтягуючий

5

Швидкість GPIO - це максимальна частота, яку може створити GPIO. Нижчі налаштування можуть економити енергію.

Тип вихідного сигналу - це чи штифт призначає максимуми та мінімуми (натискання на потяг), чи виведення вмикається на затвор FET, який прикріплений до штифта при зливі (Open drain). Це може бути зручно, якщо вам потрібен будь-який прикріплений штифт, щоб мати змогу тягнути шину низько, не замикаючи інших штифтів.

Підтягнутими резисторами приєднайте вивід штифта до силової рейки, а витягнутий кріпиться через резистор до землі. Це, крім іншого, керування напругою штифта, навіть якщо біт знаходиться у високому опорі. Це важливо робити такі речі, як використання точкового перемикача для зміни значення цифрового вводу. Навіть при відкритому перемикачі вхід прогнозований.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.