CSerialport用于多串口烧录MCU时丢失数据的分析与解决办法

本文探讨了使用CSerialport在多串口通信中遇到的数据丢失问题,尤其是通过USB转串口的PL2303芯片。经过测试,问题可能出在驱动响应上。为了解决这个问题,对CSerialport类的WriteChar()函数进行了改进,增加WriteFile()后的等待时间,允许用户根据串口质量调整。此外,还提到了在9针串口的DTR和RTS流控中,CH340芯片转换的低电平不达标导致MCU自动BOOT功能调试困难。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近在做用于GD32MCU 多串口烧录的一个项目。目标芯片就是GD32MCU,当然肯定也兼容STM32F1系列的所有芯片。
        整体的连接情况如下:主机(PC端):多串口烧录上位机软件,从机(GD32MCU,进入system boot),连接线采用USB转串口线。
因为对于MCU的量产烧录,很多厂家都有需求,并且量产脱机烧录或者在线编程器好像都很贵,具体价格没有了解过。所以目前来看,这个多串口软件还是能够解决很多人对于量产烧录的需求的。
        但是第一个版本release出去之后,反馈回来了一个消息就是,这个软件不好用,不好用的表现在于“挑线”,即对于有些USB转串口线,软件工作没问题,对于有些线,感觉会丢失数据,具体表现就是下载进度条卡住不走了。
        目前我接触到的比较多的USB转串口芯片是PL2303和CH340这两款,但是好像PL2303这个仿冒的比较多。。。这些暂时就不详细说了。所以我的第一判断是这个软件并不是“挑线”,而是挑转换芯片。这个问题又分成两类,一个是芯片中的固件处理有问题,另一个是PC端的驱动有问题。
之前我也怀疑是CSerialport这个类有问题,在网上查了很久,大体分为两种说法:1.对EV_RXCHAR这个事件的监测有问题,会漏掉。2.向串口写数据有问题,出现了本次的写入数据把上一次的数据覆盖。上了accessport这个串口监测软件后,发现数据没丢,也没漏写,只是有些命令的ACK收到以后,就不会再发下一条命令了,或者发了下一条正确指令没有ACK返回来。所以,我就开始怀疑串口转换芯片的固件和驱动有问题。

        今天先写到这,明天接着写。。。。。。


--------------------------------分割线------------------------分割线------------------------分割线------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值