诸位大佬,我想通过DMA实现RS485接收-发送数据,但是遇到了点问题,问题描述如下。
目标:上位机发送10个数,触发接收DMA中断(我用的是UART_IT_IDLE中断),接收中断里用DMA把定义好的18个数发送出去。
实现:
中断使能:
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //使能IDLE中断
__HAL_UART_ENABLE_IT(&huart1, UART_IT_TC);//使能发送完成中断
打开接收中断:
HAL_UART_Receive_DMA(&huart1,RxData,RX_DMA_LEN);
接收中断服务函数:
void DMA2_Channel7_IRQHandler(void)
{
HAL_DMA_IRQHandler(&hdma_usart1_rx);
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UART_GetState(&huart1);
__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_TXE);
HAL_UART_Transmit_DMA(&huart1,TxData,TX_DMA_LEN);//发送数据
HAL_UART_Receive_DMA(&huart1,RxData,RX_DMA_LEN);
}
发送中断服务函数:
void DMA2_Channel6_IRQHandler(void)
{
HAL_DMA_IRQHandler(&hdma_usart1_tx);
huart1.gState = HAL_UART_STATE_READY;
}
结果: |