通常我们使用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都是低电平持续几个毫秒即可。
|