Microcontrolador Stm32f103 Led controle liga / desliga com botão como entrada

A postagem explica como usar os pinos stm32 como entrada usando keil e stmcubemx ide. Um tutorial simples de ligar/desligar com botão como entrada é feito para explicar a codificação e o funcionamento. Quando um botão é pressionado o led acende e quando o botão é liberado o led apaga. O projeto é bastante simples. Antes de iniciar o tutorial, eu recomendo fazer o tutorial sobre como começar com o microcontrolador stm32f103, keil ide e inicialização do código stumcubemx. Isto irá apresentar como inicializar/configurar e alinhar o stmcubemx e keil ide para começar a trabalhar com microcontroladores stm32f103. Você não entenderá este projeto se não tiver uma introdução ao stmcubemx e ao keil ide.

  • Primeiros passos com stm32f103, keil e stmcubemx

O circuito do projeto é bastante simples. Conectei o led ao pino#pc-13 do stm32f103c8t6 e o ​​botão ao pino#pa-10.

Declaração de pinos de led e botão Stm32f103 em stmcubemx

Declaração de pinos de led e botão Stm32f103 em stmcubemx

stm32f103 gpios como configuração de resistores de entrada/saída e pull-up/pull-down

stm32f103 gpios como configuração de resistores de entrada/saída e pull-up/pull-down
O pino do Led Pc-13 é declarado como saída e o botão Pa-10 como entrada. Pino Pa-10 como um resistor pull up interno. Eu ativei e conectei meu botão diretamente ao terra. Na imagem superior você pode ver que GPIO PA10 está no modo de entrada e PC-13 no modo Push Pull de saída. O nível de saída inicial no pino do LED PC-13 é declarado como alto. Frequência de saída para pino Led definida como média. Se você não entendeu nada neste nível, siga o tutorial mencionado acima. Explica tudo isso profundamente.
O microcontrolador Stm32f103 suporta fontes de relógio internas e externas. Internamente possui 2 osciladores RC HSI (alta velocidade interna) e LSI (baixa velocidade interna). Interna de alta velocidade tem clock de 8Mhz e interna de baixa velocidade tem clock de 40khz. Externamente stm32f103 suporta HSE (externo de alta velocidade) e LSE (externo de baixa velocidade). Externo de alta velocidade suporta clock de entrada máximo de 16 MHz e externo de baixa velocidade suporta clock máximo de 1000 kHz. Stm32f103 possui um circuito PLL interno a partir do qual podemos gerar sinal de clock de 72Mhz. Podemos ir acima de 72 MHz, mas como o stm32 funciona com clock máximo de 72 MHz, fomos acima de 72 MHz. Neste tutorial estou usando fonte de clock interno de alta velocidade 8Mhz. As configurações para HSI (alta velocidade interna) são mostradas abaixo.

stm32f103 led com diagrama de circuito de botão

stm32f103 led com diagrama de circuito de botão

Configuração do relógio stm32f103 - usando relógio interno de alta velocidade (HSI)

Configuração do relógio stm32f103 – usando relógio interno de alta velocidade (HSI)

Depois de gerar o código de inicialização do stmcubemx é hora de escrever nossa lógica desejada “Led on/off with push button”. É um código simples se o escrevermos em c ou c++, mas no keil tudo depende da sintaxe suportada pelo compilador e dos drivers/bibliotecas que estamos usando. Estou trabalhando com drivers Hal lançados pela stmicroelectronics. Esses drivers Hal são instalados diretamente em nosso PC quando baixamos o pacote de software stmcubemx. Quando geramos código de stmcubemx para keil, os drivers e bibliotecas hal necessários são copiados diretamente para a pasta do projeto.

O loop while(1) na função main é onde escrevemos nosso código. Eu escrevo o código abaixo para nossa lógica e está funcionando perfeitamente e de acordo com a saída desejada.

if(HAL_GPIO_ReadPin(Ibutton_GPIO_Port, Ibutton_Pin)==GPIO_PIN_RESET) //Verifica se o botão foi pressionado
HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin,GPIO_PIN_SET); //Se pressionado Led liga
outro
HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin,GPIO_PIN_RESET); //Senão Led desligado

A função HAL_GPIO_ReadPin lê o status do pino e retorna o status. São necessários 2 parâmetros para funcionar, um na porta do pino e o segundo no número do pino. No nosso caso, a porta é Ibutton_GPIO_Port e o número do pino é Ibutton_Pin.
HAL_GPIO_WritePin grava no pino especificado. Torna-o alto ou baixo. Precisa de 3 parâmetros de porta, pino e dados. No nosso caso, a porta é Led_GPIO_Port, o pino é Led_Pin e os dados são SET/RESET.

  • GPIO_PIN_RESET – Escreva 0 no pino, torna o pino baixo
  • GPIO_PIN_SET – Escreva 1 no pino, torna o pino alto

Assista ao vídeo do projeto….

Led Stm32 e código/arquivos de botão

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.