1.目前板子的硬件 stm32h7+8266
2.软件部分的是freertos 串口通信使用的是串口空闲中断+dma。
3.目前的情况:板子原来是以太网口,现在想加上wifi功能所以加了个wifi的串口模块,8266做服务器,然后把客户端的数据通过串口转发给h7处理,h7处理后再通过串口发送给8266,8266再发送给客户端。
现在是一个客户端通信的情况下数据正常,如果两个客户端通信,h7同时发送两个客户端消息给8266就会出现数据丢失的情况,丢失数据的尾巴。
4.我用调试看 dma发送会进入busy的状态,下面是我发送的代码:
[C] 纯文本查看 复制代码 void WIFI_USART_Send_Data(u8 *buf,u16 len)
{
// while(HAL_UART_Transmit_DMA(&WIFI_USART_Handler,buf,len) == HAL_BUSY);//试过一直在这里等待busy也不行
if(HAL_UART_Transmit_DMA(&WIFI_USART_Handler,buf,len) == HAL_BUSY)//串口2发送数据
{
HAL_UART_DMAStop(&WIFI_USART_Handler);
HAL_UART_Receive_DMA(&WIFI_USART_Handler,WIFIRxFIFO.buf[WIFIRxFIFO.index],WIFI_FIFO_BUF_LEN);
HAL_UART_Transmit_DMA(&WIFI_USART_Handler,buf,len);
}
while(__HAL_UART_GET_FLAG(&WIFI_USART_Handler,UART_FLAG_TC) != SET);
}
5.接收的部分是空闲中断触发后把接收数据的指针索引写入队列,然后切换指针的索引,然后在任务处理一直等待队列的消息。
6.怀疑过是波特率过高的问题,后面把波特率降到9600也有这个现象出现,测试过在115200的通信下收和发【10ms、45个字节】没有数据丢失,但是这个测试的情况下没有出现过进入busy的状态。
|