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.
Odpowiedzi:
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:
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:
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.
źródło
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.
źródło