El receptor UART de baja potencia STM32L0 lee los datos incorrectos a una velocidad alta en baudios después de que la MCU se activa

Estoy usando una MCU STM32L0 para mi proyecto. La MCU tiene un temporizador de baja potencia (LPTIM) para activar la MCU desde el modo de parada y un UART de baja potencia (LPUART) para activar la MCU desde el modo de parada y recibir/transmitir datos.

Mi problema es: - Cuando dejo que la MCU permanezca en modo de ejecución, LPUART funciona bien a una velocidad en baudios superior a 256000. - Cuando configuro la MCU para que vaya al modo de parada, cuando la MCU recibe algo de LPUART-Rx, se despierta y seguir leyendo los datos de secuencia recibidos. Para esta configuración, cuando la tasa de baudios de UART es inferior a 56000, funciona bien. Sin embargo, cuando la tasa de baudios es mayor que esto (por ejemplo, a 115200), LPUART lee los datos incorrectos. Soy consciente de que en esta configuración, el primer byte transmitido se perderá pero los demás deben leerse correctamente.

Probé con varios datos transmitidos diferentes con diferentes longitudes, sin embargo, los datos recibidos siempre son incorrectos. (Sin embargo, funciona bien cuando la velocidad en baudios es 56000).

¿No hay limitaciones sobre la tasa de BAUD del UART de baja potencia? ¿Podrías vincular un manual de referencia?
Hola, sí, hay un límite en UART de bajo consumo, pero solo cuando se usa LSI/LSE. En mi caso, cuando LPUART recibe algo, DSP se activará y usará el reloj HSI. Y también cuando permanece en modo Run, LPUART no tiene problemas con la alta tasa de baudios (al menos hasta 256000 como probé). Aquí el manual de referencia: st.com/content/ccc/resource/technical/document/reference_manual/…
¿Cuál es su configuración de reloj con respecto a la LPUART?

Respuestas (1)

Despertar desde el modo de parada usando LPUART

La LPUART puede activar la MCU desde el modo de parada cuando el bit UESM está configurado y el reloj de la LPUART está configurado en HSI o LSE (consulte la sección Restablecimiento y control del reloj (RCC).

  • El reloj de origen LPUART es HSI
    Si durante el modo de parada el reloj HSI está apagado, cuando se detecta un flanco descendente en la línea de recepción LPUART, la interfaz LPUART solicita que se encienda el reloj HSI. El reloj HSI se usa entonces para la recepción de tramas.

    • Si se verifica el evento de activación, la MCU se activa desde el modo de bajo consumo y la recepción de datos continúa con normalidad.
    • Si no se verifica el evento de activación, el reloj HSI se apaga nuevamente, la MCU no se activa y permanece en modo de bajo consumo y se libera la solicitud del reloj.

Cuando la LPUART comience a recibir datos, los relojes no se activarán inmediatamente. HSI16 (oscilador RC interno de alta velocidad de 16 MHz) normalmente tarda 3,7 μs en iniciarse.*

Puede eliminar el tiempo de inicio de HSI16 dejándolo en funcionamiento durante el modo de parada, si realmente necesita hacerlo. Una vez que el HSI16 está disponible, el propio LPUART tiene que activarse, lo que también lleva hasta 12 μs*:

*El manual de referencia no menciona los tiempos de inicio, ya que son específicos para cada parte individual. Puede encontrar los valores reales en la hoja de datos, el valor aquí es para STM32L051x6/8 y se enumera aquí solo con fines ilustrativos.

A 56 kbaudios, el período de transmisión de un bit es de 17,86 μs, que es apenas lo suficientemente largo (todavía probablemente fuera de especificación) para que la LPUART se despierte antes de que llegue el siguiente bit y todo se desincronice. Es por eso que no puede aumentar la velocidad en baudios.

Consulte "Determinación de la tasa de baudios máxima de LPUART que permite despertarse correctamente desde el modo de parada cuando la fuente de reloj de LPUART es el reloj HSI" (página 734, manual de referencia )

Creo que deberías copiar el ejemplo de cálculo en el caso ideal del manual.
@BenceKaulics OP no ha revelado qué chip específico se está utilizando, por lo que no puedo hacer el cálculo real. Me referí a la parte relevante del manual de referencia, si eso no es suficiente, no dude en mejorar mi respuesta.
Solo como ejemplificación.