Como programar STM32 em C 4

No post anterior sobre STM32 vimos que é possível programar a placa STM32 Blue Pill através da IDE Arduino, sendo uma abordagem ideal para makers e iniciantes em STM32. Além disso é possível programar a placa utilizando algumas ferramentas do próprio fabricante STMicroelectronics. Essas ferramentas são utilizadas até mesmo na indústria. Então para você que quer se especializar nos microcontroladores STM32 este post irá trazer a base e uma abordagem mais profissional sobre STM32. Como projeto prático faremos um pequeno programa em C para piscar o LED da placa e você aprenderá como programar STM32 em C.

Ferramentas STMicroelectronics

A ST Microelectronics disponibiliza várias ferramentas para possibilitar o trabalho com seus produtos. Dentre todas as ferramentas temos as seguintes que iremos utilizar para desenvolver nosso projeto prático:

  • STM32CubeMX
  • TrueStudio
  • STMCubeProgrammer

STM32CubeMX

O STM32CubeMX é um programa de configuração para STM32. Com ele é possível escolher o microcontrolador com o qual se deseja trabalhar, configurar a função de pinos, gerar um código de inicialização com configuração necessária para funcionamento do microcontrolador, dentre outras funções. Esse software, juntamente com outras ferramentas, tem a iniciativa de tornar a vida dos programadores mais fácil, reduzindo esforço, tempo e custo de desenvolvimento.

Para baixar o STM32CubeMX acesse o seguinte link e crie uma conta no site caso ainda não tenha uma.

https://www.st.com/en/development-tools/stm32cubemx.html

TrueStudio

O TrueStudio é uma IDE voltada para o desenvolvimento de software para STM32. Pra quem já conhece o Eclipse vai ver que é familiar pois foi feito baseado no mesmo. É uma ferramenta gratuita e é usada tanto em empresas grandes como pequenas e também por estudantes e hobbistas em todo mundo. Recentemente a ferramenta foi comprada pela ST. Ela será utilizada para mostrar como programar STM32 em C.

Mais informações sobre o TrueStudio e download você encontra no link abaixo:

https://atollic.com/truestudio/

STM32CubeProgrammer

Com o STM32CubeProgrammer é possível programar os microcontroladores da família STM32. Através de uma interface amigável é possível ler, gravar e verificar tanto as memórias internas como Flash e RAM como externas. O processo de comunicação com o microcontrolador é feito através da interface de debug SWD e JTAG ou utilizando um bootloader pela USB ou UART.

Mais informações sobre este software programador e download você encontra no seguinte link:

https://www.st.com/en/development-tools/stm32cubeprog.html

Configuração do projeto com CubeMX

Após ter baixado as três ferramentas acima já podemos ver como programar STM32 em C e começar a desenvolver o nosso projeto com STM32 usando primeiramente o STM32CubeMX.

Nesta seção iremos ver:

  • Criando novo projeto no CubeMX
  • Configuração dos pinos de Debug
  • Configuração do pino GPIO
  • Como gerar o projeto CubeMX

Abra o programa e clique em New Project.

Primeiro projeto STM32CubeMX

Será apresentada uma janela para escolha do microcontrolador. A lista tem mais de 1000 modelos mas é possível usar o campo de busca da esquerda digitando o microcontrolador presente na placa Blue Pill que iremos usar: STM32F103C8

Primeiro projeto STM32CubeMX

Serão apresentadas as características do microcontrolador. Então clique em Start Project.

Primeiro projeto STM32CubeMX

A tela a seguir é dividida em duas partes principais. Na esquerda temos diversos periféricos como I2C, SPI, CAN, ADC e na direita temos o microcontrolador com seus pinos.

Primeiro projeto STM32CubeMX

Primeiro precisamos configurar os pinos de Debug. Isso é muito importante pois não fazer esse passo pode impedir de fazer futuras gravações de firmware na placa. Não é algo crítico pois existe a possibilidade de corrigir. Então não se preocupe caso erre neste passo. Mas para facilitar configure os pinos de Debug da seguinte forma.

No menu da esquerda, escolha o item SYS e em Debug escolha Serial Wire como na figura abaixo:

