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

Conversão ADC gráfico

No ADC de 12 bits do STM32:

0 → 0V
4095 → 3.3V

Relação entre tensão e valor digital

Conversão ADC gráfico

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:

Ligação potenciômetro STM32

Configuração no STM32CubeIDE

Passo 1 — Selecionar o pino ADC

Ao selecionar um pino como entrada analógica (ex: PA0), o ADC é habilitado automaticamente.

Selecionando PA0 ADC

Passo 2 — Configurações do ADC

Configurações ADC

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:

Ver curso STM32 para Iniciantes