UART DMA error - What is the proper way to restart the DMA?
Hi,
I am injecting a UART DMA error by using DTCM memory and DMA2. For example:
// Induce a DMA error by using DTCM RAM for DMA2 which is inaccessible
if ( HAL_UART_Transmit_DMA( huart, transmit_buffer_dtcm_memory, num_bytes_to_transmit ) != HAL_OK )
{
// Log error
}
What happens is the frame error, parity error, and noise error interrupts are disabled after the DMA error on transmit. This I can see by the EIE bit in CR3. HAL function UART_EndRxTransfer is called and clears EIE.
I have a streams connected to the TX and RX lines:
TX is connected to DMA2 Stream 5 - High priorty
RX is connected to DMA2 Stream 4 - High priority
When I try to restart the UART receiving:
if ( HAL_UART_Receive_DMA( uart_handle, receive_buffer, RX_BUF_SIZE ) != HAL_OK )
{
// Log error
}
There is a check in sub function HAL_DMA_Start_IT that returns an error because the DMA stream is busy.
So what is the correct way to recover/restart after a DMA and set the interrupt flags for frame, noise, and parity?\
Thanks!
