找回密码
 立即注册
楼主: lixianda0527

请问DMA串口传输了不正确的长度,然后如何复位从头接收?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-07-08 09:40:05
已绑定手机

4

主题

10

回帖

56

积分

注册会员

积分
56
发表于 前天 10:29 | 显示全部楼层
神*** 发表于 2025-7-7 10:21
设置10位===?STC8H8K64U, STC8H4K64TL, DMA 不支奇偶校验,只能8位数据位,无奇偶校验

要 DMA支持 奇偶校 ...

不是,我意思是DMA的接收缓存,DMA_UR1R_AMT = 9;这个
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-07-08 09:40:05
已绑定手机

4

主题

10

回帖

56

积分

注册会员

积分
56
发表于 前天 10:31 | 显示全部楼层
神*** 发表于 2025-7-7 10:21
设置10位===?STC8H8K64U, STC8H4K64TL, DMA 不支奇偶校验,只能8位数据位,无奇偶校验

要 DMA支持 奇偶校 ...

你看我发我数据,只要是数据个数对,就没问题,只要是漏发了一个数,后面再发对的接收也不对了 截图202507071031559536.jpg



[2025-07-07 10:12:01.465]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:01.545]# RECV HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:01.653]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:01.721]# RECV HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:05.983]# SEND HEX>
11 22 33 44 55 66 77 88 99

[2025-07-07 10:12:06.968]# SEND HEX>
11 22 33 44 55 66 77 88 99

[2025-07-07 10:12:07.038]# RECV HEX>
11 22 33 44 55 66 77 88 99 11

[2025-07-07 10:12:08.127]# SEND HEX>
11 22 33 44 55 66 77 88 99

[2025-07-07 10:12:08.193]# RECV HEX>
22 33 44 55 66 77 88 99 11 22

[2025-07-07 10:12:12.868]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:12.937]# RECV HEX>
33 44 55 66 77 88 99 11 22 33

[2025-07-07 10:12:14.684]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:14.748]# RECV HEX>
44 55 66 77 88 99 01 11 22 33

[2025-07-07 10:12:15.364]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:15.437]# RECV HEX>
44 55 66 77 88 99 01 11 22 33

[2025-07-07 10:12:16.050]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:16.110]# RECV HEX>
44 55 66 77 88 99 01 11 22 33

[2025-07-07 10:12:16.251]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:16.319]# RECV HEX>
44 55 66 77 88 99 01 11 22 33

[2025-07-07 10:12:16.430]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:16.495]# RECV HEX>
44 55 66 77 88 99 01 11 22 33

[2025-07-07 10:12:16.622]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:16.688]# RECV HEX>
44 55 66 77 88 99 01 11 22 33

[2025-07-07 10:12:16.802]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:16.864]# RECV HEX>
44 55 66 77 88 99 01 11 22 33

[2025-07-07 10:12:16.982]# SEND HEX>
11 22 33 44 55 66 77 88 99 01

[2025-07-07 10:12:17.057]# RECV HEX>
44 55 66 77 88 99 01 11 22 33


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-07-08 09:25:47
已绑定手机

40

主题

2103

回帖

7249

积分

论坛元老

积分
7249
发表于 前天 10:56 | 显示全部楼层

要用软件超时来处理数据,建议先用例子测试,功能验证正常后再进行修改或者移植。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:259
  • 最近打卡:2025-07-09 00:16:19
已绑定手机

9

主题

128

回帖

1357

积分

金牌会员

积分
1357
发表于 前天 12:22 | 显示全部楼层
对于简单的程序,我一般是
设置个接收状态标志位和定时计数
接收到数据就置位标志位,并清零计数
计数超时,表示接收完成,清标志位
这个需要结合你的需求,看看适不适合
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-07-08 09:40:05
已绑定手机

4

主题

10

回帖

56

积分

注册会员

积分
56
发表于 前天 12:29 | 显示全部楼层
乘风*** 发表于 2025-7-7 10:56
要用软件超时来处理数据,建议先用例子测试,功能验证正常后再进行修改或者移植。 ...

就是意思是有超时处理,但是超时复位不了DMA,功能都正常,就是超时时间到了,DMA复位不了,然后还是一直等待,就是问问怎么样复位DMA的,也重新配置了,不行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-07-08 09:40:05
已绑定手机

4

主题

10

回帖

56

积分

注册会员

积分
56
发表于 前天 12:31 | 显示全部楼层
C_w*** 发表于 2025-7-7 12:22
对于简单的程序,我一般是
设置个接收状态标志位和定时计数
接收到数据就置位标志位,并清零计数

现在的问题是定时时间到,DMA复位不了,还是一直等待
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:259
  • 最近打卡:2025-07-09 00:16:19
已绑定手机

9

主题

128

回帖

1357

积分

金牌会员

积分
1357
发表于 前天 12:45 | 显示全部楼层
lixian*** 发表于 2025-7-7 12:31
现在的问题是定时时间到,DMA复位不了,还是一直等待

我是用的普通串口通讯,所以说要看你的需求。

不过你这数据量也不大啊,需要DMA?

DMA有个寄存器DMA_URxR_DONE是不是可以修改,不知道能不能满足你的要求


这个串口DMA功能没有具体用过,只是猜测
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-07-08 09:40:05
已绑定手机

4

主题

10

回帖

56

积分

注册会员

积分
56
发表于 前天 13:19 | 显示全部楼层
C_w*** 发表于 2025-7-7 12:45
我是用的普通串口通讯,所以说要看你的需求。

不过你这数据量也不大啊,需要DMA?

这个也试了,协议短,但是频率高,无时无刻不在发送,115200的,只是我拿9600试的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:259
  • 最近打卡:2025-07-09 00:16:19
已绑定手机

9

主题

128

回帖

1357

积分

金牌会员

积分
1357
发表于 前天 14:00 | 显示全部楼层
lixian*** 发表于 2025-7-7 13:19
这个也试了,协议短,但是频率高,无时无刻不在发送,115200的,只是我拿9600试的 ...

可以的话,你把你的相关程序做的工程文件,体现出问题点,让其他高手帮你分析一下吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-07-08 09:25:47
已绑定手机

40

主题

2103

回帖

7249

积分

论坛元老

积分
7249
发表于 前天 14:08 | 显示全部楼层
lixian*** 发表于 2025-7-7 12:29
就是意思是有超时处理,但是超时复位不了DMA,功能都正常,就是超时时间到了,DMA复位不了,然后还是一直 ...

"先用例子测试,功能验证正常后再进行修改或者移植",这是最佳的捷径。
之所以这么建议,是因为从你9楼提供的代码截图里面,我依然没看到你使用超时标志进行判断。
例子里面的超时标志是"RX1_TimeOut",连续5ms没收到新的数据,判定一串数据接收完毕
。你好好研究一下例子这个机制是怎么实现的。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-9 22:36 , Processed in 0.122084 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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