找回密码
 立即注册
查看: 1561|回复: 50

DMA的串口通信疑问

[复制链接]
  • TA的每日心情
    开心
    前天 23:22
  • 签到天数: 146 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    627

    积分

    高级会员

    积分
    627
    发表于 2023-12-16 17:27:45 | 显示全部楼层 |阅读模式
    本帖最后由 飞捷 于 2023-12-18 11:36 编辑

    DMA的串口通信过程中,如果DMA在接收数据,因为是modbus 协议,我无法知道上位机会发送多少个数据过来,一般我们都是设置可接收256个数据,但是上位机只发送了14数据,也可能30个数据,我是通过检测接收数据的数量在10MS内没变化,就说明接收完成,这时我就取这些数据去处理,但是距离接收完256个字节还远远不到,这时个疑问:
    1.假如已经接收了30个数据,如果下次上位机再次发送,是否会从数组的第31个数据继续存进去?
    2.怎么样才能每次接收都 是从第一个数据存起?
    3.如果接收不到256个数据,DMA会不会继续等?
    4.看了DMA的视频课程,里面有说到FIFO,这个指针能否由程序员自已设定?

    以前是用普通的串口通信,现在改为DMA模式,发现新增的问题,就是9位数据传输过程 ,如何发送第9位数据 ,需要奇 偶校验这些?

    发现DMA串口通信,超时中断的例程只有STC8H有,而STC32G没有?
    然后STC8H例程里面传输总字节寄存器    DMA_UR2T_AMT(8位) 而STC32G 是分高低字节 DMA_UR2T_AMTL 和DMA_UR2T_AMTH   加起来是16位,是不是STC32G最大可支持65536个字节传输?
    STC8H  头文件是  DMA_UR2T_TXA(代表16位)然后  DMA_UR2T_TXAL和DMA_UR2T_TXAH也分别定义了,可供用户自已选择。但是STC32G只有定义 DMA_UR2T_TXAL和DMA_UR2T_TXAH,没有定义DMA_UR2T_TXA(代表16位)  ?为什么会不一样?有讲究吗?

    本帖被以下淘专辑推荐:

    纸上得到终觉浅,绝知此事要躬行。
    回复 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    20

    主题

    1060

    回帖

    2521

    积分

    金牌会员

    积分
    2521
    发表于 2023-12-16 18:48:28 | 显示全部楼层
    一个思路是开启串口接收中断,在接收中断中使用定时器做超时处理。如果是串口有超时中断的片子,就直接中串口超时中断来分包就行,
    在定时器中断中读取一下接收的字节数然后再开启DMA接收。。这样就做了一个DMA串口的不定长接收。。当然简单的用一次接收的长度最大不能超过256。
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    20

    主题

    1060

    回帖

    2521

    积分

    金牌会员

    积分
    2521
    发表于 2023-12-16 18:49:33 | 显示全部楼层
    具体的可以在软件资源里面找STC8H64U这个单片机试验箱的参考历程
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    20

    主题

    1060

    回帖

    2521

    积分

    金牌会员

    积分
    2521
    发表于 2023-12-16 18:51:05 | 显示全部楼层
    看了那个历程基本就可以解决 1. 2. 3. 的问题
    4.还是等大佬来解答吧
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 23:22
  • 签到天数: 146 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    627

    积分

    高级会员

    积分
    627
     楼主| 发表于 2023-12-17 22:29:41 | 显示全部楼层
    cofmilk 发表于 2023-12-16 18:48
    一个思路是开启串口接收中断,在接收中断中使用定时器做超时处理。如果是串口有超时中断的片子,就直接中串 ...

    再开启是指再使能,还是? 因为我设置了256个字节,都还没有接收完毕中啊?
    纸上得到终觉浅,绝知此事要躬行。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 23:22
  • 签到天数: 146 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    627

    积分

    高级会员

    积分
    627
     楼主| 发表于 2023-12-17 22:31:43 | 显示全部楼层
    cofmilk 发表于 2023-12-16 18:51
    看了那个历程基本就可以解决 1. 2. 3. 的问题
    4.还是等大佬来解答吧

    我就是看了例程 引发的疑问,因为例程直接设置了接收256个字节,然后就DMA中断了。所以产生了前三个问题,最后问题4是看了视频,大佬在讨论这个FIFO引出来的思考
    纸上得到终觉浅,绝知此事要躬行。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 23:22
  • 签到天数: 146 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    627

    积分

    高级会员

    积分
    627
     楼主| 发表于 2023-12-18 08:22:15 | 显示全部楼层
    cofmilk 发表于 2023-12-16 18:49
    具体的可以在软件资源里面找STC8H64U这个单片机试验箱的参考历程

    例程只介绍设置接收256个字节就发生中断,并没有介绍设置256,然后假如只收20个数据,之后如何重新再返回从头开始存数据。
    纸上得到终觉浅,绝知此事要躬行。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    20

    主题

    1060

    回帖

    2521

    积分

    金牌会员

    积分
    2521
    发表于 2023-12-18 08:53:37 | 显示全部楼层
    飞捷 发表于 2023-12-17 22:29
    再开启是指再使能,还是? 因为我设置了256个字节,都还没有接收完毕中啊?
    ...

    要注意的是 判断是否接收完毕的不是DMA中断,,而是定时器中断。
    在开启指的是再配置一遍DMA
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 139 天

    [LV.7]常住居民III

    20

    主题

    1060

    回帖

    2521

    积分

    金牌会员

    积分
    2521
    发表于 2023-12-18 08:54:52 | 显示全部楼层
    飞捷 发表于 2023-12-18 08:22
    例程只介绍设置接收256个字节就发生中断,并没有介绍设置256,然后假如只收20个数据,之后如何重新再返回 ...

    你要看那个不定长接收的例程,,然后怎么设置DMA接收字节数 你要看手册里的介绍
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 23:22
  • 签到天数: 146 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    627

    积分

    高级会员

    积分
    627
     楼主| 发表于 2023-12-18 10:30:25 | 显示全部楼层
    cofmilk 发表于 2023-12-18 08:53
    要注意的是 判断是否接收完毕的不是DMA中断,,而是定时器中断。
    在开启指的是再配置一遍DMA ...

    看到了,通过定时器5毫秒,关闭接收使能,再开启使能。
    纸上得到终觉浅,绝知此事要躬行。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-10 17:00 , Processed in 0.070437 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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