Encontrei esta resposta no STM32: Noções básicas sobre configurações de GPIO
- GPIO_PuPd (pull-up / pull-down)
Nos circuitos digitais, é importante que as linhas de sinal nunca possam "flutuar". Ou seja, eles precisam sempre estar em um estado alto ou baixo. Ao flutuar, o estado é indeterminado e causa alguns tipos diferentes de problemas.
A maneira de corrigir isso é adicionar um resistor da linha de sinal para Vcc ou Gnd. Dessa forma, se a linha não estiver sendo ativada alta ou baixa, o resistor fará com que o potencial seja desviado para um nível conhecido.
O ARM (e outros microcontroladores) possuem circuitos internos para fazer isso. Dessa forma, você não precisa adicionar outra parte ao seu circuito. Se você escolher "GPIO_PuPd_UP", por exemplo, é equivalente a adicionar um resistor entre a linha de sinal e o Vcc.
- GPIO_OType (tipo de saída):
Push-Pull: este é o tipo de saída que a maioria das pessoas considera "padrão". Quando a saída é baixa, ela é ativamente "puxada" para o chão. Por outro lado, quando a saída é definida como alta, ela é "empurrada" ativamente em direção a Vcc. Simplificado, fica assim:
Uma saída de dreno aberto, por outro lado, só está ativa em uma direção. Ele pode puxar o pino em direção ao solo, mas não pode empurrá-lo alto. Imagine a imagem anterior, mas sem o MOSFET superior. Quando não está puxando para o chão, o MOSFET (do lado inferior) é simplesmente não condutor, o que faz com que a saída flutue.
Para este tipo de saída, é necessário adicionar um resistor de pull-up ao circuito, o que fará com que a linha fique alta quando não for acionada em baixa. Você pode fazer isso com uma parte externa ou definindo o valor GPIO_PuPd como GPIO_PuPd_UP.
O nome vem do fato de que o dreno do MOSFET não está conectado internamente a nada. Esse tipo de saída também é chamado de "coletor aberto" ao usar um BJT em vez de um MOSFET.
Basicamente, isso controla a taxa de variação (o tempo de subida e descida) do sinal de saída. Quanto mais rápida a taxa de rotação, mais ruído é irradiado do circuito. É uma boa prática manter a taxa de variação lenta e apenas aumentá-la se você tiver um motivo específico.