找回密码
 立即注册
查看: 1264|回复: 20

DMA可以从串口逐个拿数据吗

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-15 11:51:59

2

主题

2

回帖

22

积分

新手上路

积分
22
发表于 2024-1-16 18:17:03 | 显示全部楼层 |阅读模式
上位机发送了256个字节数据,使用DMA去串口拿一个字节数据,然后解析完成后再去拿第二个字节,直到这一帧数据拿完,也就是边解析边获取数据,可以这样操作吗
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-1-16 19:41:19 | 显示全部楼层
反正DMA就是把串口数据寄存器中的值搬到你的RAM缓冲区中,,至于你怎么判断接收到了1个字节,和处理就是你的事情了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-1-16 19:41:37 | 显示全部楼层
要不简单一点儿 串口接收中断?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-1-16 21:29:03 | 显示全部楼层
你这种直接就中断了,还要啥DMA啊

点评

正解  发表于 2024-1-19 12:22
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-1-16 21:34:15 | 显示全部楼层
串口数据一般要校验后才使用吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:431
  • 最近打卡:2025-05-01 08:15:51

8

主题

75

回帖

211

积分

中级会员

积分
211
发表于 2024-1-17 21:36:06 | 显示全部楼层
DMA搬到内存中,然后程序从内存中搬数据分析。内存可以用程序分块,用DMA放不同区域的内存。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-15 11:51:59

2

主题

2

回帖

22

积分

新手上路

积分
22
发表于 2024-1-19 11:06:46 | 显示全部楼层
jw*** 发表于 2024-1-16 21:29
你这种直接就中断了,还要啥DMA啊

之前用的就是串口中断,然后用队列去中断拿数据最后发现上位机发送了256字节数据,中断执行了256次,但是入队只入了253次,有时候也可以执行256次但是不稳定,掉数据了,找不到原因,所以想换个方法去弄

点评

这总情况应该是串口中断被更高级的中断阻塞了,来不及读取. 几个办法解决: 调高串口中断优先级, 降低波特率, 精简其它中断的代码  发表于 2024-1-30 20:17
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-1-19 12:09:34 | 显示全部楼层
原则上可以,实际上多余,直接串口接收中断不就可以了?
你用DMA接收又要每收到一个字节就处理,则要查询DMA接收字节数,耗时间,远不如直接串口接收中断处理省时方便。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-1-19 13:54:50 | 显示全部楼层
Greatx*** 发表于 2024-1-19 11:06
之前用的就是串口中断,然后用队列去中断拿数据最后发现上位机发送了256字节数据,中断执行了256次,但是 ...

中断不稳定是不是波特率太高或者通讯线不好?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-03-06 16:16:33

3

主题

5

回帖

53

积分

注册会员

积分
53
发表于 2024-6-17 15:40:48 | 显示全部楼层
划一块内存(内存使用循环队列)用于保存接收到的数据,接收的同时边处理,接收优先级大于处理优先级就可以了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:24 , Processed in 0.149346 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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