STM32上面有个串口空闲中断,中断名称为IDLE,在这种机制下只要总线出现超过一个字节的空闲则可以认为数据已经收完,此外可以加上串口DMA
可以参考https://blog.csdn.net/shu_8708/article/details/73480939
如果接收和发送端都是自己可控的,可以约定一个符号表示字符串发完了。
串口通讯,一般都会约定好协议。
比如固定字符串长度
或者数据头为数据包长度数据
或者像ModBus那种以间隔时间作为帧结束
1、使用唤醒缓冲区
2、增大缓冲区
3、控制结束符,增加单片机处理间隔
开一个动态栈
还有一个方法做多个交叉缓冲,然后不断用其他线程分期取,这样可以连续下来很长时间