Question
F103C8 USART DMA Issue
Hi,
I'm having the following issue with the F103C8 USART DMA.
After reset, sometimes the USART DMA Receive doesn't work. It doesn't happen every time, but it happens about once every 10 resets.
HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)RxDataUsart1, 128);
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, (uint8_t *)RxDataUsart2, 128);
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart == &huart1)
{
timer_UART1_Datalost = millis();
uart_1_Ready = SET;
__HAL_UART_CLEAR_FEFLAG(&huart1);
memcpy(copyRxDataUsart1, RxDataUsart1, 128);
copyRxDataUsart1[127] = '\0';
usart1Datareceived = 1;
for (int i=Size; i < 128; i++)RxDataUsart1[i]=0;
}
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)RxDataUsart1, 128);
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
if(huart == &huart2)
{
uart_2_Ready = SET;
__HAL_UART_CLEAR_FEFLAG(&huart2);
memcpy(copyRxDataUsart2, RxDataUsart2, 128);
copyRxDataUsart2[127] = '\0';
usart2Datareceived = 1;
for (int k=Size; k < 128; k++)RxDataUsart2[k]=0;
}
__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, (uint8_t *)RxDataUsart2, 128);
__HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
}
