¿Cómo se verifica la saturación?

0

Estoy usando un STM32F103C8T6 (también conocido como pastilla azul) con Eclipse / System Workbench y HAL.

El siguiente código:

 volatile HAL_StatusTypeDef result =
  HAL_UART_Transmit(&huart1, bytesToSend + currentSendIndex, 
  bytesPerMessageToSend, 100);

 volatile uint32_t error = HAL_UART_GetError(&huart1);

funciona bien cuando se envía 1 byte, y (más tarde) recibe 1 byte y se itera.

Sin embargo, cuando envié 3 bytes, noté que solo recibí el primer byte y las siguientes llamadas para HAL_UART_Reciba el resultado en un tiempo de espera.

Esto parece lógico, porque probablemente solo hay un búfer de 1 byte en el UART.

Sin embargo, lo que no entiendo, ¿por qué transmitir varios bytes en el código mencionado, devuelve HAL_OK y también la llamada a HAL_UART_GetError devuelve 0.

Supongo que se ha producido un rebasamiento para el segundo y consecutivo bytes ... ¿es cierto? Si es así, ¿cómo puedo verificarlo?

    
pregunta Michel Keijzers

2 respuestas

1

Puede configurar una interrupción para detectar errores de saturación. En realidad, una gran cantidad de interrupciones están disponibles para detectar errores. Desde manual de referencia :

Soloparaestarsegurodequepodríausarel"Registro de datos de transmisión vacío" uno como lo ha sugerido Tony.

Por lo que sé, los controladores HAL IRQ y las llamadas IRQ para UART utilizan todas estas interrupciones de forma predeterminada. Las versiones _IT de las llamadas de UART habilitan todas estas interrupciones.

    
respondido por el Bence Kaulics
1

Su solución puede terminar duplicando productos existentes.

enlace

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas