Introdução ao STM32 (Circuito azul) usando Arduino IDE: LED piscando

Tempo de leitura: 9 minutes

Arduino teria sido a primeira placa para muitos entusiastas (incluindo eu) e engenheiros lá fora, quando eles começaram com a eletrônica. No entanto, à medida que começamos a construir mais e a cavar mais fundo, logo perceberemos que o Arduino não está pronto para a indústria e sua CPU de 8 bits com um clock ridiculamente lento, ele não fornece energia suficiente para seus projetos. Esperançosamente, porém, temos as novas placas de desenvolvimento STM32F103C8T6 STM32 (Blue Pill) no mercado agora que podem facilmente superar o Arduino com sua CPU de 32 bits e arquitetura ARM Cortex M3. Outro pote de mel aqui é que podemos usar o mesmo velho IDE do Arduino para programar nossas placas STM32. Portanto, neste tutorial, vamos começar com o STM32 para saber um pouco do básico sobre esta placa e piscar o LED on-board usando o IDE do Arduino.

Além da placa de comprimidos STM32 Blue usada neste tutorial, existem muitas outras placas STM32 populares como a placa de desenvolvimento STM32 Nucleo.

Materiais requisitados

  • STM32 – Placa de Desenvolvimento (Azul) (STM32F103C8T6)
  • Programador FTDI
  • ProtoBoard
  • Fios de conexão
  • Laptop com Internet

 

Introdução às placas STM32 (Blue Pill)

A placa STM32 a.k.a Blue Pill é uma placa de desenvolvimento para o microcontrolador ARM Cortex M3. É muito parecido com o Arduino Nano, mas tem um impacto considerável. A placa de desenvolvimento é mostrada abaixo.

Essas placas são extremamente baratas em comparação com as placas oficiais do Arduino e também o hardware é de código aberto. O microcontrolador em cima dele é o STM32F103C8T6 da STMicroelectronics. Além do Microcontrolador, a placa também possui dois osciladores de cristal, um cristal de 8 MHz e outro de 32 KHz, que pode ser usado para acionar o RTC (Real Time Clock) interno. Por causa disso, o MCU pode operar em modos de hibernação, tornando-o ideal para aplicações operadas por bateria.

Como o MCU funciona com 3,3 V, a placa também abriga um CI regulador de tensão de 5 V a 3,3 V para alimentar o MCU. Mesmo que o MCU opere a 3,3 V, a maioria de seus pinos GPIO são tolerantes a 5 V. O pino do MCU é cuidadosamente puxado para fora e rotulado como pinos de cabeçalho. Existem também dois LEDs integrados, um (cor vermelha) é usado para indicação de energia e o outro (cor verde) é conectado ao pino GPIO PC13. Ele também tem dois pinos de cabeçalho que podem ser usados ​​para alternar o modo de inicialização MCU entre o modo de programação e o modo de operação. Aprenderemos mais sobre eles posteriormente neste tutorial.

Agora, poucas pessoas devem estar se perguntando por que essa placa é chamada de “Blue Pill”, bem a sério, eu não sei. Pode ser, uma vez que o quadro é da cor azul e pode dar um melhor desempenho aos seus projetos, alguém surgiu com esse nome nele apenas ficou. Isso é apenas uma suposição e não tenho nenhuma fonte para apoiá-la.

Especificações STM32F103C8T6

O microcontrolador ARM Cortex M3 STM32F103C8 é usado na placa de comprimidos Blue. Ao contrário do nome, “Blue Pill”, o nome dos Microcontroladores STM32F103C8T6 tem um significado por trás dele.

  • STM »representa o nome do fabricante STMicroelectronics
  • 32 »significa arquitetura ARM de 32 bits
  • F103 »significa que a arquitetura ARM Cortex M3
  • C »48 pinos
  • 8 »Memória Flash de 64 KB
  • T »tipo de pacote é LQFP
  • 6 »temperatura de operação -40°C a +85°C

Agora vamos dar uma olhada nas especificações deste microcontrolador.

Arquitetura: ARM Cortex M3 de 32 bits
Tensão operacional: 2,7 V a 3,6 V
Freqüência da CPU: 72 MHz
Número de pinos GPIO: 37
Número de pinos PWM: 12
Pinos de entrada analógica: 10 (12 bits)
Periféricos USART: 3
Periféricos I2C: 2
Periféricos SPI: 2
Can 2.0 Periférico: 1
Temporizadores: 3 (16 bits), 1 (PWM)
Memória Flash: 64 KB
RAM: 20kB

