Znalazłem tę odpowiedź w STM32 Zrozumienie ustawień GPIO
- 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 (po dolnej stronie) jest po prostu nieprzewodzący, co powoduje, że sygnał wyjściowy 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.
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.