STM32 USB CDC调试

一、前言

最近在做STM32的IAP方案,官方提供的demo是基于USART实现,但是使用USART的话要和电脑通信要么借助USB转TTL工具;要么在板子上加一颗CH340类似的转换芯片。这就不是很方便,就想着直接可以通过USB线进行升级,所以USB CDC就进入我的视野,关于USB CDC 是什么这里就不在赘述了,感兴趣的同志们可以自行查找其他质料。USB协议是相当复杂的,在此前我对USB协议,好在现在借助CubeMX生成USB CDC驱动代码,降低了开发难度。好了下面进入正题。。

二、CubeMX创建MDK工程

首先说明一下本次调试的硬件是正点原子F1精英板。

2.1、配置RCC

时钟源配置

时钟配置

2.2、USB配置

2.3、USB Device配置

2.4、project配置

好了,CubeMX配置完成,没错就是这么简单,剩余的工作就是一键生成代码就行了。

三、USB CDC源码简要分析

这里重点分析usbd_cdc_if.c文件,这个文件非常重要起一个桥梁的作用——连接USB CDC底层驱动和上层应用。

函数操作句柄



看到这个fops我就会莫名的想到linux驱动,看来这里的实现应该是借鉴了linux的相关思想。

CDC_Init_FS

看名字就知道它是用来初始化CDC的,可以看到其内部实现就是设置RX和TX的buffer地址。

CDC_DeInit_FS

这个函数取消初始化的,但里面空实现,当然你想往里加写操作也是可以的,我想官方也是这么想的,把实现给到我们开发人员。

CDC_Control_FS

这个函数是实现CDC相关请求的管理,像上位机下发的串口参数就是通过这个函数接收的,这个函数比较长就不贴图。

CDC_Receive_FS

这个函数在USB接收到数据时就会被调用,是用于处理接收数据的。

除了上面操作句柄里的四个函数外,usbd_cdc_if.c还提供了一个接口函数用于USB发送数据的函数



要注意的是这个发送函数是非阻塞的也就是上一次未发送完成时,再次调用该函数进行发送会失败并马上返回,造成发送数据的丢失,所以需要考虑对其进行二次封装成可以超时发送的函数。

基本上了解了上面的知识后,使用 USB CDC进行回环测试就没啥问题,当然如果想有更高级的操作还是不够(比如说多路串口),这就需要自己花时间去摸索了。

回环测试

要进行回环测试只需在CDC_Receive_FS函数中添加如下语句:

测试结果



STM32 USB CDC调试记录的更多相关文章

  1. android上USB Wifi调试记录

    https://wenku.baidu.com/view/cc3098c72f60ddccdb38a043.html?from=search

  2. [未完] Linux 4.4 USB —— spiflash模拟usb大容量存储设备 调试记录 Gadget Mass Stroage

    linux 4.4 USB Gadget Mass Stroage 硬件平台: licheepi nano衍生 调试记录 驱动信息 │ This driver is a replacement for ...

  3. STM32 USB Virtual COM

    STM32 USB Virtual COM USB转串口的功能实现   这次讲的是如何实现USB转串口功能的实现.首先看看工程的布局吧: 我们主要要介绍的文件的在USB_User这个组文件.从上面的截 ...

  4. STM32 USB虚拟串口(转)

    源:STM32 USB虚拟串口 串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片 ...

  5. STM32 USB 问题汇总(转)

    源:STM32 USB 问题汇总 汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下 ...

  6. STM32 USB虚拟串口

    串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方 ...

  7. STM32 USB转串口驱动 Virtual COM Port Driver(V1.3.1)

    将stm32的USB口接到PC端后,PC端会要求安装一个STM32 USB Virtual COM Port Driver,然后就可以用串口调试助手对其操作了

  8. ATMEL处理器自带USB CDC的Win7驱动问题

    [背景] 很久以前使用ATMEL的处理器开发了一款设备,通过处理器本身的功能,借助USB在PC端虚拟一个串口出来,实现和上位机软件的通信,和基本的参数设置和数据读取功能. 这个功能就是ATMEL官网上 ...

  9. Android USB安全调试

    Android 4.2.2 引入了USB安全调试方面的内容,当启用安全调试的时候,只有被用户认证过的主机才可以通过Android SDK自带的ADB工具经由USB连接来访问设备的内部构件. 下面以an ...

  10. 杭州蓝松科技推出的安卓端的USB转串口调试助手, 欢迎下载使用

    杭州蓝松科技推出的安卓端的USB转串口调试助手, 欢迎下载使用 下载地址:http://files.cnblogs.com/guobaPlayer/%E8%93%9D%E6%9D%BEUSB%E4%B ...

随机推荐

  1. 重新点亮linux 命令树————文件权限和目录权限[九]

    前言 简单整理一下文件权限和目录权限. 正文 当打开ls -al的时候会出现相关的权限信息. 那么上面文件类型包括: 普通文件 d 目录文件 b 块特殊文件 (设备,比如u盘) c 字符特殊文件 (终 ...

  2. Memory Error

    不久前,为了满足工作中日常的各种实验测试需求,终于按需求组装一台塔式的server T440.但是没有多久就出现些问题,以下大概是问题和现象简单描述: (1). 最开始时,没几天就出现自动重启的问题, ...

  3. 力扣306(java)-累加数(中等)

    题目: 累加数 是一个字符串,组成它的数字可以形成累加序列. 一个有效的 累加序列 必须 至少 包含 3 个数.除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和. 给你一个只包含数 ...

  4. 如何合理使用 CPU 管理策略,提升容器性能?

    ​简介:CPU Burst.拓扑感知调度是阿里云容器服务 ACK 提升应用性能的两大利器,它们解决了不同场景下的 CPU 资源管理,可以共同使用.点击下文,查看详情! 作者:张佐玮(佑祎) 前言 在云 ...

  5. 一文读懂容器存储接口 CSI

    简介: 在<一文读懂 K8s 持久化存储流程>一文我们重点介绍了 K8s 内部的存储流程,以及 PV.PVC.StorageClass.Kubelet 等之间的调用关系.接下来本文将将重点 ...

  6. [FAQ] 你所看过的 APP 流氓提示语有哪些

    分享案例来自产品:网抑云. 当你要进行一些常规操作,比如评论时,进行弹窗伺候: |----------------------| |       | |   为提高您的账号安全性,请先绑定手机号   ...

  7. [Gin] gin.H{} 与 map[string]interface{}

    gin.H 中的 H 是对 map[string]interface{} 定义的新类型,用来简化生成 map 数据时的书写. // H is a shortcut for map[string]int ...

  8. Spring Boot 编写 API 的 10条最佳实践

    10 个最佳实践,让您像专业人士一样编写 Spring Boot API,并结合编码示例和解释: 1. RESTful API 设计原则: 清晰一致的资源命名:使用准确反映 API 管理的资源的名词( ...

  9. 从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况

    Anaconda是什么? Anaconda 是一个开源的 Python 发行版本,主要面向数据科学.机器学习和数据分析等领域.它不仅包含了 Python 解释器本身,更重要的是集成了大量的用于科学计算 ...

  10. 高性能远程控制软件,完美替代Anydesk

    Anydesk是一款来自德国的远程软件,据悉是Teamviewer团队成员出来独立门户做的.Anydesk给人一种小而美的感觉,软件体积小,性能高,被视为Teamviewer的替代产品.现在,AnyD ...