UM1734
User manual
STM32Cube USB device library
Introduction
Universal Serial Bus (USB) is the most successful interconnect in the history of personal
computing which is used to connect devices like mouse, game-pads and joysticks,
scanners, digital cameras, and printers. USB has also migrated into consumer electronics
and mobile products.
The USB device library is a part of STM32Cube firmware package and can be downloaded
free from ST website (http://www.st.com/stm32cube).
This user manual is intended for developers who use STM32Cube firmware on STM32
microcontrollers. It describes how to start and implement a USB device applications for
most common USB device classes (HID, MSC, Audio, CDC…) based on the USB device
stack that supports all STM32 microcontroller series.
Note:
This document is applicable to all STM32 devices that feature an USB interface. However
for simplicity reason, the STM32F4xx devices and STM32CubeF4 are used as reference
platform. To know more about the examples implementation on your STM32 device, please
refer to the readme file provided within the associated STM32Cube FW package.
November 2014
DocID025934 Rev 2
1/60
www.st.com
1
Contents
UM1734
Contents
1
2
STM32Cube overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1
2.2
2.3
Acronyms and abbreviations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1
3.2
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4
USB device library architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1
Architecture overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5
USB OTG Hardware Abstraction Layer . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.1
5.2
Driver architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
USB driver programming manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2.1
Configuring USB driver structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6
USB device library overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.1
USB device library description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
6.1.1
6.1.2
6.1.3
6.1.4
6.1.5
6.1.6
USB device library flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
USB device data flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Core interface with low level driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
USB device library interfacing model . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Configuring the USB device firmware library . . . . . . . . . . . . . . . . . . . . . 23
USB control functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2
6.3
USB device library functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
USB device class interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
7
USB device library class module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.1
HID class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.1.1
7.1.2
HID class implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
HID user interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
DocID025934 Rev 2
2/60
UM1734
7.1.3
Contents
HID Class Driver APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Mass storage class implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Get Max MUN (class-specific request) . . . . . . . . . . . . . . . . . . . . . . . . . 35
MSC Core files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Disk operation structure definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Disk operation functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Device firmware upgrade (DFU) class implementation . . . . . . . . . . . . . 40
Device firmware upgrade (DFU) Class core files . . . . . . . . . . . . . . . . . . 42
Audio class implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Audio core files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
How to use this driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Audio known limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Data IN transfer management (from device to host) . . . . . . . . . . . . . . . 49
Data OUT transfer management (from host to device) . . . . . . . . . . . . . 49
Command request management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Command device class (CDC) core files . . . . . . . . . . . . . . . . . . . . . . . . 49
How to use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
CDC known limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2
Mass storage class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
7.3
Device firmware upgrade (DFU) class . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.3.1
7.3.2
7.4
Audio class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.4.1
7.4.2
7.4.3
7.4.4
7.5
Communication device class (CDC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.5.1
7.5.2
7.5.3
7.5.4
7.5.5
7.5.6
7.5.7
7.6
7.7
Adding a custom class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Library footprint optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
8
9
Frequently-asked questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
DocID025934 Rev 2
3/60
3
List of tables
UM1734
List of tables
Table 1.
Table 2.
Table 3.
Table 4.
Table 5.
Table 6.
Table 7.
Table 8.
Table 9.
Table 10.
Table 11.
Table 12.
Table 13.
Table 14.
Table 15.
Table 16.
Table 17.
Table 18.
Table 19.
Table 20.
Table 21.
Table 22.
Table 23.
Table 24.
Table 25.
Table 26.
Table 27.
Table 28.
Table 29.
Table 30.
List of terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
USB device status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Standard requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
API description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Low level Event Callback functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
USB library configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
USB device core files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Class drivers files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
usbd_core (.c,.h) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
usbd_ioreq (.c,.h) files functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
usbd_ctrlq (.c,.h) files functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
USB device class files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
usbd_hid.c,h files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
SCSI commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
usbd_msc (.c,.h) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
usbd_msc_bot (.c,.h) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
usbd_msc_scsi (.c,.h) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Disk operation functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
DFU states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Supported requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
usbd_dfu (.c,.h) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Audio control requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
usbd_audio_core (.c,.h) files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
usbd_audio_if (.c,.h) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Audio player states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
usbd_cdc (.c,.h) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Configurable CDC parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
usbd_cdc_interface
(.c,.h) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Variables used by usbd_cdc_xxx_if.c/.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Document revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4/60
DocID025934 Rev 2
UM1734
List of figures
List of figures
Figure 1.
Figure 2.
Figure 3.
Figure 4.
Figure 5.
Figure 6.
Figure 7.
Figure 8.
Figure 9.
Figure 10.
Figure 11.
Figure 12.
Figure 13.
Figure 14.
Figure 15.
Figure 16.
Figure 17.
Figure 18.
Figure 19.
Figure 20.
Figure 21.
Figure 22.
STM32Cube block diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
STM32Cube USB device library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
USB device library architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Driver architecture overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
USBD_HandleTypedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
USB device library directory structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Data structure for SETUP packet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
USB device library process flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
USB device data flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
USB device library interfacing model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
USB Class callback structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
USB device descriptors structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Example of USBD_HID_SendReport function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
BOT Protocol architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Disk operation structure description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Example of standard inquiry definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
DFU Interface state transitions diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Audio core structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
CDC core structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
CDC interface callback structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Example of USB descriptors declared as constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Example of dynamic memory allocation for class structure . . . . . . . . . . . . . . . . . . . . . . . . 56
DocID025934 Rev 2
5/60
5
评论