你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103的USB的虚拟串口,串口助手打开的时候会收到两条数据,第一条数据是前5秒串口助手未打开时发送的,这怎么解决?

[复制链接]
Smile666 提问时间:2026-7-7 09:32 / 未解决

STM32F103的的USB例子采用的是官方库文件,其中每隔5秒忘USB发送一次数据,数据长度9个字节,

目前问题如下:

测试虚拟串口发送助手采用的串口助手,当串口助手关闭1分钟再打开,串口助手会收到两条数据,第一条就是上一5秒的数据,发送数据前做了缓存区清空操作,为什么会有两条数据同时发出?

串口助手正常打开则收数据是正常

QUEUE_PacketCreate(&m_QueueUsbComTx, m_UsbComTxBuf, sizeof(m_UsbComTxBuf));

此函数是每次发送前都调用,相当于清空缓冲区

函数USB_TxWrite为往发送缓存区填充数据,具体函数操作如下:

uint32_t USB_TxWrite(uint8_t *buffter, uint32_t writeLen) { return QUEUE_PacketIn(&m_QueueUsbComTx, buffter, writeLen); }

函数USB_TxBuff();为启动USB发送,具体函数如下:

void USB_TxBuff(void){ uint8_t len=1;

// USB_TxBufflen(); while(len){ len = USB_TxRead(txBuffter, sizeof(txBuffter));

// EP1_IN_flg++; if (len > 0) { // printf("\r\nUSB_TxRead len=%u",len); UserToPMABufferCopy(txBuffter, ENDP1_TXADDR, len); SetEPTxCount(ENDP1, len); SetEPTxValid(ENDP1); FrameCount = 0; } else { len=0; txFlg = 0; } } }

函数USB_TxRead为从缓存区取数据,经串口调试数据每次是9个,和每次发送的一致,为什么串口助手打开会接收两条数据?

谢谢!

收藏 评论1 发布时间:2026-7-7 09:32

举报

1个回答
xmshao 回答时间:7 小时前

在 STM32 设备端的 USB CDC 类请求处理代码中,会接收并处理主机发来的 SET_CONTROL_LINE_STATE 请求。

根据该请求中的 DTR 状态,可以判断 PC 端串口助手当前是打开还是关闭。

当 DTR=1 时,可认为串口助手已打开;当 DTR=0 时,可认为串口助手已关闭,此时设备端就不应继续发送数据。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版