Ho trovato questa risposta da STM32 Comprensione delle impostazioni GPIO
- GPIO_PuPd (Pull-up / Pull-down)
Nei circuiti digitali, è importante che le linee di segnale non possano mai "fluttuare". Cioè, devono sempre essere in uno stato alto o basso. Quando fluttua, lo stato è indeterminato e causa alcuni diversi tipi di problemi.
Il modo per correggere questo è aggiungere un resistore dalla linea del segnale a Vcc o Gnd. In questo modo, se la linea non viene pilotata attivamente in alto o in basso, il resistore causerà il potenziale di spostarsi a un livello noto.
Il ARM (e altri microcontrollori) hanno circuiti integrati per farlo. In questo modo, non è necessario aggiungere un'altra parte al circuito. Se si sceglie "GPIO_PuPd_UP", ad esempio, è utile aggiungere un resistore tra la linea di segnale e Vcc.
- GPIO_OType (Tipo di output):
Push-Pull: questo è il tipo di output che la maggior parte delle persone considera "standard". Quando l'uscita si abbassa, viene attivamente "tirata" a terra. Al contrario, quando l'output è impostato su high, viene attivamente "spinto" verso Vcc. Semplificato, si presenta così:
Un output Open-Drain, d'altra parte, è attivo solo in una direzione. Può tirare il perno verso terra, ma non può guidarlo in alto. Immagina l'immagine precedente, ma senza il MOSFET superiore. Quando non sta tirando a terra, il MOSFET (lato inferiore) è semplicemente non conduttivo, causando il galleggiamento dell'uscita.
Per questo tipo di uscita, è necessario aggiungere una resistenza di pull-up al circuito, che farà salire la linea quando non viene pilotata bassa. È possibile farlo con una parte esterna o impostando il valore GPIO_PuPd su GPIO_PuPd_UP.
Il nome deriva dal fatto che lo scarico del MOSFET non è collegato internamente a nulla. Questo tipo di output è anche chiamato "open-collector" quando si utilizza un BJT invece di un MOSFET.
Fondamentalmente, questo controlla la velocità di risposta (il tempo di salita e il tempo di caduta) del segnale di uscita. Più veloce è la velocità di risposta, maggiore è il rumore irradiato dal circuito. È buona norma mantenere la velocità di risposta lenta e aumentarla solo se si ha un motivo specifico.