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. docker 应用篇————mysql容器[十二]

    前言 简单介绍一下mysql容器. 正文 这里简单介绍一下mysql的容器. hub.docker.io给了我们一个启动的示例. docker run --name some-mysql -e MYS ...

  2. 重新点亮linux 命令树————服务管理工具[二十五]

    前言 简单整理一下服务管理工具. 正文 服务集中管理工具. service 功能简单 systemctl 功能多 先来看下service脚本位置: 然后看下vim network 这里可以看到代码非常 ...

  3. jenkins 持续集成和交付——一个java构件小栗子(四)

    前言 介绍一下java 构建的小栗子. 正文 maven 管理 java 是用maven 管理包的,那么我们是要安装maven的. 还是那句话,安装这种东西呢,去官网下载然后自己安装,不要用yum a ...

  4. vue中执行异步函数async和await的用法

    在开发中,可能会遇到两个或多个函数异步执行的情况,对于Vue中函数的异步函数执行做了一个小总结,如下: 异步执行使用async和await完成 created() { this.init() }, m ...

  5. sql中的order by 按列排序

    在视频网课的时候,看到老师讲ORDER BY 后面跟了多个列,按列位置排序: SELECT `大类名`,`进价`,`售价` FROM `商品表` ORDER BY `大类名`,`售价` DESC; 这 ...

  6. 使用 Gradio 的“热重载”模式快速开发 AI 应用

    在这篇文章中,我将展示如何利用 Gradio 的热重载模式快速构建一个功能齐全的 AI 应用.但在进入正题之前,让我们先了解一下什么是重载模式以及 Gradio 为什么要采用自定义的自动重载逻辑.如果 ...

  7. 如何用一个插件解决 Serverless 灰度发布难题?

    简介: 我们可以发现相比使用控制台进行灰度发布,使用 FC-Canary 插件免去了用户手动创建版本.发布别名.关联触发器和管理自定义域名的麻烦,使用起来非常方便. 作者:长淇 导读 本文适合: 想了 ...

  8. MaxCompute 公共云多租户设计的技术要点详解及产品实现特色

    ​简介:公共云大数据平台在多租户的设计和实现方式上有所差异.本文主要介绍在公共云大数据平台的多租实现方案中需要考虑的问题和挑战,重点介绍了MaxCompute在计算和存储多租实现上的特点.期望通过这些 ...

  9. WPF 警惕使用 Dispatcher.InvokeShutdown 方法退出应用 将不触发 Application.Exit 事件

    这是一个比较让人困惑的一个点,我一直都以为 Dispatcher.InvokeShutdown 和 Application.Current.Shutdown 是完全等价的.但是后面发现了其实这两者还是 ...

  10. 【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风

    前言 每天都要浏览大量AI相关新闻,是不是感到信息量爆炸,有效信息少? 这么多新产品和新工具,到底哪些是真正是有价值的,哪些只是浮躁的一时热点? 想参与AI产品和工具的开发,从哪里能够获得大量的灵感和 ...