STM32 2个串口互发数据卡死,丢字节!
问题描述 : 我使用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();
/* Initialize 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);
}
}
}
这样做的意义何在.. 根本不需要这样做,设计不好冲突 我估计楼主的用意是用于通讯中反馈对方发送的数据包,但是一般的做法是通过通讯协议来解决的呀 帮顶 楼主看一下串口是否发生了溢出,如果是需要进行初始化。 安 发表于 2016-10-14 08:56
楼主看一下串口是否发生了溢出,如果是需要进行初始化。
你是指DMA 接收BUFFER溢出吗? 奏奏奏 发表于 2016-10-14 08:21
我估计楼主的用意是用于通讯中反馈对方发送的数据包,但是一般的做法是通过通讯协议来解决的呀 ...
一般会有什么协议,我这个就是双向要求发送的比较快, 一般10ms定时互发 看的是串口溢出寄存器。 安 发表于 2016-10-14 09:17
看的是串口溢出寄存器。
是通过调试串口看还是怎么看
页:
[1]
2