极客秀
搜索

还不快放弃串口通信!投怀于USB吧 ୧⍢⃝୨

点击蓝字 关注我们

实在太懒于是不想取名

1

前言

上一期我们介绍到了什么是虚拟串口?虚拟串口的本质是利用USB协议让PC为USB设备开启一个虚拟端口。那么我们也可以利用单片机中板载USB实现这个功能,本期我们就介绍利用STM32最小系统板实现虚拟串口的功能。

2

硬件资源

一块有着16Pin及以上的STM32最小系统板。USB的D+,D-接到单片机中。

当我们将单片机通过有效的数据线接入PC之后,PC会识别到USB,但是无法识别USB设备,这是因为我们还没有编写USB驱动,系统并不认识这是一个什么设备。

3

CubeMX初始化

在CubeMX中找到USB接口,由于STM32F103C8T6较为简单,它的USB仅有常规的FS即USB1.1/2.0,通讯速度为12Mbps。

接着我们在拓展包中快速配置USB设备,定义我们的 USB设备类 。常见的 USB设备类 有:

CDC(通信设备类,Communication Device Class)
,该类允许STM32作为虚拟串口(VCP)与PC进行串行通信。也就是本期我们要使用的类。

HID(人机接口设备类,Human Interface Device):
HID类用于创建人机接口设备,如键盘、鼠标、游戏控制器等。STM32可以通过HID类实现与PC的交互, 模拟键盘按键、鼠标移动 等。

MSC(大容量存储类,Mass Storage Class)
:该类使STM32能够作为USB存储设备,与PC交换数据。常用于实现U盘或外部存储设备功能。

Audio(音频类) :音频类用于音频设备的数据传输,适用于USB麦克风、音频接口、扬声器等设备。

设备描述符中可以修改我们的USB设备名字。

4

USB与电脑传输

配置完USB工程之后,我们可以看到工程中多出了关于USB的配置文件。

usb_device.c 文件是 USB 设备的核心文件,负责 USB 设备的初始化、状态管理和操作。这些操作包括 USB
设备的启动、停止、连接状态管理等。

usbd_desc.c 文件主要负责 USB 描述符 的定义和传输。USB 描述符是 USB
协议中用于描述设备特性的数据结构,包括设备描述符、配置描述符、接口描述符、端点描述符等。

usbd_cdc_if.c 文件用于 实现 USB 通信设备类 (CDC) 的接口。CDC(Communication Device
Class)是用来在 USB 设备和主机之间实现虚拟串口通信的协议。

我们的发送函数和接收函数就主要是在usbd_cdc_if.c 文件中。

CDC_Transmit_FS(Buf, *Len);//需要包含#include "usbd_cdc_if.h"文件

我们可以调用这个函数来向USB发送数据。并且在 usbd_cdc_if.c文件中有对应的接收中断回调函数。


  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */    CDC_Transmit_FS("Hello",6);    HAL_Delay(500);    HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);  }

我们在主函数中调用发送函数,下载到最小系统板之后,连接上电脑。

可以看到,设备管理器中正常的识别到了这个USB设备,并且为其开启了虚拟端口作通讯使用。

接着我们在usbd_cdc_if.c 文件中找到USB的接收中断,我们做一个串口回传。


static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len){  /* USER CODE BEGIN 6 */  CDC_Transmit_FS(Buf, *Len);  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);  USBD_CDC_ReceivePacket(&hUsbDeviceFS);  return (USBD_OK);  /* USER CODE END 6 */}

下载程序之后观察效果。

5

思考

我们成功的用板载USB实现了虚拟串口的通讯,但是大家有没有发现,为什么全文上下都没有提到关于波特率,停止位这些的设定呢?

事实上我们在通讯的时候根本不用管波特率,我们所谓的虚拟串口实际上只是让PC开启了一个虚拟端口,但是我们的通讯流程并没有涉及到真正的串口通信。

下一期我们可以好好聊一聊这个问题。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容