主机环境: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开发。
上一篇:STM32 USB学习笔记2
下一篇:STM32L0xx_Hal_Driver库的使用--EXTI
推荐阅读最新更新时间:2024-11-16 20:29
设计资源 培训 开发板 精华推荐
- NCP1209P PWM电压模式控制器的典型应用
- NCP10672F12GEVB:NCP10672 反激式 SOIC7 演示板 12V
- MC33172DR2G 有源带通滤波器的典型应用
- MC33275 300 mA、低压差稳压器的典型应用
- LT3468ES5 闪光灯电路的典型应用电路使用一个 3mm 高的微型变压器
- EVAL-AD5629RSDZ,用于评估 AD5629R 八通道、16 位密集 DAC 的评估板
- DC1145A,基于 LTC4267 以太网供电 (PoE) 的演示板,具有 12V 隔离电源
- LT1764EQ 并联 LDO 稳压器以实现更高输出电流的典型应用
- LT3763IFE 20A、脉宽调制、单 LED 驱动器的典型应用电路
- NCP1562-100WGEVB,NCP1562 评估板,100W,48V 电信砖