Cómo saber que UART DMA TX ha finalizado para el proceso de habilitación RS485 en STM32F4 CubeMX

0

Estoy utilizando MCU de la serie STM32F4 con el entorno STM32CubeMX. Puedo enviar y recibir datos sin problemas en la capa física RS232.

Mi problema es que cuando uso con él en la capa física RS-485, debo saber cuándo finaliza el proceso de transmisión, el último bit se envía desde el registro de desplazamiento y estoy listo para finalizar la función de transmisión y habilitar la función de recepción de RS- 485 fichas.

¿Cuál es la convención de bandera de UART_Busy_Flag o bandera relacionada con este proceso.

    
pregunta dredg

1 respuesta

3

Deberías usar la siguiente función:

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

y asegúrese de que las interrupciones de UART y DMA estén habilitadas.

Si observa la implementación, (solo una parte de ella):

/* Set the UART DMA transfer complete callback */
huart->hdmatx->XferCpltCallback = UART_DMATransmitCplt;

/* Set the UART DMA Half transfer complete callback */
huart->hdmatx->XferHalfCpltCallback = UART_DMATxHalfCplt;

/* Set the DMA error callback */
huart->hdmatx->XferErrorCallback = UART_DMAError;

/* Enable the UART transmit DMA Stream */
tmp = (uint32_t*)&pData;
HAL_DMA_Start_IT(huart->hdmatx, *(uint32_t*)tmp, (uint32_t)&huart->Instance->DR, Size);

El DMA se iniciará en el modo IT, y hay tres% de devoluciones de llamada que se llamarán mediante las funciones de devolución de llamada anteriores.

  1. Transferencia de devolución de llamada completa: HAL_UART
  2. La mitad de los bytes se envían: HAL_UART_TxCpltCallback
  3. error: HAL_UART_TxHalfCpltCallback

Todos estos tienen una declaración débil, por lo que debe implementarlos. Por ejemplo:

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)  // change USART instance
    {
       // Transmit complete handle RS-485 related stuff
    }
}
    
respondido por el Bence Kaulics

Lea otras preguntas en las etiquetas