sábado, 8 de julho de 2017

Desenvolvendo para a placa STM32F4 (Uso do botão) - Parte IV


Até o momento, nos posts anteriores, os pinos da GPIO foram utilizados apenas como saídas. Para ilustrar o uso da GPIO como entrada, será usado o botão do tipo pushbutton, que representa a forma mais simples de adentrar uma informação, pois será monitorado apenas dois estados: pressionado ou não. Para tanto, a placa STM32F4Discovery disponibiliza um botão para uso: o botão B1 (User), que pode ser acessado através da porta A, pino 0.

Face da placa onde pode ser observado o botão azul (User), próximo ao botão preto (Reset)


Note que há presente na placa um segundo botão, de cor preta. Trata-se do reset, utilizado apenas para reinicializar a execução do código residente em flash.
Do ponto de vista da programação, a configuração da porta/ pino é similar a de um pino de saída, respeitadas as devidas peculiaridades, como será explicado a seguir, a partir do código fonte proposto, exibido abaixo. Neste, a aplicação será a monitoração do botão de usuário, de forma que se estiver pressionado, ele acenderá todos os LEDs da placa. Caso contrário, permanecerão desligados.




Na linha 36, é configurado, como de costume, o clock da porta A, habilitando-a para fins do propósito de uso do botão. Segue que na linha 39 é indicado o pino 0 (conforme mencionado previamente) e na linha 41 é habilitado obviamente o modo de entrada.
Especial atenção deve ser dada à configuração presente na linha 45. Sendo o botão da placa ligado à tensão de alimentação, trata-se assim de um dispositivo do tipo “pull-up”. Desta forma, do lado do software, o pino deve ser declarado como uma entrada do tipo “pull-down”, exatamente ao contrário do tipo de ligação física do dispositivo, como mostrado na linha 45. Deve-se por isso tomar cuidado ao se usar botões externos conectados aos pinos, uma vez que estes podem ser conectados à placa tanto em modo pull-up como pull-down, devendo-se fazer a devida correspondência reversa no respectivo código.
Por fim, conclui-se a configuração desta porta de entrada nas linhas 47, onde é definida a velocidade (lembrando que uma taxa mais baixa implicará em maior economia de energia), sendo que na linha 49 a porta é inicializada, como de praxe. 
 A fim de monitorar o botão para verificar seu estado, dentro do propósito do programa, é usada a função GPIO_ReadInputDataBit embutida em uma chamada if, concluindo assim as modificações importantes do código.
O resultado pode ser visto no vídeo abaixo, onde pode ser percebido a colocação de um botão externo conectado ao pino 0 da porta A (mesmo do botão User), funcionando em paralelo.


Com relação a este botão externo, deve-se atentar para que ele seja do tipo pull-up, ou seja, alimentado e não aterrado (observar que o botão é ligado ao pino de alimentação de 3 V disponibilizado pela placa). Além disso, notar o resistor colocado em série com este botão, a fim de prevenir uma corrente elevada que possa danificar a placa.

Com este post, encerraremos a série relacionada à manipulação do periférico mais elementar disponibilizado pela placa, que são as portas de GPIO. Em posts futuros, abordaremos outros periféricos, a começar pela exploração mais aprofundada dos Timers, já abordado de forma simplificada em post anterior.

Nenhum comentário:

Postar um comentário