STM32F407ZG发送大量数据的问题

2019-07-20 04:56发布

小弟初学stm32f407的LwIP移植,现在我有一个项目是OV2640采集图像数据然后通过LAN8720,TCP协议发送到上位机,407是client,pc是server。
ov2640需要输出400*300的图像,目前设置为RGB565格式,图像一次性存储到外扩RAM,通过FSMC映射到407的0x6C000000区域。
图像大小是400*300*2=240k.
我目前设定传输帧率是1fps.我的分包策略是1行数据打一个包,大小就是400*2=800byte,然后在dcmi的帧中断中设标志位置位,在main函数的while循环中检测标志位置位后用for循环发送,循环次数是列数量,即300次。就是1s内通过tcp发送300个800byte的包。
现在通过winshark抓包显示只能发送前几个包,后面的包全部丢失。串口调试发现tcp_write返回MEM_ERR.
然后我修改几个参数发现无论怎么改都会丢包,改的太大编译出错,提示内存不足。
发送部分的代码如下:

    p_tx = pbuf_alloc(PBUF_TRANSPORT, IMG_SIZE_X * 2, PBUF_RAM);
            for (i = 0; i < IMG_SIZE_Y; i++)
            {        
                pbuf_take(p_tx, (uint8_t*)(Bank1_SRAM4_ADDR + i * IMG_SIZE_X * 2), IMG_SIZE_X * 2);
                ret_err = tcp_write(echoclient_pcb, p_tx ->payload, p_tx->len, 1);
                printf("ERR:\%d ", ret_err);
                ret_err = tcp_output(echoclient_pcb);
                printf("ERR:\%d ", ret_err);
            }        
            pbuf_free(p_tx);

我改的几个参数主要是



小弟是初学lwip,想知道stm32f407通过lwip到底能不能发送大数据包,如果能这几个参数怎么调,如果不能是否将ov2640输出改成jpeg可以,请各位大神赐教,谢谢!
另外我把图像尺寸改为64*32的小尺寸,就可以实现不丢包发送了。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。