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);
}
Projetos
Para quem concluiu a programação da Blue Pill pela IDE do Arduino e deseja evoluir para o fluxo profissional da STMicroelectronics, confira o projeto complementar documentado aqui no blog da RoboBuilders:
- Como Usar o STM32 Blue Pill com STM32CubeIDE: Manual Técnico Completo: aprenda a programar a mesma placa (STM32F103C8T6) fora do ecossistema Arduino, com criação de projeto no Device Configuration Tool (CubeMX integrado), configuração do pino PC13 como saída GPIO, geração automática de código HAL, exemplo Blink com
HAL_GPIO_WritePin, compilação no toolchain GCC e gravação via FTDI em modo DFU com o STM32CubeProgrammer.
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.