STM32 基础系列教程 23 - USB_cdc

2023-10-30

前言

学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。

 

示例详解

基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。

 

 

本示例所用的最小系统板原理图:

 

    1. 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置:

 

 

      1. 系统时钟树

      1. USB接口配置

      1. USB设备配置(选择Virtual Port Com,参数可保持默认)

      1. 引脚配置

 

      1. 中断配置(保持默认)

    1. 工程代码
      1. 在usbd_dcd_if.c 中加入如下图所示代码,实现串口回环功能,对应功能代码见USBD_CDC_IF.C中CDC_Receive_FS函数中 USER CODE 6 区间代码:

 

烧录默认代码,连上电脑可在电脑上看到对用的串口(前提是电脑上已安装了驱动程序,在程序包中会提供!):

 

    1. 到此,简单的USB_cdc设备演示demo就完成了,下面我们可以用PC上的串口工具时行测试一下代码功能:

可以看到,通过串口发送出去的内容成功地回回发到了PC工具,实现成功,在这个demo基础上,可以根据实际需要去增加功能,比如将接收到的数据发送给MCU的另一个串,或通过MCU的LCD的显示出来。

 

 

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

 

 

文中资料下载,在公众号里给十三发消息:

下载|STM32基础系列教程23

 

关注十三公众号

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 基础系列教程 23 - USB_cdc 的相关文章

  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • rt-thread studio中新建5.02版本报错

    先吐槽一下 rt thread studio出现BUG真多 好多时间都是在找BUG 但里面用好多控件还是挺好用的 真是又爱又恨 所以一般使用功能不多的话还是用keil多一点 创建5 02版本工程之后直接进行编译 直接会报下面这个错误 资源
  • STM32F4 通过软复位跳转到引导加载程序,无需 BOOT0 和 BOOT1 引脚

    我问这个问题是因为可以在这里找到类似问题的答案 通过应用程序跳转到 STM32 中的引导加载程序 即从用户闪存在引导模式下使用引导 0 和引导 1 引脚 用户 JF002 JF002回答 当我想跳转到引导加载程序时 我在其中一个备份寄存器中
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 无法使用 OpenOCD 找到脚本文件

    我正在尝试按照本教程将 OpenOCD 与我的 ST 发现板一起使用 https japaric github io discovery README html https japaric github io discovery READM
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C
  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re

