经常看到有人在问用DMA接收不定长包的问题,由于STM32DMA的特殊性,使其对接收不定长的数据不太方便,很多人都在为此伤脑筋,也有不少牛人想了不少的办法,例如用协议或开定时器判别等,其实这些方法都过于复杂。下面是我用的方法: 其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之 接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。 |
回复:用串口DMA传输不定长度包的方式!
RE:用串口DMA传输不定长度包的方式!
RE:用串口DMA传输不定长度包的方式!
数据包 = 包头 + 包内容 + 包内容CRC,
包头 = 包标志 + 包内容长度
有CRC校验这样可以保证包头和包内容都是准备的,包头里记录包的长度,从而可以知道准确定位到包的真实内容
RE:用串口DMA传输不定长度包的方式!
个人认为还是设定计时器较方便,较准确些。
回复:用串口DMA传输不定长度包的方式!
你这样自己搞搞还行,假如MCU外接一模块,人家已经定义好协议,直接发送不定长的数据过来,你这个怎么处理?