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

DMA的串口通信疑问

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-01 10:39:15
已绑定手机

40

主题

371

回帖

839

积分

高级会员

积分
839
发表于 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位)  ?为什么会不一样?有讲究吗?

本帖被以下淘专辑推荐:

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

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

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

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

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

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-01 10:39:15
已绑定手机

40

主题

371

回帖

839

积分

高级会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-01 10:39:15
已绑定手机

40

主题

371

回帖

839

积分

高级会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-01 10:39:15
已绑定手机

40

主题

371

回帖

839

积分

高级会员

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

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

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

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

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

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2025-05-01 10:39:15
已绑定手机

40

主题

371

回帖

839

积分

高级会员

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 23:54 , Processed in 0.146498 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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