stm32如何从串口缓存区提取部分所需内容

有一个需求:stm32是通过4g模组下载bin文件来升级自己本身,我使用的是串口中断接收数据,每次获取1k的数据,目前接收每k数据正常,但是他这个模组有一个特性是每K数据的开头会有固定的数据例如connet 1024然后中间是1k的数据内容,结尾有一个ok表示接收完成
因为是要烧录bin文件到flash,所以每次得剔除掉开头和结尾固定的那几个字符,我目前的水平解决的方式是for循环依次把需要的数据复制到另一个缓存区B,程序写法是

for (int j = 16;j < 1040;j++) //串口接收缓存区剔除开头connect\r\n 1024和结尾\r\nOK,重新保存到另一个缓存
            {

                //printf("断点:%d\r\n", j);
                filebuff[j - 16] = EC20rev[j];
                HAL_Delay(10);
            }

为啥是16开始,因为这样可以避免开头的connect\r\n 1024 连空格算上,从第16个开始是有用的数据内容,一直循环1024次才能获取到需要的数据
这个操作目前是可以解决问题,但是耗时太久,因为每获取1K的文件都要如此,我测试过好几次,下载大概25k左右的bin文件需要10分钟左右。
所以请教各位老 师,如何快速且有效的提取中间部分内容?
在此万分感谢

接收中断里面判断读到connect 1024后再继续读取1024字节放到buffer里,这样buffer里就只有有效数据了。
或者把buffer里数据写到flash时,用2层for循环,第二层for循环每1040字节一组,写的时候从第16个字节开始写1024字节。
这两个都可以节省转存的时间,如果非要转存的话可以用DMA,个人认为没必要的。

建两个缓存数组,接收数据存放到A缓存时 在主循环中解析B缓存,A满了之后切换为B缓存,在存放至B的过程中解析A缓存,一直这样交替可以达到最快速度。那个hal_delay不要。