Na biblioteca Periférica Padrão do STM32, precisamos configurar o GPIO.
Mas existem 3 funções que não sei como configurá-las;
- GPIO_InitStructure.GPIO_Speed
- GPIO_InitStructure.GPIO_OType
- GPIO_InitStructure.GPIO_PuPd
No GPIO_Speed , há 4 configurações para escolher
GPIO_Speed_2MHz /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz
Como sei qual velocidade eu escolho? Existe alguma vantagem ou desvantagem no uso de alta ou baixa velocidade? (por exemplo: consumo de energia?)
No GPIO_OType , há duas configurações para escolher
GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain
Como saber qual escolher? e o que é dreno aberto e push pull?
No GPIO_PuPd , há 3 configurações para escolher
GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP // Pull up
GPIO_PuPd_DOWN // Pull down
Eu acho que essas configurações estão relacionadas à configuração inicial do push pull.
Respostas:
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, é 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 é 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.
GPIO_Speed
Basicamente, isso controla a taxa de giro (o tempo de subida e queda) do sinal de saída. Quanto mais rápida a taxa de variaçã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.
fonte
GPIO Speed é a frequência máxima que o GPIO pode produzir. Configurações mais baixas podem economizar energia.
O tipo de saída é se o pino indica altos e baixos (push pull) ou se a saída gira no portão de um FET que está conectado ao pino no dreno (dreno aberto). Isso pode ser conveniente se você precisar de algum pino conectado para poder puxar um barramento baixo sem colocar outros pinos em curto.
Os resistores de puxar prendem a saída do pino ao trilho de força e os prendem por um resistor ao terra. Isso controlará, entre outras coisas, a tensão do pino, mesmo que o bit esteja em um estado de alta impedância. Isso é importante para fazer coisas como usar um interruptor local para alterar um valor de entrada digital. Mesmo com o interruptor aberto, a entrada é previsível.
fonte