串口接收大数据包的问题

学习stm32有1年多之久了,但是串口接收数据虽然接触的很多了,但是最近突然遇到串口中断要接收好几百KB乃至几兆的数据,却一时半会想不想出设计方案来。还是学的不透彻,明天好好研究总结一下!

串口总结
串口如何接收大数据经过几天的搜索和查证现总结一下。举例来说单片机内存只有512KB,而我们要接收一包1M的图片数据并送至液晶屏LCD显示。很显然单片机的内存不足1M如果接收完在处理,肯定会使单片机崩溃,如果我们开辟一个512字节大小的Buffer,用串口中断接收数据,可以循环使用Buffer200多次才能将一包接收过来。这个时候,我们可以spiflash将每一包buffer数据写到Flash,等1M数据接收完后再从FLASH里读出来处理数据。但这种方案要求Flash容量必须足够大,如果串口接收的数据不是一种的话发的很频繁的话,也容易很快将Flash报废,他的读写次数只有10完次对同一页的读写时,并且还要考虑到速度和价钱问题。
另一种方式就是不使用外部Flash直接对数据进行处理,这种方式我们经理告诉我叫做透传(需要查证)。就是接收完一个buffer512个字节后,产生一个标志位置1,表示一包接收完,这个时候我们开启另一个定时器中断定时查询标志位,如果标志位为1,我们将数据提取出来,送至LCD显示,当然这里有个细节要求,需要LCD发送数据足够快,数据送完后,串口中断才会接收,也就是处理数据的速度要比串口接收数据的速度快,我们也可以适当调低串口波特率,降低速度,如果是9600,算法如下一包数据有起始位,结束位,数据位共10个,9600/10=960,也就是一秒接收960个字节,1MS接收0.96个字节,也就是说1Ms多一点就一个字节,而处理的速度要在1MS内完成才不会被中断打断。

sitemap