Lightweight USB device Stack for STM32 microcontrollers
Switch branches/tags
Nothing to show
Clone or download
dmitrystu Merge pull request #26 from FabianInostroza/max_ep_fix
Fix MAX_EP. I though it was the total number of endpoints but by the …
Latest commit 0a31c08 Sep 23, 2018

Lightweight USB Device Stack

  • Lightweight and fast
  • Event-driven process workflow
  • Completely separated USB hardware driver and usb core
  • Easy to use.


Supported hardware

MCU SeriesFeaturesDriverFile
STM32L0x2 STM32L0x3 STM32L4x2 STM32L4x3 STM32F0x2 STM32F0x8 Doublebuffered
8 endpoints
usbd_devfs usbd_stm32l052_devfs.c
usbd_devfs_asm usbd_stm32l052_devfs_asm.S
STM32L1xx Doublebuffered
8 endpoints
usbd_devfs usbd_stm32l100_devfs.c
usbd_devfs_asm usbd_stm32l100_devfs_asm.S
STM32F102 STM32F103 STM32F302 STM32F303 STM32F373 Doublebuffered
External DP pullup
8 endpoints
usbd_devfs usbd_stm32f103_devfs.c
usbd_devfs_asm usbd_stm32f103_devfs_asm.S
STM32L4x5 STM32L4x6 Doublebuffered
6 endpoints
VBUS detection
usbd_otgfs usbd_stm32l476_otgfs.c
STM32F4x5 STM32F4x7 STM32F4x9 Doublebuffered
6 endpoints
VBUS detection
SOF output
usbd_otgfs usbd_stm32l429_otgfs.c
STM32F105 STM32F107 Doublebuffered
6 endpoints
VBUS detection
SOF output
usbd_otgfs usbd_stm32f105_otgfs.c
  1. Single physical endpoint can be used to implement
  • one bi-directional/single-buffer logical endpoint (CONTROL)
  • one uni-directional/double-buffer logical endpoint (BULK OR ISOCHRONOUS)
  • two uni-directional/single-buffer logical endpoints (BULK OR INTERRUPT)
  1. At this moment BULK IN endpoint can use both buffers, but it is not real doublebuffered.

  2. Tested with STM32L052K8, STM32L100RC, STM32L476RG, STM32F072C8, STM32F103C8, STM32F103CB, STM32F303CC, STM32F303RE, STM32F429ZI, STM32F105RBT6, STM32F107VCT6

Implemented definitions for classes

  1. USB HID based on Device Class Definition for Human Interface Devices (HID) Version 1.11
  2. USB DFU based on USB Device Firmware Upgrade Specification, Revision 1.1
  3. USB CDC based on Class definitions for Communication Devices 1.2

Using makefile

  • to build library module
make module MODULE=path/module.a DEFINES="mcu spcified defines" CFLAGS="cpu cpecified compiler flags"
  • to build demo
make bluepill program
make stm32l052x8
  • to get a help
make help

Default values:

Variable Default Value Means
CMSIS ../../CMSIS path to CMSIS root folder
CMSISDEV $(CMSIS)/Device path to CMSIS device folder
CMSISCORE $(CMSIS)/CMSIS/Include $(CMSIS)/CMSIS/Core/Include path to CMSIS core headers
MCU stm32l100xc MCU selection for demo project
CFLAGS -mcpu=cortex-m3 -mfloat-abi=soft MCU specified compiler flags
DEFINES STM32L1 STM32L100xC MCU specified defines

Useful Resources

  1. USB Implementers Forum official site
  2. USB Made Simple
  3. LUFA - the Lightweight USB Framework for AVRs.
  4. Open Source ARM cortex m microcontroller library