找回密码
 立即注册
查看: 285|回复: 10

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

[复制链接]
  • TA的每日心情
    郁闷
    2023-12-15 11:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    2

    回帖

    22

    积分

    新手上路

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

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 08:47
  • 签到天数: 131 天

    [LV.7]常住居民III

    20

    主题

    1033

    回帖

    2435

    积分

    金牌会员

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

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 08:47
  • 签到天数: 131 天

    [LV.7]常住居民III

    20

    主题

    1033

    回帖

    2435

    积分

    金牌会员

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

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 06:15
  • 签到天数: 151 天

    [LV.7]常住居民III

    25

    主题

    697

    回帖

    1729

    积分

    金牌会员

    积分
    1729
    发表于 2024-1-16 21:29:03 | 显示全部楼层
    你这种直接就中断了,还要啥DMA啊
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 06:15
  • 签到天数: 151 天

    [LV.7]常住居民III

    25

    主题

    697

    回帖

    1729

    积分

    金牌会员

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 13:55
  • 签到天数: 85 天

    [LV.6]常住居民II

    2

    主题

    51

    回帖

    308

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情
    郁闷
    2023-12-15 11:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    2

    回帖

    22

    积分

    新手上路

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

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

    点评

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

    使用道具 举报

    该用户从未签到

    45

    主题

    2914

    回帖

    6550

    积分

    超级版主

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

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 06:15
  • 签到天数: 151 天

    [LV.7]常住居民III

    25

    主题

    697

    回帖

    1729

    积分

    金牌会员

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-28 03:30 , Processed in 0.068072 second(s), 64 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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