Explicação das taxas de transmissão do UART: de caracteres inúteis a links seriais confiáveis
Um guia prático sobre as taxas de transmissão de UART — por que 9600 e 115200 existem, como o erro de relógio causa falhas de enquadramento, exemplos práticos com MCUs reais e a regra de 2% que todo engenheiro embarcado precisa conhecer.
Conteúdo
- O momento que todos tiveram
- O que realmente é a taxa de transmissão
- As taxas de transmissão padrão (e por que esses números estranhos)
- Por que 9600 é o padrão universal
- Exemplo resolvido: incompatibilidade do módulo GPS
- Exemplo resolvido: registro de dados do sensor de alta velocidade
- A regra dos 2% — Tolerância ao relógio
- Por que 2%?
- Qual é a aparência de 2% na prática
- Fontes de relógio do MCU e erro de taxa de transmissão
- Oscilador de cristal (HSE)
- Oscilador RC interno (HSI)
- O problema do divisor BRR
- Erros comuns
- 1. Taxa de transmissão errada no código
- 2. Limitações do software UART (Bit-Banging)
- 3. Incompatibilidade de nível de tensão (parece um problema de taxa de transmissão)
- 4. Esquecendo a sobrecarga do UART
- 5. Não contabilizando a variação de temperatura
- Quando usar qual taxa de transmissão
- Usando a calculadora
- Referência rápida: fórmulas de taxa de transmissão UART
O momento que todos tiveram
Você conecta duas placas. TX a RX, RX a TX, terra a terra. Você atualiza o firmware, abre o monitor serial e... lixo.ÿÿÿÿou⸮⸮⸮⸮ou talvez nada. Você verifica novamente a fiação. Você troca TX e RX (todo mundo faz isso pelo menos uma vez). Ainda é lixo.
Então, alguém pergunta: “qual taxa de transmissão você está configurada?”
E aí está. Um lado está falando no9600, o outro está ouvindo no115200. Os sinais elétricos são perfeitos — níveis de tensão, fiação, tudo está certo — mas os dois dispositivos estão falando em velocidades completamente diferentes. É como tentar ler um livro enquanto alguém vira as páginas em velocidade tripla. Os personagens estão todos lá; você simplesmente não consegue entendê-los.
Essa é a falha de comunicação serial mais comum em sistemas embarcados e é totalmente evitável quando você entende o que a taxa de transmissão realmente significa e por que ela é tão importante para o UART.
O que realmente é a taxa de transmissão
A taxa de transmissão é o número de transições de sinal — símbolos — por segundo no fio. Especificamente para UART, cada símbolo tem um bit, então a taxa de transmissão é igual à taxa de bits. Quando você define115200baud, você está dizendo ao transmissor que altere a tensão da linha a cada 1/115200 segundos, o que resulta em cerca de 8,68 microssegundos por bit.
Aqui está o ponto crítico: O UART não tem fio de clock. Ao contrário do SPI ou do I2C, não há sinal separado informando ao receptor quando fazer a amostragem. Ambos os lados geram de forma independente seu próprio tempo a partir de seus próprios relógios. Eles só precisam concordar com a velocidade de antemão.
Pense nisso como duas pessoas lendo uma fita adesiva compartilhada. Não há nenhum sino tocando para cada letra — ambos concordaram em olhar para o próximo caractere a cada 8,68 microssegundos. Se o relógio de uma pessoa funcionar 5% mais rápido, ela acabará por começar a ler os caracteres errados. Isso é exatamente o que acontece com o UART quando os relógios não coincidem.
O receptor detecta o início de um byte observando o bit inicial — uma transição de alto (inativo) para baixo. Depois de ver essa borda caindo, ele inicia seu cronômetro interno e coleta amostras dos bits de dados nos intervalos esperados. Se a taxa de transmissão estiver um pouco baixa, quando chegar ao bit 7 ou ao bit de parada, a amostragem está no momento errado.
As taxas de transmissão padrão (e por que esses números estranhos)
Se você já trabalhou com seriais, já viu os suspeitos de sempre:
| Taxa de transmissão | Período de bits | Origem |
|---|---|---|
| 75 | 13,3 ms | Telégrafo (código Baudot) |
| 110 | 9,1 ms | Teletipo ASR-33 |
| 300 | 3,33 ms | Primeiros modems acústicos |
| 1200 | 833 µs | era do modem de 1200 baud |
| 2400 | 417 µs | Padrão V.22 |
| 9600 | 104 µs | De fato, “padrão seguro” |
| 19200 | 52,1 µs | 2 × 9600 |
| 38400 | 26,0 µs | 4 × 9600 |
| 57600 | 17,4 µs | Oddball (não 6 × 9600) |
| 115200 | 8,68 µs | UART “rápido” padrão |
| 230400 | 4,34 µs | 2 × 115200 |
| 460800 | 2,17 µs | Usando muitos MCUs |
| 921600 | 1,09 µs | Perto do limite |
Então, por que57600está no conjunto padrão em vez de56400(o que seria um múltiplo mais limpo)? É115200 / 2, e o próprio115200vem do chip 8250 UART usado em PCs IBM. O 8250 tinha um oscilador de 1,8432 MHz e, com um divisor de 1, você tinha 115200 baud (1843200/16 = 115200). A sobreamostragem do divisor de 16 é incorporada ao hardware.
O resultado: todos nós ainda estamos usando taxas de transmissão ditadas por uma frequência cristalina escolhida em 1981.
Por que 9600 é o padrão universal
O9600baud é lento o suficiente para funcionar com praticamente qualquer fonte de relógio, qualquer comprimento de fio abaixo de alguns metros e qualquer periférico UART — mesmo os mais básicos. É a velocidade que “simplesmente funciona”. Os módulos GPS são padronizados. Os bootloaders o usam. Quando você não souber a que velocidade um dispositivo fala, tente primeiro o § 22§.
Mas o9600também é dolorosamente lento para qualquer coisa além de mensagens de texto curtas. Com 10 bits por quadro (formato 8N1), você obtém 960 bytes por segundo. A impressão de um log de depuração de 1 KB leva mais de um segundo. É por isso que a maioria dos trabalhos de desenvolvimento usa o115200— é 12 vezes mais rápido e ainda é confiável com qualquer cristal MCU moderno.
Exemplo resolvido: incompatibilidade do módulo GPS
Digamos que você tenha um módulo GPS u-blox NEO-6M. Ele emite sentenças NMEA em9600baud por padrão. Seu firmware STM32 configura acidentalmente o USART2 em115200. O que acontece?
O GPS envia um caractere$(ASCII 0x24, binário00100100). No fio a9600baud, cada bit tem 104,17 µs de largura. O quadro completo de 10 bits (início + 8 dados + parada) leva 1,042 ms.
Mas seu STM32 está amostrando a115200— esperando bits com 8,68 µs de largura. Quando vê a borda descendente do bit inicial, ele inicia a amostragem a cada 8,68 µs. No tempo que o GPS leva para enviar UM bit (104,17 µs), o STM32 faz uma amostragem 12 vezes. Ele lê 12 “bits” do que na verdade é um único bit.
O resultado: você vê personagens de aparência aleatória em seu terminal. Não apenas caracteres errados — lixo completamente imprevisível, porque o receptor está cortando a forma de onda em 12 vezes mais partes do que o pretendido.
A correção: Combine a taxa de transmissão. Defina seu STM32 para9600ou reconfigure o GPS (via comandos do protocolo UBX) para115200. Não há negociação, nem detecção automática (na maioria dos casos) — os dois lados devem ser configurados explicitamente com a mesma velocidade.
Exemplo resolvido: registro de dados do sensor de alta velocidade
Você está construindo um registrador de dados que lê um acelerômetro a 1 kHz (1000 amostras por segundo). Cada amostra tem eixos X, Y, Z como números inteiros de 16 bits, além de um carimbo de data/hora. Você deseja transmitir isso via UART para um adaptador serial USB FTDI para captura no PC.
Vamos descobrir qual taxa de transmissão você precisa:
Etapa 1: Calcular a carga útil de dados.- 3 eixos × 2 bytes cada = 6 bytes por amostra
- 4 bytes para carimbo de data/hora = 4 bytes
- 2 bytes de sobrecarga (cabeçalho + soma de verificação) = 2 bytes
- Total: 12 bytes por amostra
12 bytes × 1000 amostras/s = 12.000 bytes/segundo
Etapa 3: converter em bits por segundo (contabilizando a sobrecarga de UART) .Com o enquadramento 8N1 padrão, cada byte custa 10 bits no fio (1 início + 8 dados + 1 parada):
12.000 bytes × 10 bits/byte = 120.000 bits/segundo
Etapa 4: Escolha uma taxa de transmissão com margem.Você precisa de pelo menos 120.000 bps. O próximo aumento da taxa padrão é230400. Mas espere — você pode usar o115200? Isso fornece 115.200 bps no fio, o que é menos do que sua necessidade de 120.000. Você perderá dados.
Então é o § 35§ — dando a você 230.400/120.000 = 92% de espaço livre. Essa é uma margem suficiente para latência de interrupção, gerenciamento de buffer e tráfego intermitente ocasional.
Como alternativa, você pode usar o115200se reduzir sua taxa de amostragem para 960 Hz (115.200/12/10 = 960). Na prática, eu recomendaria o230400com a taxa total de 1 kHz — o espaço livre permite que seu firmware respire.
Use a calculadora de taxa de transmissão UART para verificar a taxa e o erro reais alcançáveis para seu relógio MCU específico.
A regra dos 2% — Tolerância ao relógio
É aqui que o UART fica complicado. Como não há relógio compartilhado, tanto o transmissor quanto o receptor geram sua taxa de transmissão a partir de seus próprios osciladores. Se esses osciladores se separarem, os bits serão mal interpretados.
A tolerância padrão para comunicação UART confiável é de ± 2% de erro cumulativo entre as duas extremidades. Na prática, a maioria das referências recomenda manter cada lado abaixo de ± 1%, para que a pior incompatibilidade total permaneça abaixo de 2%.
Por que 2%?
Os receptores UART usam sobreamostragem de 16 × — eles amostram a linha 16 vezes por período de bits e usam as amostras intermediárias (normalmente amostras 7, 8, 9 de 16) para determinar o valor do bit. Isso dá alguma tolerância ao desvio de tempo.
Para um quadro 8N1 (total de 10 bits), o último bit amostrado é o bit #10 (o bit de parada). O erro acumulado nesse ponto é:
Qual é a aparência de 2% na prática
Em115200baud, um erro de 2% significa que a taxa de transmissão real está em algum lugar entre 112.896 e 117.504. O período de bits está errado em ±0,17 µs. Em um quadro de 10 bits, isso se acumula até ± 1,7 µs de desvio — cerca de 20% de um período de bits. Ainda é seguro, mas você está usando sua margem.
Em9600baud, 2% de erro é muito menos crítico em termos absolutos (± 2,08 µs por bit, ± 20,8 µs por quadro) porque os períodos de bits são muito amplos. Essa é outra razão pela qual o9600é o padrão “seguro” — até mesmo osciladores terríveis podem atingi-lo.
Fontes de relógio do MCU e erro de taxa de transmissão
Nem todos os relógios são criados da mesma forma para o UART:
Oscilador de cristal (HSE)
Precisão: normalmente ± 20 ppm (0,002%). Essencialmente perfeito para UART. Qualquer taxa de transmissão padrão funcionará com erros insignificantes. É isso que o ESP32, a maioria das placas de desenvolvimento STM32 e o Arduino Uno (cristal de 16 MHz) usam.
Oscilador RC interno (HSI)
Precisão: ± 1% a ± 5% dependendo da temperatura e da tensão. O HSI interno de 8 MHz do STM32 é ajustado de fábrica para ± 1% a 25° C, mas pode variar para ± 2% em toda a faixa de temperatura. O oscilador RC interno de 8 MHz do ATmega328P está ± 10% não calibrado (!) mas ± 2% após a calibração de fábrica.
É aqui que as coisas ficam perigosas. Se o transmissor e o receptor estiverem usando osciladores RC, você poderá ter uma incompatibilidade total de até 4%. O UART falhará de forma intermitente — funcionando bem na bancada em temperatura ambiente e, em seguida, eliminando caracteres no campo quando estiver quente ou frio.
Regra prática: Se você estiver executando o UART acima de9600baud sem um cristal, calcule seu pior erro de taxa de transmissão usando a calculadora UART e verifique se ele permanece abaixo de 2%.
O problema do divisor BRR
Mesmo com um cristal perfeito, você pode não obter uma taxa de transmissão exata. O periférico UART divide o relógio por um inteiro (o registro BRR) para gerar a taxa de transmissão:
115200:Alguns MCUs (STM32, SAM, nRF) têm divisores BRR fracionários que resolvem isso. Outros (ATmega) não — você precisa escolher sua frequência de cristal com cuidado. Os cristais clássicos de 7,3728 MHz e 11,0592 MHz existem especificamente porque se dividem uniformemente em taxas de transmissão padrão.
| Crystal | BRR para 115200 | Transferência real | Erro |
|---|---|---|---|
| 7,3728 MHz | 4 | 115200 | 0,00% |
| 8 MHz | 4,34 → 4 | 125000 | 8,51% |
| 11,0592 MHz | 6 | 115200 | 0,00% |
| 16 MHz | 8,68 → 9 | 111111 | 3,55% |
| 18,432 MHz | 10 | 115200 | 0,00% |
| 48 MHz | 26,04 → 26 | 115385 | 0,16% |
| 72 MHz | 39,06 → 39 | 115385 | 0,16% |
Os chips STM32 e ESP32 modernos usam divisores fracionários com 4 a 8 bits fracionários, eliminando efetivamente esse problema. Mas se você estiver trabalhando com um ATmega328P (Arduino Uno) a 16 MHz, esse erro de 3,55% no115200é real. O bootloader do Arduino, na verdade, usa o115200e se safa porque o chip FTDI na outra extremidade é cristalino e tolerante, mas está bem no limite.
Erros comuns
1. Taxa de transmissão errada no código
A causa número um do lixo em série. Verifique três vezes se os dois lados coincidem. Armadilhas comuns:
- O padrão dos módulos GPS é
9600, não115200- Saídas de ROM de inicialização do ESP32 em74880baud (uma saída estranha) - Alguns módulos Bluetooth (HC-05) usam o
38400para comandos AT, mas o9600para o modo de dados - Muitos sensores usam como padrão
9600, independentemente do que o marketing diz sobre “alta velocidade”
2. Limitações do software UART (Bit-Banging)
O software UART (oSoftwareSerialdo Arduino, por exemplo) gera temporização no software usando loops de atraso. Isso significa:
- As interrupções podem aumentar o tempo de bits de forma imprevisível
- A velocidade máxima confiável é normalmente
19200—38400baud - A carga da CPU é dimensionada linearmente com a taxa de transmissão
- Receber durante a transmissão geralmente é impossível
115200ou superior, use um periférico UART de hardware. Sempre.
3. Incompatibilidade de nível de tensão (parece um problema de taxa de transmissão)
Um UART de 3,3 V conversando com um UART de 5 V (ou vice-versa) pode produzir uma saída distorcida que se parece exatamente com uma incompatibilidade de taxa de transmissão. A tensão limite do receptor não está sendo ultrapassada de forma limpa, causando falsos bits de partida e dados corrompidos. Sempre verifique a compatibilidade de tensão antes de culpar a taxa de transmissão.
4. Esquecendo a sobrecarga do UART
Os novos engenheiros geralmente calculam a largura de banda necessária comodata_rate / 8e a definem como a taxa de transmissão. Mas cada byte custa 10 bits (8N1) ou 11 bits (8E1) no fio. A taxa de transferência útil real de115200baud com 8N1 é:
5. Não contabilizando a variação de temperatura
Seu link UART funciona perfeitamente na bancada a 22°C. Em seguida, ele entra em um produto que opera de -20°C a +85°C. O oscilador RC interno oscila 3% e, de repente, você perde bytes nas manhãs frias. Sempre verifique as especificações do oscilador em toda a faixa de temperatura operacional.
Quando usar qual taxa de transmissão
Algumas diretrizes práticas:
9600— Padrão para dispositivos desconhecidos, módulos GPS, módulos de sensores com dados pouco frequentes, fallback do bootloader. Funciona com qualquer fonte de relógio.115200— Padrão para desenvolvimento/depuração, fluxos de dados moderados, a maioria das comunicações entre MCU e PC. Requer cristal ou HSI calibrado.230400—460800— Registro de sensores de alto rendimento, atualização de firmware via UART, ferramentas baseadas em FTDI. Requer cristal e fios curtos (<30 cm).921600—3000000— Aplicações especializadas de alta velocidade (registro ESP32, FTDI na velocidade máxima). Requer cristais combinados, traços curtos e bom layout de PCB. A integridade do sinal começa a importar.
1 Mbaud, você está empurrando o UART além de onde é confortável. Nesse ponto, considere mudar para SPI (síncrono, muito mais rápido) ou USB (diferencial, imune a ruídos).
Usando a calculadora
A calculadora UART Baud Rate & Frame Timing em rftools.io calcula tudo o que discutimos:
- Insira sua taxa de transmissão alvo —
9600,115200ou qualquer que seja a necessidade de seu periférico. - Defina o formato do quadro — bits de dados (geralmente 8), bits de parada (geralmente 1), paridade (geralmente nenhuma).
- Insira a frequência do relógio do MCU — o relógio APB/periférico, não necessariamente o relógio principal. Verifique sua ficha técnica.
- Período de bits — quanto tempo cada bit fica no fio (útil para medições de escopo)
- Período do quadro — tempo total para um personagem
- Taxa de transferência efetiva — taxa de dados real após subtrair a sobrecarga de UART
- Divisor BRR — o valor exato do registro que você precisa (para superamostragem de 16 ×)
- Taxa de transmissão real — o que você realmente obtém após o arredondamento de números inteiros
O indicador de erro é a saída mais importante. Se estiver vermelho, seu link terá problemas. Altere a frequência do relógio, use um divisor fracionário (se o MCU suportar) ou escolha uma taxa de transmissão diferente.
Referência rápida: fórmulas de taxa de transmissão UART
Para quem quer a matemática em um só lugar:
Artigos Relacionados
Thermocouple Voltage to Temperature Conversion
Learn how to accurately calculate thermocouple voltages, handle cold junction compensation, and avoid common measurement pitfalls.
2 de mai. de 2026
Motor ControlBLDC Motor Winding Design for Peak Performance
Master BLDC motor winding design with our comprehensive calculator. Learn wire selection, turns calculation, and performance optimization techniques.
1 de mai. de 2026
Audio EngineeringClass D Amplifier Design for Power Efficiency
Uncover the secrets of Class D amplifier efficiency, from MOSFET selection to power loss calculation with practical engineering insights.
30 de abr. de 2026