用串口DMA传输不定长度包的方式!
经常看到有人在问用DMA接收不定长包的问题,由于STM32DMA的特殊性,使其对接收不定长的数据不太方便,很多人都在为此伤脑筋,也有不少牛人想了不少的办法,例如用协议或开定时器判别等,其实这些方法都过于复杂。下面是我用的方法:其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之 接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。
回复:用串口DMA传输不定长度包的方式!
你这样必须先接受一个包A然后一个包B么?这两个包怎么区分,万一中间错了,还要。。。。。东西都是越整越复杂,最后就是一套协议了RE:用串口DMA传输不定长度包的方式!
如果包A出错,后面将可能全错了RE:用串口DMA传输不定长度包的方式!
如果想实现可靠传输, 可以这么做,数据包 = 包头 + 包内容 + 包内容CRC,
包头 = 包标志 + 包内容长度
有CRC校验这样可以保证包头和包内容都是准备的,包头里记录包的长度,从而可以知道准确定位到包的真实内容
RE:用串口DMA传输不定长度包的方式!
我不认为这是一种很好的方式,像我们一般采用的后台通讯协议都是MODBUS,这样的话怎样书写包A和包B。个人认为还是设定计时器较方便,较准确些。
回复:用串口DMA传输不定长度包的方式!
这个太欠缺考虑了,想象力太差你这样自己搞搞还行,假如MCU外接一模块,人家已经定义好协议,直接发送不定长的数据过来,你这个怎么处理?
这个问题,这么难解决?
页:
[1]