STM32的USB虚拟串口介绍

通常我们使用stm32进行串口通信会选择其硬件串口,但在某些情况下串口会不够用,这个时候就可以选择usb的虚拟串口,这样可以增加一个串口。
usb是非常复杂的一个设备,要想完全搞懂它需要花费不少时间和精力。但去使用它却相对简单。这里我们使用stm32cubemx构建一个初始工程,然后实现将我们从电脑发下来的东西原封不动地发回电脑,使用的芯片是stm32f103zet6。
usb需要配置两个地方,一个是connectivity下勾选usb,在mode下勾选device,下面的参数保持默认即可。其他芯片类型的选项可能不同,选择有device字样的就ok。
第二在middleware下选择usb_device,在右边的下拉菜单选择communication device class(virtual port com),下面的参数设置可以保持默认,除非你了解各个参数是干什么的,否则不建议修改。这些参数涉及到了usb的设备描述符、字符串描述符、缓存等等。
其他配置包括时钟、工程路径、工具链、驱动设置等等就不罗嗦了,配置好后点击生成代码,我使用gcc编译。
usb虚拟串口涉及的文件有下面三类:
底层
中间层
应用层
实际使用的时候只需要关心应用层即可。
在编译下载之前,我们需要在电脑安装stm32提供的虚拟串口驱动,这在他们的官网可以下载到。
驱动安装好后,接下来看看如何实现数据的收发。
在usb_device.c文件下实现了usb设备的初始化,只需要调用它就完成了所有的usb初始化工作。
通过在main中调用这个函数,电脑就已经可以将芯片的usb识别为一个串口了。进一步详细内容就不展开了,以后会专门发文介绍usb。
上面的vid和pid可以在文件usbd_desc.c中找到,设备描述符就在这个文件中。
ok,现在虚拟串口正确识别了,下面就是数据的收发了。
数据收发的接口在usbd_cdc_if.c文件下。
这里可以看到接收用了static关键字,说明它只能在本文件中使用,不可以外部调用。发送我们可以直接调用。这里先介绍发送吧。
发送
如果是发送原始数据,可以直接将数据打包成数组,然后调用函数发送即可。但通常我们用串口打log,所以这里可以构造一个printf函数。
这样使用usb虚拟串口打印东西就非常方便了。这里要注意buff要够大,否则会出现发送乱码或不全的问题。
接收
usb虚拟串口的接收采用了中断方式,芯片接收到数据后中断回调函数会调用cdc_receive_fs()函数接收数据,然后将数据放到接收缓存中。但是软件没有提供直接获得数据和个数的接口。所以我采取了一种简单暴力的方式来获取数据和数据个数。
收到数据后,数据的缓存指针通过参数buf传进来,数据个数通过参数len传进来。上面三个extern的变量在main文件中定义,get_data_flag标志是否收到数据,buf存放数据,data_nums存放数据个数。由于usb虚拟串口一次最多接收64字节,如果收到的数据多于64字节,会连续调用多次接收函数,上图中的方法理论上可以任意接收不超过buf大小个字节。
在main.c中的情况如下所示:
运行效果如下图所示:
使用虚拟串口波特率不起作用,任何波特率都可以用。
在main中我们还发现有一个usb_status_init()函数,这个函数用来复位usb口。如果没有这个函数,每次下载完程序后需要重新插拔usb线电脑才能识别到,有了它就可以不用拔插线了。
原理也很简单,就是让usb的两个pin都是低电平持续几个毫秒即可。
ok,关于stm32的usb虚拟串口就介绍到这里了,很多细节我也不甚了解,希望看到本文的小伙伴能指正补充。

数字驱动 智造未来--2021中国工业互联网大会暨粤港澳大湾区数字经济大会即将启幕
SAP系统如何进行数据拆分?什么情况下需要做SAP系统拆分?
关于无线透传模块在温度传感器中的应用介绍
超3G无线通信技术领域的芯片设计发展趋势
不可或缺的触控技术,成为家居智能化的关键
STM32的USB虚拟串口介绍
使用L298的双向电机控制器电路
频率探头电路原理图
三星GalaxyS8惊艳窄边高屏占比美不胜收
光伏电站测试设备有哪些类型的设备
2020年Gartner AI技术成熟度曲线中两大主导趋势
麒麟710处理器采用三星10nm LPP工艺制程,晶圆代工业务多数已经移交给三星半导体
如何使用摄像头构建蓝牙控制的汽车,以及如何将Android手机用作摄像头
又一家锂电材料IPO获受理,募资11.97亿,拟用于电子铜箔项目
大众为应对特斯拉的竞争 准备推出低于2万欧元的电动汽车
网络机顶盒哪个好?圈内大神双十一详评网络机顶盒排行榜
1207F-0100-360加速度计的特点应用
PM2.5扬尘监测仪新时代的环境检测装备
华擎推出X299E-ITX/ac主板 4个DDR4内存插槽 双网口设计
科胜讯携手AnyDATA推出针对3G网络消费设备和安全应用的