问题描述 : 我使用UART2和UART3 ,两边同时接收数据, UART2_RX数据-->UART3_TX发出去, UART3_RX数据-->UART2_TX发出去,串口发送均使 用DMA,串口接收使用空闲中断接收!
注意 : 单向收发均没问题(UART2_RX-->UART3_TX,UART3_RX-->UART2_TX),如果两边用串口工具两边同时间隔10ms发数据,就会卡 死,丢字节;
主函数代码:
int main(void)
{
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Ini
tialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_USART3_UART_Init();
__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
while (1)
{
if(Uart2_Config.Receive_Flag) //空闲中断标志
{
Uart2_Config.Receive_Flag=0; //清除空闲中断标志
HAL_UART_Transmit_DMA(&huart3, Uart2_Config.RxDMABuffer, Uart2_Config.RX_Length);
}
if(Uart3_Config.Receive_Flag) //空闲中断标志
{
Uart3_Config.Receive_Flag=0; //清除空闲中断标志
HAL_UART_Transmit_DMA(&huart2, Uart3_Config.RxDMABuffer, Uart3_Config.RX_Length);
}
}
}
本帖最后由 tianyukobe 于 2016-10-14 23:09 编辑
程序会卡在这while(Uart2_Config.DmaSend_Flag == USART_DMA_SENDING); 也就是回调函数不是百分百的能清除标志,我以为10ms双向发太快了,改成20ms,效果会好一点 但是还是会卡死
一周热门 更多>