stm32笔记[16]-使用usb-cdc串口.md

news/2024/9/28 23:38:38

摘要

在stm32f103cbt6核心板使用usb cdc虚拟串口,回环发送的字符串.

关键信息

  • STM32CubeIDE
  • JLINK
  • stm32f103cbt6
  • 外部晶振:8MHz

原理简介

usb-cdc简介

[https://blog.csdn.net/weixin_52296952/article/details/135776171]
[https://www.usbzh.com/article/detail-842.html]
[https://usb.org/sites/default/files/CDC1.2_WMC1.1_012011.zip]
USB通信设备类CDC分类编号为0x0a,且必须指定为接口设备类。

USB 通信设备类(或USB CDC类)是一个复合通用串行总线 设备类。
通信设备类用于类似于网卡的计算机网络设备,提供用于将以太网或ATM帧传输到某些物理介质的接口。它还用于调制解调器、ISDN、传真机和电话应用程序以执行常规语音呼叫。
通信设备具有三个基本任务:

设备管理(控制配置特定设备并通知 USB 主机某些事件)
呼叫管理(建立和终止电话呼叫或其他连接)
数据传输(发送和接收应用数据)

USB 组件中的 CDC 实现具有:

使用CDC的ACM(抽象控制模型)子类模拟虚拟 COM 端口。
使用CDC的ACM(抽象控制模型)子类使用RDNIS协议模拟网络连接。这支持Windows 主机 PC 和嵌入式设备之间的 USB 网络连接,以及USB 设备 RNDIS 到以太网桥应用程序。
使用 CDC 的NCM(网络控制模型)子类模拟以太网适配器(仅适用于USB 设备)。使用 CDC (NCM),您可以在基于 Linux 的主机系统上创建Ethernet-over-USB(适用于 Linux 主机)应用程序。

实现

  1. Connective->USB开启USB Device(FS)
  2. Middleware->USB_DEVICE->开启Communication Device Class
  3. 配置时钟(参数如下)
    USB部分时钟必须是48MHz
/* ########################## Oscillator Values adaptation ####################*/
/*** @brief Adjust the value of External High Speed oscillator (HSE) used in your application.*        This value is used by the RCC HAL module to compute the system frequency*        (when HSE is used as system clock source, directly or through the PLL).*/
#if !defined  (HSE_VALUE)#define HSE_VALUE    8000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */#if !defined  (HSE_STARTUP_TIMEOUT)#define HSE_STARTUP_TIMEOUT    100U   /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT *//*** @brief Internal High Speed oscillator (HSI) value.*        This value is used by the RCC HAL module to compute the system frequency*        (when HSI is used as system clock source, directly or through the PLL).*/
#if !defined  (HSI_VALUE)#define HSI_VALUE    8000000U /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE *//*** @brief Internal Low Speed oscillator (LSI) value.*/
#if !defined  (LSI_VALUE)#define LSI_VALUE               40000U    /*!< LSI Typical Value in Hz */
#endif /* LSI_VALUE */                     /*!< Value of the Internal Low Speed oscillator in HzThe real value may vary depending on the variationsin voltage and temperature. *//*** @brief External Low Speed oscillator (LSE) value.*        This value is used by the UART, RTC HAL module to compute the system frequency*/
#if !defined  (LSE_VALUE)#define LSE_VALUE    32768U /*!< Value of the External oscillator in Hz*/
#endif /* LSE_VALUE */#if !defined  (LSE_STARTUP_TIMEOUT)#define LSE_STARTUP_TIMEOUT    5000U   /*!< Time out for LSE start up, in ms */
#endif /* LSE_STARTUP_TIMEOUT *//* Tip: To avoid modifying this file each time you need to use different HSE,===  you can define the HSE value in your toolchain compiler preprocessor. */
时钟图
  1. 修改代码
    USB_DEVICE/usbd_cdc_if.c
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{/* USER CODE BEGIN 6 */USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);USBD_CDC_ReceivePacket(&hUsbDeviceFS);CDC_Transmit_FS(Buf, *Len); // 回传return (USBD_OK);/* USER CODE END 6 */
}
  1. 编译&烧录
    生成hex和bin文件方法:C/C++ Build->Settings->MCU Post Build outputs->convert to binary file
使用jflash烧录二进制

烧录完成后重新上电.

效果

虚拟串口输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/45568.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Linux 中使用 grep 命令的排除功能

来自grep 是一种强大的命令行工具,用于在一个或多个输入文件中搜索与正则表达式匹配的行,并将匹配的行标准输出。在本文中介绍如何在使用 grep 搜索时排除一个或多个单词或目录。排除单词或多个条件 要仅显示与搜索模式不匹配的行,请使用-v选项。例如,显示不包含nologin的…

MAVEN中的profile

---------------------------------------------------------------------------------------------------------------------------------------------------------maven的settings.xml文件用途Maven全局配置文件settings.xml详解_maven setting.xml-CSDN博客https://blog.csd…

Linux查看内存

查看 1. 使用 free 命令显示系统上可用和已用物理内存和交换内存的总量,以及内核使用的缓冲区和缓存。 # 查看命令 freetotal 总内存大小used 已被使用的内存(used= total – free – buff/cache)free 未被使用的内存 (free= total – used – buff/cache)shared…

选前端开发还是选全栈开发

选前端开发还是选全栈开发?一文带你读懂 在软件开发领域,前端开发和全栈开发是两个备受关注的职业方向。它们各自有着独特的优势和挑战,吸引着许多有志于从事软件开发的人们的目光。那么,对于初学者来说,应该如何选择呢?本文将从多个角度深入分析前端开发和全栈开发的优缺…

WP网站地图XML报错This page contains the following errors:

WP网站地图sitemap.xml文件报错This page contains the following errors: error on line 3 at column 6: XML declaration allowed only at the start of the document Below is a rendering of the page up to the first error.今天突然发现网站地图https://www.123how.com/s…

git配置连接github

1. 在github上建立一个仓库new repository填写仓库名,仓库属性(公共或者私有),自动添加readme.md文件创建后如图2. 本地git连接远程github仓库建立一个本地文件夹用作本地repo,Open Git Bash heregit init:初始化一个空的git repos,在指定文件夹中生成了隐藏的.git文件夹。…

关于PHPStudy中MySQL启动不成功

成功截图 失败原因—— 如果之前有下载过MySQL服务,那要确保只有PHPStudy中MySQL名字为MySQL 服务中其他的MySQL服务不允许叫MySQL 不然PHPStudy中的mysql会因为名称冲突而启动失败更改本机服务中的MySQL名称—— https://www.cnblogs.com/yansans/p/18248825