Dongray 发表于 2024-1-25 15:46:00

串口空闲中断和DMA接收惯导的数据问题

用串口空闲中断和DMA接收惯导的数据,固定59个字节,但是DMA收到的会超过59个字节,导致下一次的数据前面的数据和上一次数据在一起,下一次数据就错位了怎么回事呢?比如正常情况一帧是帧头5A,5A,数据,和校验,但是我收到一帧的是5A,5A,数据,和校验,5A, 5A,数据

Dongray 发表于 2024-1-25 15:48:03

惯导发送波特率为230400bps,更新率200Hz,是不是发送太快了导致空闲中断异常呢

庄永 发表于 2024-1-25 22:33:32

Dongray 发表于 2024-1-25 15:48
惯导发送波特率为230400bps,更新率200Hz,是不是发送太快了导致空闲中断异常呢

中断里面都做了什么?

eric2013 发表于 2024-1-26 08:56:55

看楼主的描述,是空闲中断没有正常触发吧,才导致连续接收了两帧

regbbs 发表于 2024-1-26 09:15:05

固定长度的话,直接用DMA完成中断就好, 加上定时器/串口空闲中断防止接收到不完整的数据。

cryfcr 发表于 2024-1-26 09:41:43

应该是数据连包了,试试将空闲中断换成超时中断?

Dongray 发表于 2024-1-26 11:09:40

庄永 发表于 2024-1-25 22:33
中断里面都做了什么?

中断停止DMA传输,计算接收长度,将标志位置1

Dongray 发表于 2024-1-26 11:10:42

cryfcr 发表于 2024-1-26 09:41
应该是数据连包了,试试将空闲中断换成超时中断?

DMA接收没有时间的要求,超时中断的时间应该从什么地方决定呢

Dongray 发表于 2024-1-26 11:12:34

eric2013 发表于 2024-1-26 08:56
看楼主的描述,是空闲中断没有正常触发吧,才导致连续接收了两帧

嗯,会不会是发送的波特率太高导致的呢

庄永 发表于 2024-1-26 11:55:18

Dongray 发表于 2024-1-26 11:09
中断停止DMA传输,计算接收长度,将标志位置1

有没有可能是空闲中断被挂起没有被及时处理,导致数据连包了

Dongray 发表于 2024-1-26 16:34:12

庄永 发表于 2024-1-26 11:55
有没有可能是空闲中断被挂起没有被及时处理,导致数据连包了

我试试先把数据处理了在接收下一次数据

Dongray 发表于 2024-1-26 16:35:09

Dongray 发表于 2024-1-26 11:12
嗯,会不会是发送的波特率太高导致的呢

有可能,我另外一个设备波特率是115200就没有这个问题

wenjian1 发表于 2024-1-26 17:14:13

这点数据量和更新频率不至于导致空闲中断接收失败,每帧240字节,200HZ,接收,波特率921600我都试过没问题。发送端是不是DMA发送的

Dongray 发表于 2024-1-27 09:18:55

wenjian1 发表于 2024-1-26 17:14
这点数据量和更新频率不至于导致空闲中断接收失败,每帧240字节,200HZ,接收,波特率921600我都试过没问题 ...

发送端是惯性导航设备,没有说是什么方式给我发送的

Edmund1964 发表于 2024-1-27 11:01:20

敢情你的代码是不需要折包的,包就是根据空闲来拆的?
这样做在很多实际应用都会出问题的。

tdh03z 发表于 2024-1-27 12:42:58

哈,别太怀疑惯导设备发送数据的时间间隔,用空闲+DMA接收陀螺2000Hz数据,没有问题
页: [1]
查看完整版本: 串口空闲中断和DMA接收惯导的数据问题