Primeiro projeto STM32CubeMX

Note que dois pinos ficaram verdes. O Pino PA13 para SWDIO e PA14 para SWCLK. Assim, quando gravarmos o primeiro firmware, o microcontrolador já saberá que aqueles pinos serão usados para conectar o gravador/debugger. Então lembre-se. Sempre quando for criar um novo projeto, e for utilizar o gravador/debugger, esse passo é bem importante.

Essa ferramenta é bem legal pois podemos, por exemplo, clicar em um pino e configurá-lo como GPIO Input ou Output dentre outras funções.

Primeiro projeto STM32CubeMX

Clique no pino PC13 e selecione GPIO_Output. Escolhemos o pino PC13 pois é nele que o LED da placa BluePill se encontra. Iremos mostrar como programar STM32 em C fazendo um pisca LED com o LED PC13.

Agora é necessário configurar algumas características do GPIO. Para isso clique na aba Configuration e então no botão GPIO:

Primeiro projeto STM32CubeMX

Selecione a linha de informações do GPIO para abrir as opções. Mantenha as configurações como estão apenas mudando o User Label para BUILTIN_LED. Esse label irá facilitar na hora da programação. Clique em Apply e em OK.

Primeiro projeto STM32CubeMX

Voltando a aba Pinout veja que o pino PC13 está verde e com o nosso label escolhido anteriormente.

Primeiro projeto STM32CubeMX

Após os pinos configurados já podemos finalizar o projeto no CubeMX. Clique no botão superior onde é indicado “Generate source code based on user settings”.

Primeiro projeto STM32CubeMX

Na janela seguinte escolha um nome para o projeto, a pasta onde deverá ser salvo e a IDE que iremos utilizar que no caso é o TrueStudio. Clique Ok.

Primeiro projeto STM32CubeMX

Na janela seguinte, caso Open Project não funcione diretamente para abrir o projeto no TrueStudio simplesmente clique em Close pois também é possível abrir o projeto manualmente.

Primeiro projeto STM32CubeMX

Agora temos um projeto inicial com diversos arquivos de código de pré-configuração e inicialização do microcontrolador.

Trabalhando com o TrueStudio e como programar STM32 em C

Nesta seção iremos ver:

  • Abrir o projeto CubeMX no TrueStudio
  • Como programar STM32 em C criando uma rotina pisca LED
  • Compilar o projeto
  • Fazer o debug do programa pisca LED

Dentro do TrueStudio vá em File -> Open Project From File System e escolha a pasta onde o projeto foi salvo no CubeMX.

Compilamos o projeto clicando no botão Build.

Primeiro projeto TrueStudio como programar STM32 em C

Se você estiver usando Linux pode ser que apareçam as seguintes mensagens de erro:

Cannot run program "arm-atollic-eabi-objcopy.exe": Unknown reason
Error: Program "arm-atollic-eabi-objcopy.exe" not found in PATH

Como o Linux não usa .exe pode desconsiderar.

Se aparecer algo como abaixo e sem nenhum erro adicional é porque a compilação ocorreu OK:

Generate build reports...
Print size information
   text    data     bss     dec     hex filename
   4812      20    1568    6400    1900 projeto_teste_post.elf
Print size information done
Generate listing file
Output sent to: projeto_teste_post.list
Generate listing file done
Generate build reports done

Antes de realizar o debug e carregar o firmware para placa vamos colocar as funções de controle do LED. 

