main代码:while (1) { /* First transmit data, then start DMA receive */
if (loop_TX < 0xFF) {
loop_TX++;
HAL_UART_Transmit(&huart2, &loop_TX, 1, 100);
HAL_Delay(100);
/* Start DMA receive with IDLE detection */
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, &loop_RX, 1);
/* Wait for DMA transfer to complete */
HAL_Delay(100);
/* Flush cache to ensure DMA data is visible to CPU */
SCB_InvalidateDCache_by_Addr(&loop_RX, sizeof(loop_RX));
printf("[MAIN] TX: %02X, RX: %02X\r\n", loop_TX, loop_RX);
}
}
void GPDMA1_Channel0_IRQHandler(void)
{
/* USER CODE BEGIN GPDMA1_Channel0_IRQn 0 */
printf("[GPDMA1_Channel0] DMA done, CNDTR=%u, CSAR=0x%08lX, CDAR=0x%08lX, CTR1=0x%08lX\r\n",
__HAL_DMA_GET_COUNTER(&handle_GPDMA1_Channel0),
handle_GPDMA1_Channel0.Instance->CSAR,
handle_GPDMA1_Channel0.Instance->CDAR,
handle_GPDMA1_Channel0.Instance->CTR1);
/* USER CODE END GPDMA1_Channel0_IRQn 0 */
HAL_DMA_IRQHandler(&handle_GPDMA1_Channel0);
/* USER CODE BEGIN GPDMA1_Channel0_IRQn 1 */
/* USER CODE END GPDMA1_Channel0_IRQn 1 */
}
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE)) {