lixianda0527
发表于 2025-7-7 10:29:14
神农鼎 发表于 2025-7-7 10:21
设置10位===?STC8H8K64U, STC8H4K64TL, DMA 不支奇偶校验,只能8位数据位,无奇偶校验
要 DMA支持 奇偶校 ...
不是,我意思是DMA的接收缓存,DMA_UR1R_AMT = 9;这个
lixianda0527
发表于 2025-7-7 10:31:59
神农鼎 发表于 2025-7-7 10:21
设置10位===?STC8H8K64U, STC8H4K64TL, DMA 不支奇偶校验,只能8位数据位,无奇偶校验
要 DMA支持 奇偶校 ...
你看我发我数据,只要是数据个数对,就没问题,只要是漏发了一个数,后面再发对的接收也不对了
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
11 22 33 44 55 66 77 88 99 01
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
11 22 33 44 55 66 77 88 99 01
# SEND HEX>
11 22 33 44 55 66 77 88 99
# SEND HEX>
11 22 33 44 55 66 77 88 99
# RECV HEX>
11 22 33 44 55 66 77 88 99 11
# SEND HEX>
11 22 33 44 55 66 77 88 99
# RECV HEX>
22 33 44 55 66 77 88 99 11 22
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
33 44 55 66 77 88 99 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
# SEND HEX>
11 22 33 44 55 66 77 88 99 01
# RECV HEX>
44 55 66 77 88 99 01 11 22 33
乘风飞扬
发表于 2025-7-7 10:56:30
lixianda0527 发表于 2025-7-7 10:20
程序这样也不行
要用软件超时来处理数据,建议先用例子测试,功能验证正常后再进行修改或者移植。
C_wolf
发表于 2025-7-7 12:22:25
对于简单的程序,我一般是
设置个接收状态标志位和定时计数
接收到数据就置位标志位,并清零计数
计数超时,表示接收完成,清标志位
这个需要结合你的需求,看看适不适合
lixianda0527
发表于 2025-7-7 12:29:48
乘风飞扬 发表于 2025-7-7 10:56
要用软件超时来处理数据,建议先用例子测试,功能验证正常后再进行修改或者移植。 ...
就是意思是有超时处理,但是超时复位不了DMA,功能都正常,就是超时时间到了,DMA复位不了,然后还是一直等待,就是问问怎么样复位DMA的,也重新配置了,不行。
lixianda0527
发表于 2025-7-7 12:31:23
C_wolf 发表于 2025-7-7 12:22
对于简单的程序,我一般是
设置个接收状态标志位和定时计数
接收到数据就置位标志位,并清零计数
现在的问题是定时时间到,DMA复位不了,还是一直等待
C_wolf
发表于 2025-7-7 12:45:37
lixianda0527 发表于 2025-7-7 12:31
现在的问题是定时时间到,DMA复位不了,还是一直等待
我是用的普通串口通讯,所以说要看你的需求。
不过你这数据量也不大啊,需要DMA?
DMA有个寄存器DMA_URxR_DONE是不是可以修改,不知道能不能满足你的要求
这个串口DMA功能没有具体用过,只是猜测
lixianda0527
发表于 2025-7-7 13:19:27
C_wolf 发表于 2025-7-7 12:45
我是用的普通串口通讯,所以说要看你的需求。
不过你这数据量也不大啊,需要DMA?
这个也试了,协议短,但是频率高,无时无刻不在发送,115200的,只是我拿9600试的
C_wolf
发表于 2025-7-7 14:00:59
lixianda0527 发表于 2025-7-7 13:19
这个也试了,协议短,但是频率高,无时无刻不在发送,115200的,只是我拿9600试的 ...
可以的话,你把你的相关程序做的工程文件,体现出问题点,让其他高手帮你分析一下吧
乘风飞扬
发表于 2025-7-7 14:08:47
lixianda0527 发表于 2025-7-7 12:29
就是意思是有超时处理,但是超时复位不了DMA,功能都正常,就是超时时间到了,DMA复位不了,然后还是一直 ...
"先用例子测试,功能验证正常后再进行修改或者移植",这是最佳的捷径。
之所以这么建议,是因为从你9楼提供的代码截图里面,我依然没看到你使用超时标志进行判断。
例子里面的超时标志是"RX1_TimeOut",连续5ms没收到新的数据,判定一串数据接收完毕
。你好好研究一下例子这个机制是怎么实现的。