STM32L0 El receptor UART de baja potencia lee los datos incorrectos a alta velocidad después de que MCU se haya activado

1

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

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

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

    
pregunta bienle

1 respuesta

4
  

Activación desde el modo de parada con LPUART

     

El LPUART puede activar el MCU desde el modo de parada cuando se establece el bit UESM y el reloj del LPUART se establece en HSI o LSE (consulte la sección Restablecer y control de reloj (RCC).

     
  • El reloj fuente de LPUART es HSI
      Si durante el modo de parada, el reloj HSI se desactiva, cuando se detecta un flanco descendente en la línea de recepción LPUART, la interfaz LPUART solicita que el reloj HSI esté encendido. El reloj HSI se utiliza para la recepción de cuadros.

         
    • Si se verifica el evento de activación, la MCU se activa del modo de bajo consumo y la recepción de datos se realiza normalmente.
    •   
    • Si el evento de activación no se verifica, el reloj HSI se apaga de nuevo, la MCU no se despierta y permanece en modo de bajo consumo y se libera la solicitud de reloj.
    •   
  •   

Cuando el LPUART comienza a recibir datos, los relojes no se activarán de inmediato. El HSI16 (oscilador RC de 16 MHz interno de alta velocidad) generalmente tarda 3.7 μs en comenzar. *

PuedeeliminareltiempodeiniciodeHSI16dejándoloenejecuciónduranteelmododeparada,sirealmentenecesitahacerlo.UnavezqueelHSI16estédisponible,elpropioLPUARTdebeactivarse,loquetambiénllevahasta12μ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 el STM32L051x6 / 8 y se lista 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 (aún probablemente fuera de especificaciones) para que el LPUART se active antes de que llegue el próximo bit y todo desincronice. Por eso no puedes aumentar la velocidad de transmisión.

Consulte "Determinación de la velocidad en baudios de LPUART máxima que permite la activación correcta desde el modo de parada cuando la fuente del reloj LPUART es el reloj HSI "(página 734, manual de referencia )

    
respondido por el jms

Lea otras preguntas en las etiquetas