Skip to main content
Graduate
August 9, 2024
Solved

How to calculate baud rate error with an external low-frequency oscillator

  • August 9, 2024
  • 4 replies
  • 2964 views

Hi everyone,

I am working on a power-saving application using the STM32G030 series IC, and I need to configure the UART to work at a baud rate of 9600 with an external low-frequency oscillator (32.768 kHz).

My goal is to ensure that the UART baud rate tolerance below 2.5%. Could you advise on how to calculate the baud rate error in this scenario?

Additionally, are there any other potential issues I should be aware of with this configuration?

Best regards.

    This topic has been closed for replies.
    Best answer by waclawek.jan

    You can't use UART with baudrate divisor below 16 anyway. LPUART is capable of that, but with some caveats, and the baudrate error - more precisely and more importantly, bit duration - is of course consequence of clock chosen, as others said.

    Why do you think you need that particular value of baudrate error? Is it going to be used as Rx or Tx?  What's the counterpart and what exactly is the link between them? 

    JW

    4 replies

    Super User
    August 9, 2024

    The USART baud rate register (USART_BRR) tells you the division factor that the baud rate generator applies to its input clock

    AndrewNeil_0-1723197946713.png

    Thus you can work out the actual baud rate and, thence, the error from your desired baud rate.

    keinAuthor
    Graduate
    August 13, 2024

    I follow the formula and got the closest actual baudrate is 9362Hz (2*32768/7, USARTDIV=7, OVER8=0)

    The tolerence is too large and cannot be used.

    is there any other solution like LPUART, or other IC can works in this case?

    Graduate II
    August 13, 2024

    You have a general problem there.

    Especially a "non-clocked" async interface like the UART needs some oversampling to work reliably, AND a half-way fitting clock rate.

    So either use some higher clock rate, or - if low power is the most important feature - lower the baud rate.

    Super User
    August 13, 2024

    You can't use UART with baudrate divisor below 16 anyway. LPUART is capable of that, but with some caveats, and the baudrate error - more precisely and more importantly, bit duration - is of course consequence of clock chosen, as others said.

    Why do you think you need that particular value of baudrate error? Is it going to be used as Rx or Tx?  What's the counterpart and what exactly is the link between them? 

    JW

    keinAuthor
    Graduate
    August 14, 2024

    Thanks for reply.

    Initially, I just wanted to determine whether this configuration could achieve the goal. Now I understand that this is only possible with LPUART (but not available in my IC).

    The connected device is a wireless module with 9600 baud, which uses both RX and TX. 

    And the concern about baud rate errors because environment could be high and low temperatures, which can cause the oscillator to deviate and lead to communication failures.

    Again, Thank you all for the help.

    Super User
    August 14, 2024

    Crystal oscillators don't drift with temperature significantly for UART to fail just because of that reason.

    However, I see that the nonexact bit duration may be a concern. Would you have LPUART available, I'd suggest to investigate, whether the counterpart can't be set to different (lower) baudrate. 

    JW