Se você quiser saber mais sobre as características técnicas do Microcontrolador, pode consultar seu Datasheet. Você também pode estar interessado no Manual de Referência e na folha de Erratas do Microcontrolador, que também está vinculada.

 

Detalhes do pino STM32

A pinagem completa da placa de comprimidos STM32 Blue é mostrada abaixo. Como você pode ver, cada pino está perfeitamente etiquetado contra ele. A etiqueta também é semelhante às placas Arduino. Ou seja, o G é usado para denotar o pino de aterramento, 3,3 V outpus um 3,3 V regulado e o pino de 5 V pode ser usado para alimentar a placa ou obter + 5 V se alimentado por micro USB. O LED integrado está conectado ao pino PC13 do Microcontrolador.

Ao contrário das placas Arduino, a placa de desenvolvimento STM32 deve ser configurada manualmente para o modo de programação usando os fios de jumper boot 1 e boot 0. A posição da bota 1 normalmente não é distorcida. Mas o jumper de inicialização 0 deve ser definido como 3,3 V para o modo de programação e definido como aterramento para o modo operacional. Saberemos mais sobre isso quando carregarmos o programa em nosso painel.

 

Programação de STM32 Blue Pill – Como programar STM32F103C8T6

O STM32 é apenas mais um microcontrolador da família STMicroelectronics. Portanto, todos os métodos existentes para programar um chip ARM também podem ser usados para a placa STM32. Um IDE famoso e comumente usado é o Keil ARM MDK e, além disso, também podemos usar a bancada de trabalho IAR, Atollic TrueStudio, MicroC Pro ARM, Crossworks ARM, Ride 7, PlatformIO + STM32 etc.

Mas o que tornou esta placa muito popular foi sua capacidade de ser programada com o IDE do Arduino. Desta forma, as pessoas podem começar e construir projetos com STM32 em nenhum momento, pois muitos estarão familiarizados com o Arduino IDE e sua linguagem de programação fácil de usar e bibliotecas prontamente disponíveis. Portanto, neste tutorial do IDE do Arduino STM32F103C8T6, usaremos o IDE do Arduino para começar a usar o STM32.

 

Diagrama de circuito

Para programar a placa STM32 Blue Pill diretamente do Arduino IDE, precisamos usar uma placa Serial FTDI. Esta placa é conectada aos pinos Rx e Tx do STM32 conforme mostrado abaixo.

O pino Vcc da placa FTDI é conectado ao pino STM32 5V de alimentação da placa. O aterramento é conectado ao aterramento do STM32. Os pinos Rx e Tx da placa FTDI são conectados aos pinos A9 e A10 do STM32, respectivamente. Onde o A9 é o pino Tx do STM32 MCU e o A10 é o pino Rx.

Programando SMT32 por meio de placa micro USB sem serial

Agora você deve estar se perguntando por que não estamos usando a porta micro-USB para programar a placa como qualquer outra placa Arduino. Bem!! na verdade, podemos, mas para este tutorial optamos por não fazê-lo. A placa de desenvolvimento STM32 Blue Pill quando adquirida não vem com um bootloader para torná-la compatível com o IDE do Arduino. No entanto, este bootloader pode ser instalado na placa STM32 e então a porta micro-USB pode ser usada diretamente para carregar os programas. Mas no momento da documentação deste artigo, o carregador de inicialização tinha alguns bugs e ainda está em desenvolvimento.

 

Preparando o IDE Arduino para STM32 (Blue Pill)

Siga as etapas abaixo para baixar e preparar o Arduino IDE para ser usado com a placa de desenvolvimento STM 32.

Etapa 1: – Se você ainda não instalou o IDE Arduino, faça o download e instale-o deste link. Certifique-se de selecionar o sistema operacional correto.

Etapa 2: – Após instalar o IDE do Arduino, abra e baixe os pacotes necessários para a placa STM32. Isso pode ser feito selecionando Arquivo -> Preferências.

Etapa 3: – Clicar em Preferências abrirá a caixa de diálogo mostrada abaixo. Na caixa de texto adicional do URL do Boards Manager, cole o link abaixo

http://dan.drown.org/stm32duino/package_STM32duino_index.json

e pressione OK.

