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

STM32F103的USB的虚拟串口,串口助手数据接收

[复制链接]
Smile666 提问时间:2026-7-5 11:14 / 未解决

程序中采用每隔5秒执行一次函数USB_TxWrite(usb_tx, usb_tlen);线路的USB插在电脑上,电脑上采用串口助手接收数据,关闭串口助手一段后再打开串口助手发现以前没接收的数据会重新在串口助手上立即接收,然后又间隔5秒接收数据,请问怎么避免串口助手关闭又打开后原来没接收的数据不会再接收?

谢谢!

收藏 评论5 发布时间:2026-7-5 11:14

举报

5个回答
Smile666 回答时间:3 天前

/***

  • Function Name : uint32_t USB_TxWrite(uint8_t *buffter, uint32_t writeLen)
  • Description : 写数据到USB发送缓存中
  • Input :
  • Output :
  • Other :
  • Date : 2014.11.28 ***/ uint32_t USB_TxWrite(uint8_t *buffter, uint32_t writeLen) { return QUEUE_PacketIn(&m_QueueUsbComTx, buffter, writeLen); }
fafa1 回答时间:前天 10:12

deepseek解答:

要解决这个问题,核心思路是在串口助手(作为USB主机)重新打开串口时,主动清空STM32内部USB CDC的发送缓冲区

核心解决方案:检测“串口打开”事件并清空缓冲区

最有效的方法是,在STM32的USB CDC驱动代码中,捕获主机(你的电脑)重新建立连接的事件,并在此处执行缓冲区的清空操作。

  1. 找到关键事件触发点

在STM32的USB库中,“串口助手打开串口”这个动作,通常会触发USB主机向设备发送一个 CDC_SET_LINE_CODINGCDC_GET_LINE_CODING 的标准请求。你可以利用这个事件作为“清空缓冲区”的信号。

通常,这个处理逻辑位于 usbd_cdc.cusbd_cdc_if.c 文件中的 CDC_Control_FS 函数里。

  1. 在事件处理函数中清空缓冲区

你需要修改 CDC_Control_FS 函数,在 CDC_SET_LINE_CODINGCDC_GET_LINE_CODING 分支中添加清空发送缓冲区的代码。

Smile666 回答时间:前天 10:13

fafa1 发表于 2026-7-6 10:12
deepseek解答:</p>
<p>

[md]好的 谢谢您的解答

butterflyspring 回答时间:前天 10:48
如果从上位机角度看,打开串口助手后能清除一下缓存也可以实现你的想法。


当然,这个需要使用的串口助手软件支持才行。


Smile666 回答时间:昨天 09:13

butterflyspring 发表于 2026-7-6 10:48
如果从上位机角度看,打开串口助手后能清除一下缓存也可以实现你的想法。</p>
<p>

您好!怎么知道串口助手已经打开?

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