STM32 USB串口通信实例

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进,

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

1. 介绍

**在STM32微控制器中,USB串口通信(Virtual COM Port,以下简称VCP)是一种常见的应用需求。**它可以通过USB接口实现将STM32微控制器连接到计算机,从而在计算机上使用串口通信与STM32微控制器进行交互。本文将介绍如何在STM32开发板上实现USB串口通信,并提供详细的代码示例和说明。

2. 准备工作

在开始实现USB串口通信前,需要进行以下准备工作:

  • 确保STM32开发板支持USB功能,并连接好USB接口;

  • 在STM32CubeMX中配置USB功能,并生成相应的初始化代码;

  • 准备好一台计算机,安装好对应的串口调试软件(例如Tera Term、Putty等)。

3. USB串口初始化配置

3.1 配置USB功能

在使用USB功能前,需要在STM32CubeMX中进行USB功能的配置,包括使能USB功能、选择USB外设类型(例如USB OTG FS或USB OTG HS)等。

3.2 生成初始化代码

配置好USB功能后,通过STM32CubeMX生成初始化代码,并在工程中包含USB相关的驱动文件,如`usbd_cdc.h`、`usbd_cdc_if.h`等。

3.3 初始化USB

在初始化阶段,需要调用相应的API函数进行USB相关外设的初始化。以下是一个典型的USB初始化的代码片段:

```c
USBD_HandleTypeDef hUsbDeviceFS;

void MX_USB_Device_Init(void)
{
  hUsbDeviceFS.pClass = &USBD_CDC;
  hUsbDeviceFS.pClassData = &hUsbDeviceFS;

  if (USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_Start(&hUsbDeviceFS) != USBD_OK)
  {
    Error_Handler();
  }
}
```

通过以上代码,可以实现对USB外设的初始化配置,使其准备好接收和发送串口数据。

4. USB串口通信

4.1 发送数据

通过USB串口向计算机发送数据一般包括以下步骤:

```c
uint8_t data[] = "Hello, USB VCP!";
uint16_t len = strlen(data);

CDC_Transmit_FS(data, len);
```

通过以上代码,可以实现向计算机发送数据,并通过串口调试软件查看接收到的数据。

4.2 接收数据

从计算机接收数据一般包括以下步骤:

```c
uint32_t bytesToRead = ((USBD_CDC_HandleTypeDef *)hUsbDeviceFS.pClassData)->RxCount;

if(bytesToRead > 0)
{
    CDC_Receive_FS();
}
```

通过以上代码,可以实现从计算机接收数据,并进一步处理接收到的数据。

5. 数据交互

**在实际应用中,可以通过USB串口实现STM32与计算机之间的数据交互,例如发送传感器数据、接收控制指令等。**通过合理地使用USB串口,可以方便地实现嵌入式系统与上位机之间的通信和数据交互。

6. 总结

通过本文的介绍,您应当对如何在STM32开发板上实现USB串口通信有了初步的了解。合理配置并使用USB串口功能,可以实现嵌入式系统与计算机之间的便捷通信和数据交互。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击这里,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦。

​ 点击链接扫码进入嵌入式交流群 ​https://fss.mpay8.cn/article/dmrjinh2C6fjejm

相关推荐
极客小张31 分钟前
基于STM32MP157与OpenCV的嵌入式Linux人脸识别系统开发设计流程
linux·stm32·单片机·opencv·物联网
OH五星上将1 小时前
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【扩展组件】上
linux·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·liteos-a·鸿蒙内核
浅陌pa2 小时前
24:RTC实时时钟
c语言·stm32·单片机·嵌入式硬件
敲上瘾2 小时前
多态的使用和原理(c++详解)
开发语言·数据结构·c++·单片机·aigc·多态·模拟
小熊在忙fpga2 小时前
STM32如何修改外部晶振频率和主频
stm32·单片机·嵌入式硬件
我命由我123452 小时前
GPIO 理解(基本功能、模拟案例)
linux·运维·服务器·c语言·c++·嵌入式硬件·c#
学习日记hhh3 小时前
STM32G431RBT6(蓝桥杯)串口(发送)
stm32·单片机·嵌入式硬件
老李的森林3 小时前
嵌入式开发--STM32延时函数重构
stm32·单片机·嵌入式硬件·重构·延时
OH五星上将5 小时前
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核通信机制】上
linux·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·liteos-a·鸿蒙内核
爱桥代码的程序媛5 小时前
鸿蒙OpenHarmony【轻量系统内核通信机制(互斥锁)】子系统开发
嵌入式硬件·harmonyos·鸿蒙·openharmony··鸿蒙开发·子系统开发