飞捷 发表于 2023-12-18 10:34:10

cofmilk 发表于 2023-12-18 08:54
你要看那个不定长接收的例程,,然后怎么设置DMA接收字节数 你要看手册里的介绍 ...

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

飞捷 发表于 2023-12-18 11:36:31

发现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位)?为什么会不一样?有讲究吗?

乘风飞扬 发表于 2023-12-18 16:21:15

飞捷 发表于 2023-12-18 11:36
发现DMA串口通信,超时中断的例程只有STC8H有,而STC32G没有?
然后STC8H例程里面传输总字节寄存器    DMA_ ...

STC32G12K128与STC8H没有硬件串口超时功能,例程都是通过软件实现超时判断。
STC32G8K系列与STC32F系列有硬件串口超时功能,可以通过硬件超时功能接收不定长数据。
另外STC32系列有串口硬件奇偶校验功能,可以设置9位模式使能硬件自动生成奇偶校验位。
STC8H可以使用16位方式读写寄存器,STC32系列不行,所以STC32系列头文件没有定义16位寄存器。

飞捷 发表于 2023-12-18 17:53:47

乘风飞扬 发表于 2023-12-18 16:21
STC32G12K128与STC8H没有硬件串口超时功能,例程都是通过软件实现超时判断。
STC32G8K系列与STC32F系列有 ...

STC32G8K系列与STC32F系列有硬件串口超时功能,可以通过硬件超时功能接收不定长数据。
请问有没有这方面的资料,多久没收到数据才算是超时?是否可以设置超时时间?

另外STC32系列有串口硬件奇偶校验功能,可以设置9位模式使能硬件自动生成奇偶校验位。
那发送和接收如何确定是奇校验还是偶校验? 如我想奇校验,单位机如何知道我想用奇校验,没有寄存器可以设置的?


乘风飞扬 发表于 2023-12-18 18:08:19

飞捷 发表于 2023-12-18 17:53
STC32G8K系列与STC32F系列有硬件串口超时功能,可以通过硬件超时功能接收不定长数据。
请问有没有这方面 ...

STC32系列规格书串口章节有介绍,以下是串口超时设置寄存器:





以下是串口奇偶校验位设置寄存器:


飞捷 发表于 2023-12-18 21:58:09

乘风飞扬 发表于 2023-12-18 18:08
STC32系列规格书串口章节有介绍,以下是串口超时设置寄存器:




我们平时用的STC8H的串口是异步通信吧?然后这个模式好像是同步通信?这个超时接收还和奇偶校验好像也是在同步模式下才有用吧?   然后我主要是与外围的设置异步通信的,所以实现不了?

飞捷 发表于 2023-12-18 21:59:22

飞捷 发表于 2023-12-18 21:58
我们平时用的STC8H的串口是异步通信吧?然后这个模式好像是同步通信?这个超时接收还和奇偶校验好像也是 ...

我们平时用的STC8H的串口是异步通信吧?然后这个模式好像是同步通信?这个超时接收还和奇偶校验好像也是 ...

飞捷 发表于 2023-12-19 10:41:30

飞捷 发表于 2023-12-18 17:53
STC32G8K系列与STC32F系列有硬件串口超时功能,可以通过硬件超时功能接收不定长数据。
请问有没有这方面 ...

我在想,这个超时模式是否可以利用 DMA_UR2R_DONE 已传输的字节数,如果大于0,并传输数字不变的情况超过多少ms ,就判定超时,然后禁用接收使能。 然后当禁用接收使能后,这个DMA_UR2R_DONE会不会就直接被清零了?还是使能的后才清零?

_奶咖君_ 发表于 2023-12-19 19:26:34

飞捷 发表于 2023-12-19 10:41
我在想,这个超时模式是否可以利用 DMA_UR2R_DONE 已传输的字节数,如果大于0,并传输数字不变的情况超过 ...

woc老哥这想法有点意思啊,,,我这里测试的时候没有你想的那么细,,,我这里测试的是 关闭DMA再打开DMA之后就清零了,,,还有一个问题,,这个寄存器在接收了256个字节的时候也是0 请注意

飞捷 发表于 2023-12-19 22:16:52

cofmilk 发表于 2023-12-19 19:26
woc老哥这想法有点意思啊,,,我这里测试的时候没有你想的那么细,,,我这里测试的是 关闭DMA再打开DMA之后就 ...

我的方案大多是基于modbus rtu协议,对于串口可以通过DMA发送,这样响应提高好多,现在总是移值不成功,所以产生很多想法。
页: 1 [2] 3 4 5
查看完整版本: DMA的串口通信疑问