Como usar o ADC no STM32F103C8T6 para ler sensores analógicos
O que é o ADC?
O ADC (Conversor Analógico-Digital) é um periférico responsável por transformar um sinal analógico em um valor digital equivalente.
Em sistemas embarcados, diversos sensores fornecem informações através de uma tensão elétrica variável. No entanto, o processador do microcontrolador opera apenas com dados digitais.
Para resolver esse problema, o ADC realiza a medição da tensão presente em sua entrada e a converte esse valor em um número inteiro, que pode ser utilizado pelo sistema para monitoramento, controle ou tomada de decisões.
Graças ao ADC, é possível desenvolver aplicações como leitura de potenciômetros, sensores de temperatura, sensores de corrente, monitoramento de baterias e diversos outros sistemas de aquisição de dados.
Visão Geral do ADC no STM32
No ADC de 12 bits do STM32:
0 → 0V
4095 → 3.3V
Relação entre tensão e valor digital
Exemplo com potenciômetro B10K
O potenciômetro gera uma tensão variável entre 0V e 3.3V conforme sua rotação.
O ADC converte essa tensão em valores digitais:
- 0V → 0
- 3.3V → 4095
Configuração no STM32CubeIDE
Passo 1 — Selecionar o pino ADC
Ao selecionar um pino como entrada analógica (ex: PA0), o ADC é habilitado automaticamente.
Passo 2 — Configurações do ADC
- Resolution: 12 bits
- Data Alignment: Right
- Sampling Time: médio (melhor equilíbrio entre velocidade e estabilidade)
Leitura do ADC (modo polling - manual)
Este tutorial utiliza o método polling, onde o microcontrolador inicia a conversão e aguarda sua conclusão manualmente.
#include "main.h"
#include "adc.h"
#include "gpio.h"
ADC_HandleTypeDef hadc1;
uint32_t valor_adc = 0;
float tensao = 0;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
while (1)
{
// Inicia conversão do ADC
HAL_ADC_Start(&hadc1);
// Aguarda a conversão terminar (polling manual)
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
// Lê o valor convertido
valor_adc = HAL_ADC_GetValue(&hadc1);
// Converte para tensão real
tensao = (valor_adc * 3.3f) / 4095.0f;
HAL_Delay(100);
}
}
Explicação do funcionamento
HAL_ADC_Start() inicia a conversão do ADC.
HAL_ADC_PollForConversion() faz o microcontrolador aguardar a conversão terminar (modo polling).
HAL_ADC_GetValue() retorna o valor digital convertido.
A variável tensao converte esse valor para volts reais.
Conversão matemática
tensao = (valor_adc * 3.3f) / 4095.0f;
Conclusão
O ADC é um dos periféricos mais importantes em sistemas embarcados, pois permite que o microcontrolador tenha acesso ao mundo físico através da leitura de sinais analógicos.
Neste artigo, você entendeu o conceito de ADC, como ocorre a conversão analógico-digital e como esses valores são representados dentro do STM32 como números entre 0 e 4095.
Também vimos um exemplo prático utilizando o STM32F103C8T6 com leitura de um potenciômetro, além da configuração no CubeIDE e a implementação utilizando a biblioteca HAL em modo polling.
Agora você já possui a base necessária para começar a trabalhar com sensores analógicos em projetos reais, como leitura de temperatura, corrente, tensão e outras grandezas físicas.
Esse é o primeiro passo para desenvolver aplicações mais avançadas com aquisição de dados em sistemas embarcados.
Próximo passo: evoluir no STM32
O curso STM32 para Iniciantes foi desenvolvido para ajudar estudantes e profissionais a iniciarem no desenvolvimento de sistemas embarcados utilizando microcontroladores da família STM32.
Você vai aprender GPIO, ADC, PWM, UART, SPI, I2C, CAN, timers e muito mais.
👉 Acesse agora: