123156fsadf 发表于 2023-8-11 10:31 或许这时走在【爆仓】的边界内侧,短时间内不一定能发现。或许偶尔会发产一次。 不过你已知道大致的通讯频率边界,多留一点富裕量,安全一点。 因为,使用环境的不同,温度,电磁场,线路的阻抗……会有所不同,包括通讯对象的内部时间基准误差,都会产生脉冲信号的边沿误差(上下边沿决定上限频率)。 |
可能是转换器的问题 USB转232通信方式不一样 数据可能是打包一下过去的 你用不同方案的转换器通信效果有差别 我就碰到过CH340转485的线和我做的ModbusRTU模块通信就问题多 用别的就好了 单片机一样的程序 |
本来就不应该以空闲中断来判断帧的结束,这在很多应用都会出问题的。 |
yzwzfyz 发表于 2023-8-11 10:18 有点奇怪,图1的器件进行通信就没有问题,用图2的线才会出现这个问题。两个都是usb转232芯片 |
USB与323通讯速率不同,中间必有一个差速器【中转站】,站内也必有一个【仓】,流通慢时,【仓】够用,看不出问题;流通快时,速差的积累就体现出来了,会满【仓】。 楼主:您的猜想我赞同。 不过【仓】未必是64字节,但至少不低于64。只不过,发生挤【仓】时,它保证出【仓】的64个是正确的,因挤【仓】发生丢失的部分不再续发,或报警。 只要是通讯的双方存在速率差异,用缓冲【仓】进行通讯【同步】的通讯,就总存在一个【仓】量,以及挤【仓】的时机。 |
Hephaestus 发表于 2023-8-10 23:07 不是STM32缓存长度的问题,我同样的程序,用DMA接收不定长的数据,115200波特率可正常接收超过64字节的数据,用460800,只能接收到64字节就触发空闲中断了。我怀疑是这个232芯片内部缓存只有64字节,发完64字节后要等待一会才会发后面的内容。导致接收到的数据不完整。我用图2所示的线就会出现这个问题,用图1所示的器件就没这个问题。问题只可能出现在那根线上,后面我又买了一根其他店的usb转232线,也有这个问题 |
STM32一侧的缓存长度是你自己定义的,问大家干什么? |