STM32 Zrozumienie ustawień GPIO


41

W standardowej bibliotece urządzeń peryferyjnych STM32 musimy skonfigurować GPIO.

Ale są 3 funkcje, których nie wiem, jak je skonfigurować;

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

W GPIO_Speed dostępne są 4 ustawienia

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

Skąd mam wiedzieć, z której prędkości mam wybrać? Czy są jakieś zalety lub wady korzystania z wysokiej lub niskiej prędkości? (np .: zużycie energii?)

W GPIO_OType są 2 ustawienia do wyboru

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

Jak się dowiedzieć, z którego wybrać? a czym jest otwarty odpływ i pchanie?

W GPIO_PuPd istnieją 3 ustawienia do wyboru

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

Myślę, że te ustawienia są związane z początkowym ustawieniem push pull.


Powiązane: jak jawnie wymusić tryb „otwartego spustu” na mikrokontrolerach, które nie obsługują go natywnie, takich jak AVR / Arduino, PIC itp.: Electronics.stackexchange.com/a/354993/26234
Gabriel Staples

Odpowiedzi:


45
  • GPIO_PuPd (Pull-up / Pull-down)

    W obwodach cyfrowych ważne jest, aby linie sygnałowe nigdy nie mogły się „unosić”. Oznacza to, że muszą zawsze znajdować się w stanie wysokim lub niskim. Gdy jest zmiennoprzecinkowy, stan jest nieokreślony i powoduje kilka różnych rodzajów problemów.

    Sposobem na to jest dodanie rezystora z linii sygnałowej do Vcc lub Gnd. W ten sposób, jeśli linia nie będzie aktywnie prowadzona wysoko lub nisko, rezystor spowoduje dryfowanie potencjału do znanego poziomu.

    ARM (i inne mikrokontrolery) mają wbudowane obwody do tego celu. W ten sposób nie musisz dodawać kolejnej części do swojego obwodu. Jeśli na przykład wybierzesz „GPIO_PuPd_UP”, wystarczy dodać rezystor między linią sygnałową a Vcc.

  • GPIO_OType (typ wyjścia):

    Push-Pull: jest to typ wyjścia, który większość ludzi uważa za „standardowy”. Kiedy moc wyjściowa spada, jest ona aktywnie „ciągnięta” do ziemi. I odwrotnie, gdy wartość wyjściowa jest ustawiona na wysoką, jest ona aktywnie „wypychana” w kierunku Vcc. Uproszczony wygląda następująco:

    pchać ciągnąć

    Z drugiej strony wyjście Open-Drain jest aktywne tylko w jednym kierunku. Może ciągnąć kołek w kierunku ziemi, ale nie może podnieść go wysoko. Wyobraź sobie poprzednie zdjęcie, ale bez górnego MOSFETU. Gdy nie ciągnie się do ziemi, MOSFET jest po prostu nieprzewodzący, co powoduje, że wyjście się unosi:

    otwarty odpływ

    W przypadku tego typu wyjścia do obwodu musi być dodany rezystor podciągający, co spowoduje, że linia podniesie się, gdy nie zostanie doprowadzona do stanu niskiego. Możesz to zrobić z częścią zewnętrzną lub ustawiając wartość GPIO_PuPd na GPIO_PuPd_UP.

    Nazwa pochodzi od faktu, że odpływ MOSFET-u nie jest wewnętrznie połączony z niczym. Ten typ danych wyjściowych jest również nazywany „otwartym kolektorem”, gdy używany jest BJT zamiast MOSFET.

  • GPIO_Speed

    Zasadniczo kontroluje to szybkość narastania (czas narastania i czas opadania) sygnału wyjściowego. Im szybsza prędkość narastania, tym więcej szumów jest emitowanych z obwodu. Dobrą praktyką jest utrzymywanie niskiej prędkości zabijania i zwiększanie jej tylko, jeśli masz konkretny powód.


dzięki! na wspaniałą odpowiedź;), ​​czy mógłbyś wyjaśnić nieco więcej na temat różnych problemów, gdy jest w stanie zmiennym?
Tim

3
Chodzi o to, że przebywanie przez dłuższy czas przy pośrednim napięciu wejściowym może częściowo włączyć zarówno górny, jak i dolny FET w bloku wejściowym i częściowo zwarć przez nie zasilanie, powodując nadmierne zużycie energii lub (w szczególnie ciężkich przypadkach ) potencjalnie szkodzi.
Chris Stratton,

@Tim Tak, co właśnie powiedział Chris Stratton :)
bitsmack

3
@ Tim Ponadto, gdy linie są pływające, bardzo łatwo jest zakłócać poziomy napięcia. Samo machanie ręką po obwodzie może zmienić stan wejścia z powodu interakcji pojemnościowych ...
bitsmack

1
@ Tim To naprawdę zależy od aplikacji. Jeśli czytasz przełącznik (lub przycisk), to tak naprawdę nie ma znaczenia. Jeśli łączysz się z innymi komponentami, zależy to od interfejsu. Na przykład w przypadku komunikacji SPI linia CS ma niski poziom aktywności. W takim przypadku potrzebujesz rezystora podciągającego, aby CS nigdy nie spadł mimowolnie. Możesz pomyśleć, że nie jest to konieczne, jeśli zawsze będziesz aktywnie prowadzić linię za pomocą mikrokontrolera. Ale co przed zainicjowaniem mikrokontrolera? A jeśli się resetuje? Rezystor podciągający usuwa wszelkie niejednoznaczności ...
bitsmack

5

Szybkość GPIO to maksymalna częstotliwość, jaką może wytworzyć GPIO. Niższe ustawienia mogą oszczędzać energię.

Typem wyjściowym jest to, czy kołek zapewnia wzloty i upadki (push pull), czy też wyjście włącza bramkę FET, która jest przymocowana do kołka na odpływie (Otwarty odpływ). Może to być wygodne, jeśli potrzebujesz dołączonej szpilki, aby móc pociągnąć autobus nisko bez zwarcia innych szpilek.

Rezystory podciągające mocują wyjście styku do szyny zasilającej, a pociągnięcie w dół mocuje go poprzez rezystor do masy. Umożliwi to między innymi kontrolowanie napięcia wtyku, nawet jeśli bit jest w stanie wysokiej impedancji. Jest to ważne, aby wykonywać takie czynności, jak użycie przełącznika punktowego w celu zmiany wartości wejścia cyfrowego. Nawet przy otwartym przełączniku wejście jest przewidywalne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.