问题描述 : 我使用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); } } } |
设全局变量,例如Debug_FLAG,
在你觉得可能出错的地方给Debug_FLAG赋值,
打开Keil的DEBUG,在Watch窗口添加变量Debug_FLAG,
然后看卡死的时候Debug_FLAG的值是多少,最后反过来查。
我是这样子查错的
Cbue Hal下 是用HAL_UART_GetState(UART_HandleTypeDef *huart);这函数调吗?程序卡死 在什么地方调? 是在卡死的地方调吗?
评分
查看全部评分
你是指DMA 接收BUFFER溢出吗?
一般会有什么协议,我这个就是双向要求发送的比较快, 一般10ms定时互发
是通过调试串口看 还是怎么看