Estoy trabajando en una placa que usa un STM32F411 conectado a un módulo Bluetooth a través de USART. Uno de los objetivos es habilitar el bajo consumo de energía en el modo STOP.
Un breve resumen de la plataforma:
- El módulo Bluetooth puede activar el STM32 utilizando una interrupción EXTI cuando tiene datos para enviar.
- Tengo un controlador de interrupciones para manejar la interrupción en (1).
- El STM32 ingresa al modo de parada en el subproceso inactivo del RTOS una vez que detecta que ningún subproceso está interesado en mantener la MCU despierta.
Soy capaz de poner el procesador en el modo STOP de bajo consumo. Sin embargo, cuando el módulo Bluetooth activa la MCU para comenzar la transferencia de datos, la MCU recoge datos no deseados a través del USART.
He intentado usar la función alternativa del gpio USART RTS - Lo puse en alto para que el módulo bluetooth no pueda enviar ningún dato a través del USART hasta que esté listo. En mi ISR, al recibir la interrupción de Bluetooth, señalo un hilo para reinicializar el USART a la misma velocidad en que estaba recibiendo los datos, antes del modo STOP.
No estoy seguro de por qué el USART se está comportando de esta manera. Según la documentación, la configuración en el modo STOP se debe conservar en el modo de bajo consumo.
Apreciaría algunos consejos para depurar este problema. Gracias de antemano.
Por favor, avíseme si necesita más información.
EDITAR: Descubrí la causa del problema. Cuando el procesador se activa, el usuario ya ha transferido / perdido algunos datos; Debido a esto, el controlador para los datos se corrompe bytes. La solución que finalmente utilicé consistió en establecer el RTS en ALTO antes de dormir; cuando el procesador se despierta y está listo para aceptar datos, baja el RTS y reconfigura el pin como un pin UART. Esto soluciona el problema.
Gracias por tus sugerencias.