硬汉嵌入式论坛

 找回密码
 立即注册
查看: 469|回复: 15
收起左侧

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

[复制链接]

2

主题

9

回帖

15

积分

新手上路

积分
15
发表于 2024-1-25 15:46:00 | 显示全部楼层 |阅读模式
用串口空闲中断和DMA接收惯导的数据,固定59个字节,但是DMA收到的会超过59个字节,导致下一次的数据前面的数据和上一次数据在一起,下一次数据就错位了怎么回事呢?比如正常情况一帧是帧头5A,5A,数据,和校验,但是我收到一帧的是5A,5A,数据,和校验,5A, 5A,数据
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2024-1-25 15:48:03 | 显示全部楼层
惯导发送波特率为230400bps,更新率200Hz,是不是发送太快了导致空闲中断异常呢
回复

使用道具 举报

75

主题

683

回帖

908

积分

金牌会员

积分
908
发表于 2024-1-25 22:33:32 | 显示全部楼层
Dongray 发表于 2024-1-25 15:48
惯导发送波特率为230400bps,更新率200Hz,是不是发送太快了导致空闲中断异常呢

中断里面都做了什么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2024-1-26 08:56:55 | 显示全部楼层
看楼主的描述,是空闲中断没有正常触发吧,才导致连续接收了两帧
回复

使用道具 举报

0

主题

214

回帖

214

积分

高级会员

积分
214
发表于 2024-1-26 09:15:05 | 显示全部楼层
固定长度的话,直接用DMA完成中断就好, 加上定时器/串口空闲中断防止接收到不完整的数据。
回复

使用道具 举报

1

主题

28

回帖

31

积分

新手上路

积分
31
发表于 2024-1-26 09:41:43 | 显示全部楼层
应该是数据连包了,试试将空闲中断换成超时中断?
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2024-1-26 11:09:40 | 显示全部楼层
庄永 发表于 2024-1-25 22:33
中断里面都做了什么?

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

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2024-1-26 11:10:42 | 显示全部楼层
cryfcr 发表于 2024-1-26 09:41
应该是数据连包了,试试将空闲中断换成超时中断?

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

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2024-1-26 11:12:34 | 显示全部楼层
eric2013 发表于 2024-1-26 08:56
看楼主的描述,是空闲中断没有正常触发吧,才导致连续接收了两帧

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

使用道具 举报

75

主题

683

回帖

908

积分

金牌会员

积分
908
发表于 2024-1-26 11:55:18 | 显示全部楼层
Dongray 发表于 2024-1-26 11:09
中断停止DMA传输,计算接收长度,将标志位置1

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

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2024-1-26 16:34:12 | 显示全部楼层
庄永 发表于 2024-1-26 11:55
有没有可能是空闲中断被挂起没有被及时处理,导致数据连包了

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

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2024-1-26 16:35:09 | 显示全部楼层
Dongray 发表于 2024-1-26 11:12
嗯,会不会是发送的波特率太高导致的呢

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

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2024-1-26 17:14:13 | 显示全部楼层
这点数据量和更新频率不至于导致空闲中断接收失败,每帧240字节,200HZ,接收,波特率921600我都试过没问题。发送端是不是DMA发送的
回复

使用道具 举报

2

主题

9

回帖

15

积分

新手上路

积分
15
 楼主| 发表于 2024-1-27 09:18:55 | 显示全部楼层
wenjian1 发表于 2024-1-26 17:14
这点数据量和更新频率不至于导致空闲中断接收失败,每帧240字节,200HZ,接收,波特率921600我都试过没问题 ...

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

使用道具 举报

0

主题

124

回帖

124

积分

初级会员

积分
124
发表于 2024-1-27 11:01:20 | 显示全部楼层
敢情你的代码是不需要折包的,包就是根据空闲来拆的?
这样做在很多实际应用都会出问题的。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2024-1-27 12:42:58 来自手机 | 显示全部楼层
哈,别太怀疑惯导设备发送数据的时间间隔,用空闲+DMA接收陀螺2000Hz数据,没有问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 01:19 , Processed in 0.204781 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表