随机推荐

  • 本地目录映射到公网访问

    1 环境搭建 1 1 nodejs安装 首先是安装nodejs 下载地址 https nodejs org zh cn download 选择windows exe版本直接下载 解压可以得到如下文件 然后添加环境变量保证在任意终端可以直接使
  • vue发ajax怎么保存数据,在vue中用localstorage将ajax数据存储到本地

    什么是localStorage 在HTML5中 新加入了一个localStorage特性 这个特性主要是用来作为本地存储来使用的 解决了cookie存储空间不足的问题 cookie中每条cookie的存储空间为4k localStorage
  • java的SAX库实现XML文件的解析

    实现XML解析有很多库 有DOM 有SAX 还有其它的 为了为后面android程序中解析XML做基础 我只学习了SAX解析XML 概述 http www sf org cn article base 200707 20374 html S
  • 软考高项之学习笔记——质量成本概念

    软考高项之学习笔记 质量成本概念 一 常见混淆概念 二 质量成本相关概念解释 1 质量成本概念 2 一致性成本 3 非一致性成本 三 历年真题 一 常见混淆概念 质量成本 一致性成本 非一致性成本 预防成本 内部失败成本 失败成本 外部失败
  • Android音频录制权限申请

    最近捣鼓录音小程序 发现很多晚上的demo 都不能运行成功 细看log发现是权限申请在Android版本中有所不同 在6 0 之后似乎需要我们动态的去通过用户是否给予权限而获得我们需要的权限 声明需要的权限 然后再需要到activity里调
  • SpringBoot+Mybatis搭建Web项目详细步骤-记录

    SpringBoot搭建Web项目详细步骤 一 IDEA快速创建SpringBoot项目 二 项目结构 1 目录结构 2 配置web端口与数据源 3 代码文件 1 pom xml 2 DAO层实体类 Employee java 3 创建和数
  • Ant Design Vue的表单布局

    在Ant Design Vue中的文本框的布局和标签的长度管理 Ant Design Vue的栅格布局使用 1 布局行列创建使用 在form中创建列和行直接复制进即可
  • 点云处理算法整理(超详细教程)十大点云数据处理技术梳理

    研究点云数据时 感觉无从下手 看看这十大点云数据处理技术 换个思路学点云 点云 定义 简言之 在获取物体表面每个采样点的空间坐标后 得到的是一个点的集合 称之为 点云 包括三维坐标 XYZ 激光反射强度 Intensity 和颜色信息 RG
  • 中国象棋(人机博弈)

    项目效果展示 走法产生 如何产生 走法产生是指将一个局面的所有可能的走法罗列出来的那一部分程序 也就是用来告诉其他部分下一部分可以网哪里走的模块 在象棋里 象可以走田 你就需要检查与这个象相关联的象位上是否有自己的棋 并且要检查其间的象眼上
  • 自守数是指一个数的平方的尾数等于该数自身的自然数。例如252=625,762=5776。输入一个自然数,判断其是否为自守数。 如果是,则输出Yes,否则输出No

    题目描述 自守数是指一个数的平方的尾数等于该数自身的自然数 例如252 625 762 5776 输入一个自然数 判断其是否为自守数 如果是 则输出Yes 否则输出No 输入 一个自然数 输出 如果是自守数 输出Yes 否则输出No 样例输
  • 【软件工具】安装和使用Miniconda来管理Python环境

    安装和使用Miniconda来管理Python环境 一 Miniconda简介 二 Miniconda的安装 1 下载 2 安装 三 Miniconda的配置 四 Miniconda的使用 1 Conda相关 2 环境管理 3 包管理 参考
  • 银河麒麟中vsftpd匿名用户相关配置常见问题及解决方法

    银河麒麟系统中通常自带vsftpd 可以通过配置vsftpd 实现在本机中搭建ftp服务器 方便文件管理使用 并且很多时候确实因为实际需要 需要配置为允许匿名用户登录并操作 但是vsfpd如果配置不好 就经常会出现很多问题 比如无法新建文件
  • NSSCTF之Web篇刷题记录(12)

    NSSCTF之Web篇刷题记录 12 NCTF 2018 签到题 鹤城杯 2021 EasyP NSSCTF 2022 Spring Recruit ezgame GXYCTF 2019 Ping Ping Ping SWPUCTF 202
  • PK体系“配齐”

    我国是人口大国 随着5G新型应用 智慧城市建设 疫情防范等信息化需求的增长 系统所需管理的数据量级越发庞大 类型越发丰富 各行业对于可信 安全的国产软件的诉求日益增强 想用对国产化 用好国产化 信息行业应用生态的建设必不可少 近日 亚信科技
  • angular中的管道(pipe) 以及自定义管道

    http bbs itying com topic 5bf519657e9f5911d41f2a341 大小写转换 p str uppercase p 转换成大写 p str lowercase p 转换成小写 2 日期格式转换 p tod
  • js查找结构不同的两个数组中相同的元素并删除元素

    准确的是循环中删除数组元素会遇到的bug及解决办法 删除后需要注意元素的索引值 比如以下案例 删除2之后索引值继续 1 但原数组索引已经变化了 所以会出现遍历漏掉元素和索引值对不上的情况 然后就把forEach循环改成了for循环 可以控制
  • Eclipse快捷键大全

    Eclipse快捷键大全 转载 Ctrl 1 快速修复 最经典的快捷键 就不用多说了 Ctrl D 删除当前行 Ctrl Alt 复制当前行到下一行 复制增加 Ctrl Alt 复制当前行到上一行 复制增加 Alt 当前行和下面一行交互位置
  • 关于小程序本地图片加载失败(渲染层错误)的问题

    今天 因为被分配到要写一个小程序页面 但是在图片载入上面却出现了一个这样的问题 图片上面的src是可以直接点击进去的 但是在小程序编译加载的时候却 而前辈们的大图片基本上都是通过网络路径进行加载 正巧这几张图片在网络路径中没有 只能通过本地
  • C++_运算符重载

    什么是运算符的重载 运算符与类结合 产生新的含义 为什么要引入运算符重载 作用 为了实现类的多态性 多态是指一个函数名有多种含义 怎么实现运算符的重载 方式 类的成员函数 或 友元函数 类外的普通函数 规则 不能重载的运算符有 和 和 和
  • STM32 基础系列教程 23 - USB_cdc

    前言 学习stm32 USB接口使用 学会用CUBE工具快速创建USB设备工程及调试 关于usb的相关知道请读者提前准备并学习 当然如果不想深究其中原理的话 跟着本文来操作就可以实现基于USB的设备开发了 需要提示的是 stm32在使用us