Abra o arquivo main.c e procure pelas linhas abaixo:

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{   
 
/* USER CODE END WHILE */

Esse while(1) é como se fosse o void loop() do Arduino. Alí que devemos colocar nosso programa.

Vamos usar duas funções do chamado HAL, Hardware Abstraction Layer, HAL_GPIO_TogglePin e HAL_Delay, que são funções parecidas como do Arduino DigitalWrite, PinMode, delay e etc.

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{   
    HAL_GPIO_TogglePin(BUILTIN_LED_GPIO_Port, BUILTIN_LED_Pin);
    HAL_Delay(1000);
 
/* USER CODE END WHILE */

Note que não precisamos usar o PC13 mas sim o BUILTIN_LED que escolhemos lá no CubeMX.

Sem modificar nada mais no arquivo, salve o main.c.

Antes de fazer o debug o gravador precisa estar conectado a placa BluePill da seguinte maneira.

Conexão Debugger STM32

Conecte o gravador na porta USB e clique no botão Debug no menu de ferramentas do TrueStudio. O firmware vai ser carregado e a IDE deve trocar para o ambiente de debug.

Primeiro Projeto TrueStudio

Agora é só ir apertando F6 ou clicar no botão Step Over no menu de ferramentas, até chegar nas funções Toggle e Delay. O LED da placa deverá piscar a cada passagem pela função Toggle.

Primeiro Projeto TrueStudio

Essa é uma grande vantagem sobre o Arduino. Além de aprender como programar STM32 em C, você pode percorrer por todo o código pausadamente e analisar possíveis erros.

Usando o STM32CubeProgrammer

Quando fizemos o debug pelo TrueStudio, a placa já foi programada com o programa pisca LED. Mas é possível utilizar um outro programa, o STM32CubeProgrammer, para gravarmos firmwares. Por exemplo quando você encontra um firmware pré-compilado e quer gravar na placa, pode ser usado o CubeProg, sem passar pelo TrueStudio.

Com a placa e debugger ainda conectados ao computador, abra o CubeProg e clique em Erase & Programming.

Usando STM32CubeProg

Você deve notar que o debugger foi conectado automaticamente. Clicando no botão Browse, você pode escolher o arquivo .elf que foi gerado no TrueStudio ao compilar o programa pisca LED. No meu caso ele se encontra em:

/home/giobauermeister/projects/workspace-stm32/projeto_teste_post/Debug/projeto_teste_post.elf

Selecione as opções desejadas como Verify programming ou Run after programming e então clique no botão Start Programming.

Usando STM32CubeProg

Caso ocorra algum erro tente realizar a programação novamente.

Esse é o básico do CubeProg. Existem diversas outras funções que podem ser realizadas como apagar a memória, configurar proteção de leitura e escrita e etc.

Conclusão

Agora você já deve saber como utilizar as ferramentas da STMicroelectronics para iniciar projetos com STM32 e como programar STM32 em C. Os próximos passos seriam estudar as APIs da biblioteca HAL e continuar colocando a mão na massa criando outros projetos. Existe um E-book grátis do professor Geoffrey Brown, bem interessante sobre STM32 com diversos exemplos práticos. Veja mais informações e link para download do E-book no Portal Embarcados. Pra quem prefere uma tradução para o português existe uma versão traduzida por uma turma de Engenharia de Automação e Controle da Universidade Federal do Espírito Santo e pode ser baixada aqui.

No próximo post desta série iremos mostrar alguns produtos reais que utilizam STM32 e como utilizar o debugger USB para reprogramar um osciloscópio DSO150 vendido pela Filipeflop.

Gostou de aprender como programar STM32 em C? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. Não se esqueça de visitar o Fórum da Filipeflop!

 

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

4 Comentários

  1. Giovanni.
    Muito bom seu artigo.
    Me envie seu email que te mando o pdf do livro do Geoffrey Brown em português.
    Vai ser muito util para iniciantes.
    Abraços

    1. Olá José! Muito obrigado pela visita ao blog e pela leitura.

      O livro será de grande valia, aceito sim. Segue meu e-mail: giovanni.santana@filipeflop.com

      Abraço!

  2. Parabéns pela iniciativa. Os STM32 são excelentes microcontroladores com um preço muito acessível. O seu tutorial foi completo: abordou o uso do CubeMX para gerar a configuração e como passar dele para o True Studio e desenvolver o projeto, compilar e gravar com oST Link. O livro que você citou também é muito bom e acessível para quem está começando.
    Achei excelente.
    E as black boards com STM32F407vet6? A Filipeflop não tem planos de comercializa-las?

    1. Olá Pedro! Muito obrigado pela leitura e visita ao blog.

      Que bom que o tutorial foi útil.

      Ainda estamos começando a incluir produtos com STM32 na loja, mas com certeza futuramente teremos mais produtos STM32 e sua indicação do STM32F407vet6 é bastante válida.

      Abraço!