Blue Pill (STM32F103C8T6) – Entradas e Saídas Digitais – GPIOs

GPIOs

No sexto artigo da série sobre a programação da Blue Pill, aremos continuidade no estudo. A dica é acompanhar a série desde o primeiro artigo porque é um caminho estruturado, onde a sequência traz benefícios no aprendizado (linha de raciocínio). Nesse artigo iniciaremos sobre as entradas e saídas de propósito geral GPIOs, e vamos testar nosso primeiro programa.

Entradas e Saídas Digitais - GPIOs

Neste artigo usaremos a biblioteca libopencm3 para criar o código fonte de outro programa que também pisca o LED PC13. Este programa demonstrará a configuração e uso das GPIOs. Esse programa foi levemente modificado, e é chamado miniblink. Foi modificado para ter o tempo do pisca diferente para distinguir do programa pisca LED original que vem na PCB Blue Pill. Após criar e executar este pequeno programa, veremos a API GPIO (Interface de programação de aplicativos) fornecida pela biblioteca libopencm3.

O programa miniblink

Mude para o subdiretório miniblink, conforme mostrado a seguir:

Para ter certeza que o projeto miniblink será construido (build), então, execute o seguir comando para forçar-nos a construir (buid) o miniblink.

Agora vamos dar um build no miniblink, conforme mostrado a seguir:

Ao fazer isso, você verá algumas linhas de comando executadas para construir (build) e linkar (link) seu executável chamado miniblink.elf. Para usar o utilitário flash, escrevendo a nova aplicação na memória do MCU, precisamos de um arquivo de imagem. A última etapa do processo de construção (build) mostra como o utilitário específico ARM objcopy é usado para converter miniblink.elf num arquivo de imagem miniblink.bin.

Antes da última etapa, você pode ver que o comando ARM size mostrou os tamanhos das seções de dados e texto do seu programa. Nosso miniblink consiste apenas em 700 bytes de flash (texto da seção) e não aloca SRAM (dados da seção). Embora o programa miniblink não use a seção de dados (SRAM), há SRAM sendo usada para as pilhas de chamadas.

Escrevendo na memória flash o programa miniblink

Usando novamente o framework make, agora escreveremos o miniblink na memório do MCU usando o arquivo de imagem. Conecte seu programador ST-Link V2 no Desktop/Notebook e verifique os jumpers na Blue Pill. Antes de escrever o novo programa, vamos apagar o programa atual do MCU, portanto:

Observe que o LED apagou. Agora vamos escrever o programa miniblink no MCU.

Feito isso, sua Blue Pill deve resetar automaticamente e iniciar o programa miniblink piscando o LED PC13. Com as constantes de tempo modificadas, o LED dever piscar com um ciclo de trabalho 70/30, portanto, 70% aceso e 30% apagado. Esse programa não usa o clock da CPU controlado por um cristal oscilador. Ele usa o clock RC interno. Por esse motivo, um Blue Pill poderá piscar um pouco mais rápido ou mais lento que outro.

O código fonte do programa miniblink

Vamos agora examinar o código fonte do programa miniblink que você acabou de executar. Se ainda não estiver em o subdiretório miniblink, mude para lá agora:

Nesse subdiretório, você deve encontrar o arquivo-fonte do programa miniblink.c.

A estrutura do programa é bastante simples. Consiste no seguinte:

  • Uma função principal do programa ‘main’. Note que não há argumentos argc ou argv para a função main;
  • Dentro da função main, a função gpio_setup() é chamada para executar alguma inicialização;
  • Também dentro da função main um loop infinito é formado, onde o LED é aceso e apagado. Observe que a instrução ‘return 0’ nunca é executada e é fornecida apenas para impedir que o compilador obtenha um erro de compilação.

Mesmo com esse programa simples, há muito o que aprender. Esse programa de exemplo é executado na frequência padrão da CPU, pois nada foi configurado. Veremos essas configurações mais adiante.

A figura 1.1 ilustra como o LED PC13 do STM32F103C8T6, que pisca, está conectado ao MCU na Blue Pill. Podemos ver que para acender o LED a saída do MCU deve ter nível baixo, porque o LED é alimentado diretamente da fonte de + 3,3 Volts através do resistor R1, limitador de corrente. É por isso que o comentário na linha 40 diz que o LED acende, mesmo que a chamada de função seja gpio_clear(). A linha 44 usa a função gpio_set() para apagar o LED. Essa lógica invertida é usada simplesmente devido essa parte do projeto da PCB Blue Pill.

Circuito GPIOs
Figura 1.1 – Porta de saída (GPIO)

Observe novamente essas duas chamadas de funções clear e set:

Note que essas chamadas usam dois argumentos, que são:

  • O nome da porta GPIO;
  • O número do pino da porta GPIO.

Através da biblioteca libopencm3, você especifica se quer resetar ou setar um bit de uma determinada porta, basta usar as funções gpio_clear() ou gpio_set(). Você também pode alternar um bit de uma determinada porta, usando a função gpio_toggle(). Também, é possível ler e escrever todos os pinos de uma porta, usando as funções gpio_port_read() e gpio_port_write().

Conforme a proposta inicial estamos evoluindo no aprendizado, portanto, aqui concluo o sexto artigo da série. Somente antes de encerrar quero destacar a forma de trabalho, que detalhamos nos primeiros artigos dessa série. Não usamos uma IDE, com suas ferramentas de compilação embutidas. Estamos fazendo as tarefas explicitamente, onde escrevemos o programa em um editor de texto qualquer (gedit ou vim), compilamos esse arquivo-fonte (usando o utilitário make que invoca o compilador), criamos um arquivo de imagem, e escrevemos para a memória flash da Blue Pill. Basicamente estamos mostrando as coisas por trás dos bastidores, aquilo que uma IDE faz automaticamente.

É a melhor forma de desenvolvimento? A resposta é “depende do gosto de quem está programando”. Tem softwares e ferramentas que dão muito mais produtividade, porém, com alto nível de abstração. Você escolhe seu caminho, mas, nessa série a proposta está bem definida.

Outros artigos da série

<< Blue Pill (STM32F103C8T6) - Alimentação e primeiros passos com ST-LinkBlue Pill (STM32F103C8T6) - API GPIO >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » Blue Pill (STM32F103C8T6) - Entradas e Saídas Digitais - GPIOs
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Nenhum resultado encontrado.

Séries



Outros da Série

Menu

WEBINAR
 
RISC-V:
Novidades de 2020

 

Data: 26/08 às 19:30h - Apoio: Mouser Elecctronics
 
INSCREVA-SE AGORA »



 
close-link