Etapa 4: – Agora vá para Ferramentas -> Placas -> Gerenciador de Placa. Isso abrirá a caixa de diálogo do gerenciador de placas, procure por “STM32F1” e instale o pacote que aparece.

Etapa 5: – Após o pacote, a instalação é concluída. Vá para Ferramentas e role para baixo para encontrar a série STM32F103C Genérica conforme mostrado abaixo. Em seguida, certifique-se de que a variante é do tipo 64kFlah, a velocidade da CPU é 72MHz e altere o método de upload para Serial.

Etapa 6: – Agora, conecte sua placa FTDI ao computador e verifique a qual porta COM a placa FTDI está conectada usando o gerenciador de dispositivos. Em seguida, selecione o mesmo número de porta em Ferramentas-> Porta

Etapa 7: – Depois que todas as alterações forem feitas, verifique o canto inferior direito do IDE do Arduino e você deve notar a seguinte configuração sendo definida. Minha placa FTDI está conectada a COM7, mas a sua pode ser diferente

Agora, o IDE Arduino está pronto para programar as placas de desenvolvimento STM 32 Blue Pill.

 

Carregando um código de exemplo stm32f103c8t6

Vamos fazer o upload do Programa Blink de amostra do IDE Arduino para a placa STM32 Blue Pill para ter certeza de que tudo está funcionando corretamente. O programa de exemplo pode ser encontrado em

No programa de exemplo que é aberto, temos que fazer uma pequena alteração. Por padrão, o programa será escrito para PB1, mas em nossa placa o LED integrado está conectado ao PC13, portanto, substitua todos os PB1 por PC13 e podemos prosseguir. O programa de exemplo completo modificado também pode ser encontrado no final desta página.

O código dentro da função de loop sozinho é mostrado abaixo, onde podemos notar que o pino PC13 é mantido HIGH (on) por 1000 milissegundos e então desligado (LOW) por mais 1000 milissegundos e isso é feito por infinitas vezes, uma vez que está em função de loop. Portanto, o LED parece estar piscando com um intervalo de 1000 milissegundos.

digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000);              // wait for a second
digitalWrite(PC13, LOW);  // turn the LED off by making the voltage LOW
delay(1000);              // wait for a second

Como dito anteriormente, a placa STM32 deve ser colocada no modo de programação antes de carregar qualquer programa, para fazer isso coloque o jumper de inicialização 0 na posição inferior. A posição do jumper para o modo de programação e o modo de operação são mostrados abaixo.

Agora, para carregar o programa, certifique-se de que o jumper de inicialização 0 esteja no modo de programação conforme mostrado acima e pressione o botão Reiniciar. Assim que você pressionar o botão reset, a placa entrará em modo de programação e o LED verde se apagará, indicando que a placa está pronta para upload. Pressione o botão de upload no IDE do Arduino e seu programa deve ser compilado e carregado. Se tudo tiver funcionado conforme o esperado, você deverá ver o seguinte no console do seu Arduino IDE.

Nota: Às vezes, o Arduino IDE mostrará o upload concluído, mesmo se o programa não foi carregado com sucesso. Portanto, arraste e abra o console para verificar a porcentagem do endereço de gravação (texto de cor laranja) para garantir que o upload foi feito com sucesso.

 

Funcionamento do Programa Blink STM32

Se o programa foi carregado com sucesso, você deve ver o LED verde piscando em um intervalo de 1 segundo. Você também pode mexer no programa para aumentar ou diminuir o atraso.

Depois de fazer o upload do programa, o boot 0 deve ser alterado de volta ao modo operacional para que na próxima vez que a placa for ligada, o programa carregado comece a ser executado automaticamente. O modo de programação e as posições dos modos de operação são mostrados na imagem acima.

Espero que você tenha entendido o tutorial e considerado útil para começar a usar a placa STM32. Você também pode verificar os outros tutoriais de programação stm32f103 para aprender mais sobre a placa. Se você tiver qualquer problema, deixe-os na seção de comentários, diga-me também quais projetos devemos tentar com esta placa STM32.

// a função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup() {
  // inicializa o pino digital PC13 como uma saída.
  pinMode(PC13, OUTPUT);
}

// a função de loop é executada repetidamente para sempre
void loop() {
  digitalWrite(PC13, HIGH);   // liga o LED (HIGH é o nível de tensão)
  delay(1000);                // espere um segundo
  digitalWrite(PC13, LOW);    // desligue o LED tornando a tensão BAIXA
  delay(1000);                // espere um segundo
}