¿Posibilidad de que UART reciba pérdida de datos?

0

En muchos ejemplos que usan STM32, HAL, donde los datos de UART se reciben por interrupción, el código se ve así:

Inicialmente (para iniciar la recepción):

HAL_UART_Receive_IT(&huart1, Rx_data, 1);            

Cuando se completa una interrupción en la recepción:

//Interrupt callback routine
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  
{
    ...
    HAL_UART_Receive_IT(&huart, Rx_data, 1);            
}

Me pregunto si existe la posibilidad de que se pierdan bytes entre la recepción real y después de la (devolución completa) de devolución de llamada, donde la interrupción se inicia nuevamente.

¿O se supone que el controlador de interrupciones de arriba es tan corto que los datos todavía estarán en el búfer de UART?

    
pregunta Michel Keijzers

2 respuestas

3

El control de flujo H / W entre RTS / CTS de UART con búferes Rx de 16 bytes está destinado a evitar el desbordamiento. Pero es útil incluir la paridad para mejorar la integridad de la señal en caso de que la latencia del control de flujo sea demasiado larga.

Cuando se exigen tasas de error bajas con reintento de software, filtrado de datos o pruebas de tasas de datos máximas en entornos ruidosos, es útil habilitar la paridad.

También es beneficioso para comprobar; errores de bit de parada, errores de desbordamiento del búfer y prueba con ruido ambiental simulado. (ESD, pulsos de RF, ruido SMPS CM, etc., falta de conexión a tierra, etc.)

    
respondido por el Tony EE rocketscientist
3

La comunicación UART controlada por interrupciones es probablemente de aproximadamente 50 a 60 líneas del código que utiliza los registros. HAL es un gran agujero negro, ¿quién sabe qué hay dentro?

Para MIDI no tiene demasiadas opciones, pero en general es bueno tener algún tipo de protocolo con el CRC al final de cada paquete (muchos micros STM tienen el hardware CRC integrado).

    
respondido por el P__J__

Lea otras preguntas en las etiquetas