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

Placa de Desenvolvimento ARM STM32F103C8T6 (Blue Pill) — 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.

Placa de desenvolvimento ARM STM32F103C8T6 Blue Pill

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âmetroEspecificação técnica
Circuito Integrado (CI)STM32F103C8T6
Núcleo de ProcessamentoARM 32-bit Cortex-M3
Frequência Máxima de Trabalho72 MHz
Memória Flash de Programa64 KB
Memória SRAM de Dados20 KB
Resolução do Conversor ADC12 bits (taxa de amostragem de até 1 µs)
Canais ADC Disponíveis10 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 Placa5,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/OPinos selecionados com compatibilidade 5V (5V Tolerant)
Temporizadores (Timers)3 Timers de 16 bits de uso geral + 1 Advanced-Control Timer
Interfaces de Comunicação2x I2C, 3x USART, 2x SPI, 1x CAN 2.0B, 1x USB 2.0 FS
Modo de Depuração e GravaçãoSerial Wire Debug (SWD) e Bootloader Serial UART
Temperatura de Operação-40 ºC a +85 ºC
Dimensões da Placa53 x 22 x 11 mm
SKU RoboBuildersRB0335

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:

RecursoArduino Uno R3Arduino Mega 2560STM32 Blue Pill (STM32F103C8T6)
MicrocontroladorATmega328PATmega2560STM32F103C8T6
Barramento do Processador8 bits8 bits32 bits (ARM Cortex-M3)
Frequência de Clock16 MHz16 MHz72 MHz (4,5x mais rápido)
Memória Flash32 KB256 KB64 KB
Memória SRAM2 KB8 KB20 KB (10x mais que o Uno)
Resolução ADC10 bits (0 a 1023)10 bits (0 a 1023)12 bits (0 a 4095)
Tensão de Lógica5,0 V5,0 V3,3 V (com pinos 5V-Tolerant)
Interfaces Seriais USART1 porta4 portas3 portas independentes
Interface CANNão possui nativaNão possui nativa1 canal integrado (CAN 2.0B)
Interface USB NativaNão (usa conversor USB)Não (usa ATmega16U2)USB 2.0 Full Speed embutida no chip
Comparativo gráfico entre especificações da linha Arduino e a placa STM32

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).

Diagrama completo de pinagem e funções da placa STM32F103C8T6 Blue Pill

Mapeamento dos pinos principais

Pino da PlacaFunção PrimáriaRecursos Especiais / Funções SecundáriasTolerância a 5V
3.3VAlimentação 3,3VSaída regulada do conversor onboard (RT9193)
5VAlimentação 5,0VEntrada de alimentação não regulada ou saída VBUS
GNDTerra (0V)Linha de referência comum do circuito
VBATAlimentação RTCEntrada para bateria externa do relógio de tempo realNão
PC13I/O DigitalLED verde integrado à placa (ativo em nível baixo)Não
PC14 / PC15I/O DigitalConexão para oscilador de cristal de 32,768 kHz (RTC)Não
PA0 a PA7I/O DigitalEntradas analógicas ADC0 a ADC7 / USART2 (PA2/PA3)Não
PA8I/O DigitalSaída de clock do microcontrolador (MCO) / PWMSim (5V-Tolerant)
PA9I/O DigitalUSART1 TX (Transmissão de gravação serial)Sim (5V-Tolerant)
PA10I/O DigitalUSART1 RX (Recepção de gravação serial)Sim (5V-Tolerant)
PA11 / PA12I/O DigitalLinhas de dados USB nativas (USB_DM / USB_DP) / CAN RX e TXSim (5V-Tolerant)
PB0 / PB1I/O DigitalEntradas analógicas ADC8 e ADC9 / Saídas PWMNão
PB6 / PB7I/O DigitalBarramento I2C1 SCL e SDA / USART1 alternativoSim (5V-Tolerant)
PB10 / PB11I/O DigitalBarramento I2C2 SCL e SDA / USART3 TX e RXSim (5V-Tolerant)
SWDIO / SWCLKDepuração SWDLinhas 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.

Esquema de ligação elétrica entre a placa STM32 Blue Pill e o módulo conversor FTDI USB-Serial

Tabela de conexão (STM32 Blue Pill ➔ Módulo FTDI)

Pino STM32 Blue PillPino Módulo FTDIDescrição da Ligação
GNDGNDAterramento comum de referência elétrica
5V (ou VCC)5VAlimentaçã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):

Posicionamento dos jumpers amarelos da placa no modo de programação com BOOT0 em nível 1

⚠️ 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):

Posicionamento dos jumpers amarelos em modo de execução normal com BOOT0 em nível 0

⚠️ 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:

  1. Acesse o portal oficial de download do software clicando aqui no site arduino.cc/en/software;
  2. Escolha o instalador compatível com o seu sistema operacional (Windows, Linux ou macOS):
Página oficial de download da IDE do Arduino com opções para múltiplos sistemas operacionais
  1. Na tela de doação voluntária, clique em “Just Download” para iniciar o download do arquivo de instalação;
  2. Execute o instalador baixado e conclua o processo padrão de instalação.

Passo 2: Instalação do pacote de placas STM32duino

  1. Abra a IDE do Arduino, clique no menu superior Arquivo e selecione a opção Preferências (ou pressione o atalho Ctrl + Vírgula):
Acesso ao menu de preferências da IDE do Arduino
  1. Localize o campo URLs Adicionais para Gerenciadores de Placas e clique no ícone de janela à direita:
Campo de URLs adicionais para gerenciadores de placas nas preferências
  1. 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
Inserção do endereço de repositório do STM32duino

💡 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

  1. No menu principal da IDE, acesse Ferramentas ➔ Placa ➔ Gerenciador de Placas…;
  2. Na caixa de busca superior, digite STM32. Localize o pacote intitulado “STM32F1xx/GD32F1xx boards” e clique no botão Instalar:
Instalação do pacote STM32F1xx no Gerenciador de Placas
  1. 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:

  1. Placa (Board): Selecione STM32F103C seriesGeneric STM32F103C series;
  2. Upload method (Método de envio): Selecione Serial (necessário para gravação via módulo UART FTDI):
Seleção do método de gravação Serial nas ferramentas da IDE
  1. 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 Blink aberto na IDE do Arduino adaptado para o pino PC13 do STM32
// 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 LOW e apaga quando está em nível HIGH.

Procedimento de gravação passo a passo

  1. Certifique-se de que o jumper BOOT0 esteja na posição 1 e o jumper BOOT1 na posição 0;
  2. Conecte o cabo USB do módulo FTDI ao computador;
  3. Pressione o botão físico Reset na placa STM32 para colocá-la em modo de recepção;
  4. Na IDE do Arduino, clique no botão Carregar (Upload);
  5. 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:
Log de gravação concluída com sucesso via serial no STM32 Blue Pill
  1. 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.