单片机
返回首页

STM32 USB学习笔记1

2019-03-11 来源:eefocus

主机环境:Windows 7 SP1


开发环境:MDK5.14


目标板:STM32F103C8T6


开发库:STM32F1Cube库和STM32_USB_Device_Library


之前在STM32论坛里领取过一块STM32开发板,本来以为是带有USB模块接口的,最后发现NUCLEO里是没有把USB模块外接出来的,所以就自个儿掏钱买了一块单板,如下图所示:



单板很简单,单纯是为了学习一下STM32的USB模块,之所以选择这个是因为它便宜,而且ST官方有提供USB模块库方便开发。


USB开发博大精深,比之串口,SPI,I2C来说多了很多东西,一个很简单的例子就是串口,SPI,I2C都可以使用通用IO口来模拟实现,但USB却很少有人这么做。学习USB模块就要学习USB协议,USB协议从1.1到2.0再到3.0,现在貌似到3.1版本了都,版本更替了这么多但不影响我们学习,因为USB协议都是向后兼容的,学习了一个就够了。


STM32F103C8T6的USB模块实现了USB2.0全速总线,符合USB2.0全速设备的计数规范,支持8个双向端点等。


USB总线使用两根线实现差分传输D+、D-,这跟485总线类似。因此,在USB总线上同一时刻只能有一个方向上的传输。


有关USB2.0协议规范可以从USB官网上下载,重点看第9章节即可,600多页的文档从头看到尾是很枯燥的。当然如果有精力的话,整个规范都看完也是很有好处的。跟USB2.0规范相关的还有很多类规范,在开发时如果有需要再看就可以了。


一、USB器件库概述


ST官网提供的USB文档有STM32Cube USB器件库,以及USB培训的一些文档,重点看USB器件库文档就好了,因为我们是把STM32的USB模块当作从设备,当然如果STM32支持USB主机的话还有另外一个主机库(不在这里讨论)。通过查看STM32Cube USB器件库,可以帮助我们快速理解USB模块的架构,简化应用开发。STM32CubeUSB设备库在Cube中所处位置如下:



USB设备库位于HAL驱动层之上,在开发中我们只需关注USB设备库即可,不必关注USB设备的HAL驱动,不然USB设备库就没有存在的意义了。而且USB设备库代码是只读的,不需要修改。


设备库中使用的主要结构体为设备句柄,其类型为USBD_HandleTypeDef,我们不必刻意关注USB HAL驱动中USB所使用的数据结构,因为它们对于我们来说是隐藏的,只需关注设备库曝露给我们的接口即可,设备库是和USB2.0协议密切相关的,因此需要熟悉USB2.0文档有助于我们理解设备库的工作流程。


USB设备库目录分为两层:一层为Core(核心层);另一层为Class(类层),目录结构如下:



结构比较清晰,核心层是不需要动的,类层是扩展用的。


USB设备库中核心层的usbd_conf文件是需要用户自己实现的,用来配置USB的属性,其各个文件的作用如下:



其中usbd_req改为了usbd_ioreq。由表7就可以看出USB2.0规范中第9章很重要。USB器件库文档还详细说明了一下控制端点0,这在USB开发中是一个重要的端点。其作为默认的控制端点用于接收主机发来的各种请求,请求作为Setup包发送到设备,请求又分为标准请求和非标准请求,标准请求在控制端点0上就可处理了,对于非标准请求通过回调函数传递给特定类进行进一步处理。


USB设备库的类层中各个文件作用如下:



其中的usbd_xxx_if_template文件需要由用户实现,目前跟USB设备库相关的文件有两个需要用户去实现即usbd_conf文件和usbd_xxx_if_template文件。至此USB器件库的概述说明就完毕了,更多详细情况查看USB器件库文档即可。


二、USB协议概述


USB协议中用到的一些逻辑部件:


端点:数据传输的最终对象


管道:主机和设备端点之间数据传输的模型


接口:用于描述特定的功能(有一组端点组成)


设备:由一个或多个接口组成


USB传输分为了3层:Packet、Transaction、Transfer,三者是由小到大,关系如下图:



一次Transfer传输分为几个Transaction,一次Transaction由几次Packer组成。


Packet包格式如下:



所有的USB传输都是由USB主机发起,这点跟I2C通信有些类似。


USB的传输分为4类:控制传输、中断传输、同步传输、批量传输,由此引申出4类端点类型:控制端点、中断端点、同步端点、批量端点。



控制传输是双向的,须有IN和OUT两个方向上的端点号。其他类型的传输是单向的。各类传输差别不是很大,只是对时间的要求不同。


有关USB协议的大概情况就介绍到这,更多详情请查阅USB2.0规范以及STM32F103的参考手册。后面将通过VCP具体示例来分析USB开发。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 简洁的过零调功器电路设计与分析

  • MT3608构成3.7V转12V的升压电路图

  • 比较常见的功率整流器和滤波电路

  • 基于M66T旋律发​​生器的电路图解析

  • 一个简单的红外耳机电路

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章