ch32v30x 串口接收重同步机制有 BUG, 不稳定。 高波特率下特别严重。 主机为 stm32h7, 都是两个停止位, 两边都是DMA发送与接收。 当波特率在200K以下时, 基本无错误。 当波特率到达1M以上时, 隔几百ms就会出现 ch32v30x接收不到数据。 ch32v30x系列的串口接收不是很稳定, 准备更换MCU了。
串口通信中,一个重要的参数是停止位,它代表了数据包的终止信号。常见的停止位数值有1位、1.5位和2位。在串行数据传输过程中,由于各个设备可能拥有独立的时钟,这可能导致通信过程中出现微小的时钟不一致。因此,停止位的功能并不仅仅是简单地指示传输的结束,它还为设备间提供了一个校正时钟同步的机会。
停止位的长度选择直接影响了系统的同步精度和数据传输速度。通常,停止位越多,设备对时钟同步误差的容限就越大,但这也意味着数据传输的速率会相应降低。例如,一个完整的停止位(通常是2位)会提供更高的同步可靠性,但会牺牲一部分传输效率。因此,根据实际需求和系统性能,选择适当的停止位长度是非常关键的。
什么时候可以提供芯片的 errata, 一直遮着掩着,? 别跟大伙说 你的MCU一点bug都没有。
目前已经测试,波特率在115200且正常通讯的情况下,? 在ch32v30x 或者 ch32v20x的芯片的接收脚RX上耦合一个50ns的脉冲, gd32v系列接收的数据就会有错误, 115200的每一位大约9us左右, 理论上 50ns脉冲不应该被115200检测到, 实际上ch32v系列的串口接收 就会有错误。
本次测试一直处于1M以上的波特率进行, 且以DMA方式接收(最高优先级)。实际发现在通讯正常10来秒后, 就会出现DMA接收 丢失数据。然后又正常工作几秒, 接着又丢数据。还没有特别的规律,如果CPU密集访问内存,情况更严重。同样的程序我写到GD32F470系列中测试, 可以正常工作,没有丢数据。本次测试均在没有任何干扰的实验室环境下进行。
查看芯片手册,? 发现CH32V30X 系列的DMA与总线的接法很古怪,与STM32和 GD32都有很大的不同。目前的情况时CPU密集访问SRAM, CH32 的DMA丢串口数据很严重。如果CPU不是密集地访问SRAM, CH32V的DMA也丢串口的数据, 但好一些。现在也不知到到底时 DMA的问题,? 还是 串口的问题。厂家还是好好测试一下 DMA与 串口吧。特别是高波特率下的表现吧
您好,CH32V30x系列的串口波特率最大可以支持到9M,1M以上应该不会有问题的。此外,主机和从机都可以换成我们的芯片试一下。或可以邮箱(lzs@wch.cn)说一下你对串口的要求配置,这边提供一个串口通过DMA收发的例程给你参考一下。后续若有问题,可以邮箱沟通。
我发现在Linux下使用LinkE的串口到CH32V203,在115200bps下丢数据也严重。换CH340就一切正常了。
现在对CH32Vxxx系列没有信心了, 可能用ch32vxxx做主机还好一些, 用ch32vxxx做从机绝对让你 吃不了兜着走。 可是大部分应用 都是从机。 目前测试了GD32F425系列的串口, 比 ch32vxxx的串口稳定多了。 本来没准备用 ch32v系列的, 只是因为 ch32v2xxx很便宜, 所以试了一下。 一开始测试没有那么密集, 还没有发现问题。 后来测试的多了,发现ch32v真的不行。 也采用了ch32v307做了以太网转串口的主机, 这两个芯片总共也 用了 500-1000个之间了, 平时用用还行, 真要是高波特率 通讯, ch32v 系列就有问题, 丢包还是小事。 DMA与 串口的配合 还出问题。 厂家再不出 errata, 以后再也不用 ch32xxx系列了。
好像是有问题, 我之前在GD32E230 上跑千万个包都不出错的FreeModbus代码,在CH32V230上出现有错包的情况,有收不全以及Checksum 出错两种情况,还在研究原因中
您好,程序中做好数据的处理正常应该不会出现丢数据的情况的,程序中注意设置合适的缓冲区大小,设置合适中断优先级,确保数据能够及时处理,此外可以通过流控控制高波特率下的数据收发。硬件上也可以提高晶振精度试一下。后续若有问题可具体通过邮箱(lzs@wch.cn)和我沟通。