打印
[STM32F1]

STM32使用USB虚拟串口

[复制链接]
86|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
louliana|  楼主 | 2025-1-29 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通常我们使用STM32进行串口通信会选择其硬件串口,但在某些情况下串口会不够用,这个时候就可以选择USB的虚拟串口,这样可以增加一个串口。
USB是非常复杂的一个设备,要想完全搞懂它需要花费不少时间和精力。但去使用它却相对简单。这里我们使用STM32CubeMX构建一个初始工程,然后实现将我们从电脑发下来的东西原封不动地发回电脑,使用的芯片是STM32F103zet6。
USB需要配置两个地方,一个是Connectivity下勾选USB,在Mode下勾选Device,下面的参数保持默认即可。其他芯片类型的选项可能不同,选择有Device字样的就OK。


驱动安装好后,接下来看看如何实现数据的收发。
在usb_device.c文件下实现了USB设备的初始化,只需要调用它就完成了所有的USB初始化工作。


这里可以看到接收用了static关键字,说明它只能在本文件中使用,不可以外部调用。发送我们可以直接调用。这里先介绍发送吧。
发送
如果是发送原始数据,可以直接将数据打包成数组,然后调用函数发送即可。但通常我们用串口打log,所以这里可以构造一个printf函数。


使用虚拟串口波特率不起作用,任何波特率都可以用。
在main中我们还发现有一个USB_Status_Init()函数,这个函数用来复位USB口。如果没有这个函数,每次下载完程序后需要重新插拔usb线电脑才能识别到,有了它就可以不用拔插线了。
原理也很简单,就是让USB的两个Pin都是低电平持续几个毫秒即可。

使用特权

评论回复
沙发
星辰大海不退缩| | 2025-1-30 10:32 | 只看该作者
USB是非常复杂的一个设备,要想完全搞懂它需要花费不少时间和精力。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

1351

帖子

1

粉丝