Saludos al foro!
Me ha tocado por razones profesionales empezar a trabajar con los micros de la familia STM32.
La primera aplicación que estoy desarrollando lleva incorporada una recepción serie convencional (9600,n,8,1).
Se trata de un sistema que espera una cadena de comandos desde un PC y una vez recibida, la procesa y actúa en consecuencia. Todo muy convencional.
He escrito y depurado el código en el entorno STM32CubeIDE utilizando la función HAL_UART_Receive_IT y funciona todo correctamente.
El problema me ha surgido al intentar "proteger" la conexión frente a posibles errores. La cadena de comando que espera tiene una longitud determinada, pongamos por ejemplo 10 caracteres. SI le mando 10 caracteres todo funciona correctamente pero si le mando una cadena de longitud 8 no consigo detectar el error.
¿Alguna idea?
Gracias por anticipado!
Hola. No das muchos detalles, pero lo que comprendo es que la trama que envías debe ser 10 caracteres, si es menos o más debe informarte que el paquete de datos no es útil. ¿Estoy en lo correcto?
Si es así, en los sistemas de comunicación serial donde la trama debe tener cantidades fijas, lo que suele usarse es un temporizador que su desborde de tiempo debe ser mayor lo que dura los 8 bits más el bit de inicio y de parada. (generalmente 10 veces más)
Cuando llega el primer byte, arrancas el temporizador, a partir que llega el segundo y los siguientes reinicias el temporizador. También existe una variable que cuenta los bytes que van llegado.
Si en algún momento el temporizador llega a desbordarse, se asume que el paquete de datos está completo y ahí determinas por la variable contador si tienes tus 10 bytes o más o menos.