Como Programar o STM32 Blue Pill na IDE do Arduino: Manual Técnico Completo

Introdução
Neste manual, será apresentado como instalar, configurar e utilizar a placa de desenvolvimento STM32 Blue Pill (STM32F103C8T6) com a IDE do Arduino. Abordaremos desde suas características de hardware e pinagem até o esquema de ligação com conversor USB-Serial FTDI, posicionamento dos jumpers de boot, instalação do pacote de placas STM32duino e upload de código de validação.
Se desejar adquirir esta placa com suporte técnico e garantia, clique aqui para acessar a loja RoboBuilders.
Descrição geral do produto
O que é o STM32 Blue Pill?
O STM32 Blue Pill é uma placa de prototipagem e desenvolvimento eletrônico de baixo custo baseada no microcontrolador STM32F103C8T6 da fabricante STMicroelectronics. O dispositivo incorpora um processador de 32 bits com arquitetura ARM Cortex-M3, operando em frequência de clock de até 72 MHz com desempenho de até 1,25 DMIPS/MHz.
Projetada com formato compacto em padrão DIP (Dual In-line Package) de 40 pinos, a placa pode ser conectada diretamente a uma protoboard padrão. Ela combina 64 KB de memória Flash interna, 20 KB de memória SRAM, múltiplos barramentos seriais industriais e conversores analógico-digitais rápidos de 12 bits, consolidando-se como uma evolução direta em relação às placas Arduino tradicionais baseadas em microcontroladores de 8 bits.
Para que serve?
- Sistemas embarcados de alta velocidade — processamento de sinais digitais, filtros matemáticos e controle de atuadores com baixa latência;
- Projetos de instrumentação e robótica — aquisição de grandezas analógicas com alta precisão através do ADC de 12 bits multicanal;
- Comunicação em barramentos industriais — integração nativa com redes CAN, barramentos I2C e portas SPI de alto throughput sem necessidade de chips intermediários.
Por que devo usar?
- Processamento superior de 32 bits a 72 MHz — capacidade computacional mais de quatro vezes superior a um Arduino Uno ou Mega operando a 16 MHz;
- Maior quantidade de memória RAM — 20 KB de SRAM dedicados para buffers dinâmicos de comunicação, arrays complexos e algoritmos de controle;
- Custo extremamente competitivo — oferece poder de computação de nível industrial mantendo valor acessível e vasta documentação comunitária.
Quando devo usar?
O STM32 Blue Pill é a escolha recomendada quando:
- O projeto exige cálculos matemáticos contínuos de ponto flutuante ou rotinas de interrupção rápidas que saturam a CPU de 8 bits do microcontrolador ATmega;
- São necessárias múltiplas portas analógicas com resolução superior a 10 bits;
- É preciso integrar barramentos industriais (como Controller Area Network — CAN) ou múltiplas linhas seriais síncronas/assíncronas simultâneas.
Não é a escolha mais indicada quando:
- O projeto exige conectividade sem fio nativa integrada à mesma placa, como Wi-Fi ou Bluetooth (situação na qual placas da família ESP32 ou ESP8266 são mais convenientes);
- A aplicação demanda periféricos puramente em nível de tensão de 5V em todas as linhas analógicas sem divisores de tensão (o núcleo opera internamente em 3,3V).
Especificações técnicas
Principais especificações
| Parâmetro | Especificação técnica |
|---|---|
| Circuito Integrado (CI) | STM32F103C8T6 |
| Núcleo de Processamento | ARM 32-bit Cortex-M3 |
| Frequência Máxima de Trabalho | 72 MHz |
| Memória Flash de Programa | 64 KB |
| Memória SRAM de Dados | 20 KB |
| Resolução do Conversor ADC | 12 bits (taxa de amostragem de até 1 µs) |
| Canais ADC Disponíveis | 10 canais |
| Tensão de Operação (Núcleo / I/O) | 2,0 VDC a 3,6 VDC (nominal de 3,3 VDC) |
| Tensão de Alimentação da Placa | 5,0 VDC (porta Micro-USB / pino 5V) ou 3,3 VDC (pino 3.3V) |
| Portas de Entrada/Saída (GPIO) | 37 pinos de I/O de uso geral |
| Tolerância a 5V em I/O | Pinos selecionados com compatibilidade 5V (5V Tolerant) |
| Temporizadores (Timers) | 3 Timers de 16 bits de uso geral + 1 Advanced-Control Timer |
| Interfaces de Comunicação | 2x I2C, 3x USART, 2x SPI, 1x CAN 2.0B, 1x USB 2.0 FS |
| Modo de Depuração e Gravação | Serial Wire Debug (SWD) e Bootloader Serial UART |
| Temperatura de Operação | -40 ºC a +85 ºC |
| Dimensões da Placa | 53 x 22 x 11 mm |
| SKU RoboBuilders | RB0335 |
Comparação entre Arduino e STM32
A tabela abaixo sintetiza as principais diferenças de arquitetura e capacidade de processamento entre as placas Arduino clássicas e a placa STM32 Blue Pill:
| Recurso | Arduino Uno R3 | Arduino Mega 2560 | STM32 Blue Pill (STM32F103C8T6) |
|---|---|---|---|
| Microcontrolador | ATmega328P | ATmega2560 | STM32F103C8T6 |
| Barramento do Processador | 8 bits | 8 bits | 32 bits (ARM Cortex-M3) |
| Frequência de Clock | 16 MHz | 16 MHz | 72 MHz (4,5x mais rápido) |
| Memória Flash | 32 KB | 256 KB | 64 KB |
| Memória SRAM | 2 KB | 8 KB | 20 KB (10x mais que o Uno) |
| Resolução ADC | 10 bits (0 a 1023) | 10 bits (0 a 1023) | 12 bits (0 a 4095) |
| Tensão de Lógica | 5,0 V | 5,0 V | 3,3 V (com pinos 5V-Tolerant) |
| Interfaces Seriais USART | 1 porta | 4 portas | 3 portas independentes |
| Interface CAN | Não possui nativa | Não possui nativa | 1 canal integrado (CAN 2.0B) |
| Interface USB Nativa | Não (usa conversor USB) | Não (usa ATmega16U2) | USB 2.0 Full Speed embutida no chip |
Pinagem e descrição dos terminais
O STM32 Blue Pill possui 40 terminais organizados em duas fileiras laterais, além de um conector de 4 pinos na extremidade para o barramento SWD (Serial Wire Debug).
Mapeamento dos pinos principais
| Pino da Placa | Função Primária | Recursos Especiais / Funções Secundárias | Tolerância a 5V |
|---|---|---|---|
| 3.3V | Alimentação 3,3V | Saída regulada do conversor onboard (RT9193) | — |
| 5V | Alimentação 5,0V | Entrada de alimentação não regulada ou saída VBUS | — |
| GND | Terra (0V) | Linha de referência comum do circuito | — |
| VBAT | Alimentação RTC | Entrada para bateria externa do relógio de tempo real | Não |
| PC13 | I/O Digital | LED verde integrado à placa (ativo em nível baixo) | Não |
| PC14 / PC15 | I/O Digital | Conexão para oscilador de cristal de 32,768 kHz (RTC) | Não |
| PA0 a PA7 | I/O Digital | Entradas analógicas ADC0 a ADC7 / USART2 (PA2/PA3) | Não |
| PA8 | I/O Digital | Saída de clock do microcontrolador (MCO) / PWM | Sim (5V-Tolerant) |
| PA9 | I/O Digital | USART1 TX (Transmissão de gravação serial) | Sim (5V-Tolerant) |
| PA10 | I/O Digital | USART1 RX (Recepção de gravação serial) | Sim (5V-Tolerant) |
| PA11 / PA12 | I/O Digital | Linhas de dados USB nativas (USB_DM / USB_DP) / CAN RX e TX | Sim (5V-Tolerant) |
| PB0 / PB1 | I/O Digital | Entradas analógicas ADC8 e ADC9 / Saídas PWM | Não |
| PB6 / PB7 | I/O Digital | Barramento I2C1 SCL e SDA / USART1 alternativo | Sim (5V-Tolerant) |
| PB10 / PB11 | I/O Digital | Barramento I2C2 SCL e SDA / USART3 TX e RX | Sim (5V-Tolerant) |
| SWDIO / SWCLK | Depuração SWD | Linhas de dados e clock para programador ST-Link V2 | — |
⚠️ Atenção: Os pinos marcados com tolerância a 5V (5V-Tolerant) podem receber sinais lógicos digitais de 5V sem queimar o microcontrolador. No entanto, os pinos analógicos (ADC) não toleram tensões superiores a 3,3V — aplicar 5V a uma entrada analógica danificará permanentemente a porta do chip.
Instalação e conexão
Para gravar o primeiro programa no STM32 Blue Pill através da IDE do Arduino sem utilizar um gravador ST-Link dedicado, utilizaremos o método padrão de bootloader serial UART. Este método emprega um módulo conversor USB-Serial (FTDI FT232RL, CP2102 ou CH340G) conectado à porta serial USART1 do chip.
Tabela de conexão (STM32 Blue Pill ➔ Módulo FTDI)
| Pino STM32 Blue Pill | Pino Módulo FTDI | Descrição da Ligação |
|---|---|---|
| GND | GND | Aterramento comum de referência elétrica |
| 5V (ou VCC) | 5V | Alimentação proveniente da porta USB |
| PA9 (TX1) | RXI (RX) | Pino de transmissão da STM32 conectado à recepção do conversor |
| PA10 (RX1) | TXO (TX) | Pino de recepção da STM32 conectado à transmissão do conversor |
💡 Dica: Lembre-se sempre de cruzar os sinais de comunicação assíncrona: o canal de transmissão (TX) do transmissor conecta-se diretamente ao canal de recepção (RX) do receptor, e vice-versa.
Configuração dos Jumpers de Inicialização (BOOT0 e BOOT1)
No centro da placa há dois conjuntos de três pinos com jumpers amarelos rotulados como BOOT0 e BOOT1. O posicionamento destes jumpers determina qual memória o microcontrolador lê no momento da inicialização:
1. Modo de Gravação (Modo Bootloader Serial / DFU)
Para gravar novos programas via porta serial, o jumper BOOT0 deve ser colocado na posição 1 (posição superior, mais próxima da borda do conector micro-USB), enquanto o jumper BOOT1 permanece na posição 0 (posição inferior):
⚠️ Atenção: Após mover o jumper BOOT0 para a posição 1, pressione o botão Reset da placa antes de clicar em “Carregar” na IDE do Arduino para que o STM32 reinicie e entre no modo de escuta serial.
2. Modo de Operação Normal (Execução a partir da memória Flash)
Após o término do upload do firmware, coloque ambos os jumpers BOOT0 e BOOT1 na posição 0 (modo inferior padrão):
⚠️ Atenção: Depois de carregar o programa, você deve alterar os jumpers de volta para o modo Normal e pressionar o botão Reset para que, nas próximas inicializações, a placa execute automaticamente o código gravado na memória Flash.
Configuração do ambiente na IDE do Arduino
Passo 1: Instalação do Arduino IDE
Caso ainda não possua a IDE do Arduino instalada em seu computador, siga os passos abaixo:
- Acesse o portal oficial de download do software clicando aqui no site arduino.cc/en/software;
- Escolha o instalador compatível com o seu sistema operacional (Windows, Linux ou macOS):
- Na tela de doação voluntária, clique em “Just Download” para iniciar o download do arquivo de instalação;
- Execute o instalador baixado e conclua o processo padrão de instalação.
Passo 2: Instalação do pacote de placas STM32duino
- Abra a IDE do Arduino, clique no menu superior Arquivo e selecione a opção Preferências (ou pressione o atalho
Ctrl + Vírgula):
- Localize o campo URLs Adicionais para Gerenciadores de Placas e clique no ícone de janela à direita:
- Cole a seguinte URL de índice do STM32duino no campo de texto e clique em OK:
http://dan.drown.org/stm32duino/package_STM32duino_index.json
💡 Dica: Se estiver utilizando a versão oficial mais recente do pacote oficial STM32 da STMicroelectronics, você também pode adicionar o link do repositório oficial da ST:
https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
- No menu principal da IDE, acesse Ferramentas ➔ Placa ➔ Gerenciador de Placas…;
- Na caixa de busca superior, digite STM32. Localize o pacote intitulado “STM32F1xx/GD32F1xx boards” e clique no botão Instalar:
- Aguarde o download e a descompactação automática de todos os arquivos de compilação, cabeçalhos e compiladores cruzados ARM GCC.
Passo 3: Parametrização da placa na IDE
Com o pacote devidamente instalado, configure as seguintes opções no menu Ferramentas:
- Placa (Board): Selecione STM32F103C series ➔ Generic STM32F103C series;
- Upload method (Método de envio): Selecione Serial (necessário para gravação via módulo UART FTDI):
- Porta (Port): Selecione a porta de comunicação COM correspondente ao seu conversor USB-Serial conectado.
Código de teste e validação
Para comprovar que o ambiente de desenvolvimento, a placa e a fiação estão operando perfeitamente, utilizaremos uma adaptação do clássico exemplo Blink do Arduino.
Na placa STM32 Blue Pill, o LED indicador verde onboard está conectado diretamente ao pino digital PC13.
Código completo comentado (Blink PC13)
// Função de inicialização executada uma única vez no boot da placa
void setup() {
// Configura o pino digital PC13 (LED integrado) como saída
pinMode(PC13, OUTPUT);
}
// Loop principal de repetição contínua
void loop() {
// Envia nível lógico alto (HIGH) para o pino do LED
digitalWrite(PC13, HIGH);
// Aguarda um intervalo de 1000 milissegundos (1 segundo)
delay(1000);
// Envia nível lógico baixo (LOW) para apagar o LED
digitalWrite(PC13, LOW);
// Aguarda mais um intervalo de 1000 milissegundos (1 segundo)
delay(1000);
}
💡 Dica técnica: Na maioria das revisões de hardware do STM32 Blue Pill, o anodo do LED integrado é alimentado pela linha de 3,3V através de um resistor limitador e o catodo é chaveado pelo pino PC13. Isso significa que o acionamento é de lógica invertida: o LED acende quando PC13 está em nível
LOWe apaga quando está em nívelHIGH.
Procedimento de gravação passo a passo
- Certifique-se de que o jumper BOOT0 esteja na posição 1 e o jumper BOOT1 na posição 0;
- Conecte o cabo USB do módulo FTDI ao computador;
- Pressione o botão físico Reset na placa STM32 para colocá-la em modo de recepção;
- Na IDE do Arduino, clique no botão Carregar (Upload);
- O compilador construirá o arquivo binário e o gravador serial transferirá o código pela USART1. Ao final, será exibida a confirmação de upload no console:
- Mude o jumper BOOT0 de volta para a posição 0 e pressione o botão Reset. O LED verde começará a piscar ritmicamente em ciclos de 1 segundo!
Exemplos de aplicação
Exemplo 1: Leitura analógica com conversor de 12 bits
Diferente do Arduino Uno (que possui conversores ADC de 10 bits com escala de 0 a 1023), o STM32F103 possui ADC nativo de 12 bits, fornecendo leituras de 0 a 4095 (4 vezes mais resolução para medidas de instrumentação):
// Definição do pino de leitura analógica (canal ADC 0)
const int pinoAnalogico = PA0;
// Variável para armazenar a leitura bruta
int valorBruto = 0;
// Variável para conversão calculada de tensão
float tensaoCalculada = 0.0;
void setup() {
// Inicializa a comunicação serial a 115200 bps
Serial.begin(115200);
// Configura a resolução do conversor ADC para 12 bits (padrão STM32)
analogReadResolution(12);
}
void loop() {
// Realiza a leitura da entrada analógica PA0 (retorna de 0 a 4095)
valorBruto = analogRead(pinoAnalogico);
// Converte o valor analógico de 12 bits para a faixa de tensão de 0 a 3.3V
tensaoCalculada = (valorBruto * 3.3) / 4095.0;
// Imprime a leitura bruta no Monitor Serial
Serial.print("Leitura ADC (12 bits): ");
Serial.print(valorBruto);
// Imprime a tensão correspondente em Volts
Serial.print(" | Tensao: ");
Serial.print(tensaoCalculada, 3);
Serial.println(" V");
// Intervalo de 500 ms entre amostras consecutivas
delay(500);
}
Exemplo 2: Comunicação com portas seriais adicionais por hardware
O STM32F103 possui 3 portas USART independentes de hardware. O código abaixo demonstra a transmissão de dados contínua na porta serial secundária Serial1 (pinos PA9 TX e PA10 RX) sem bloquear o processamento:
// Contador de mensagens transmitidas
unsigned long contadorMensagens = 0;
void setup() {
// Inicializa a porta serial principal de comunicação USB/USART1
Serial.begin(115200);
// Aguarda 1 segundo para estabilização das interfaces
delay(1000);
// Imprime mensagem inicial de boas-vindas
Serial.println("=== RoboBuilders: STM32 Blue Pill Inicializado ===");
}
void loop() {
// Incrementa o contador de mensagens
contadorMensagens++;
// Envia telemetria serial com timestamp
Serial.print("Uptime: ");
Serial.print(millis() / 1000);
Serial.print("s | Pacotes enviados: ");
Serial.println(contadorMensagens);
// Intervalo de 1 segundo entre envios
delay(1000);
}
Conclusão
Este manual abordou de forma completa a placa de desenvolvimento ARM STM32 Blue Pill (STM32F103C8T6), desde suas especificações e arquitetura até a configuração do ambiente na IDE do Arduino, pinagem, jumpers de boot e gravação prática de código:
- Descrição geral do produto: microcontrolador ARM 32-bit Cortex-M3 de alto desempenho e excelente custo-benefício em formato compatível com protoboard;
- Especificações técnicas: frequência de 72 MHz, 64 KB de memória Flash, 20 KB de SRAM, 37 pinos de I/O e conversor analógico-digital de 12 bits;
- Comparação entre Arduino e STM32: superioridade em poder de processamento, memória e portas analógicas mantendo total compatibilidade com a sintaxe do ecossistema Arduino;
- Pinagem e descrição dos terminais: mapeamento das portas A, B e C, terminais com tolerância a 5V e indicação do pino PC13 para o LED integrado;
- Instalação e conexão: ligação com módulo conversor FTDI USB-UART e posicionamento correto dos jumpers BOOT0 e BOOT1 para gravação e execução;
- Configuração de software: adição da URL do repositório STM32duino nas preferências da IDE do Arduino, download das placas e seleção do método de upload Serial;
- Validação prática e exemplos: compilação e upload do teste Blink no pino PC13, leitura analógica com resolução de 12 bits e restauração da placa para o modo normal de operação.
Com esta configuração devidamente estabelecida, o STM32 Blue Pill torna-se uma das ferramentas mais versáteis e poderosas para desenvolvedores e entusiastas que buscam o máximo rendimento em projetos de robótica, controle de motores e automação embarcada.
Solução de problemas
Olá! Sou o assistente técnico da RoboBuilders. Descreva seu problema com o Como Programar o STM32 Blue Pill na IDE do Arduino: Manual Técnico Completo e eu ajudarei a encontrar a solução.
O assistente usa IA e pode errar. Confirme informações críticas no datasheet oficial do fabricante.