Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/dmitrystu/libusb_stm32

Lightweight USB device Stack for STM32 microcontrollers
https://github.com/dmitrystu/libusb_stm32

stm32 usb

Last synced: 2 days ago
JSON representation

Lightweight USB device Stack for STM32 microcontrollers

Lists

README

        

![LNX build](https://github.com/dmitrystu/libusb_stm32/workflows/LNX%20build/badge.svg)
![WIN build](https://github.com/dmitrystu/libusb_stm32/workflows/WIN%20build/badge.svg)
![OSX build](https://github.com/dmitrystu/libusb_stm32/workflows/OSX%20build/badge.svg)

### Lightweight USB Device Stack ###

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

### Requirements ###

+ [CMSIS V4](https://github.com/ARM-software/CMSIS) or [CMSIS V5](https://github.com/ARM-software/CMSIS_5).
+ [stm32.h](https://github.com/dmitrystu/stm32h) STM32 universal header

All requirements can be downloaded into a directory specified in environment variable `CMSIS` using
`make cmsis` command.

### Supported hardware ###

MCU SeriesFeaturesDriverFile

STM32L0x2 STM32L0x3 STM32F070 STM32F0x2 STM32F0x8
Doublebuffered[2]
8[1] endpoints
BC1.2
usbd_devfs
usbd_stm32l052_devfs.c


usbd_devfs_asm
usbd_stm32l052_devfs_asm.S


STM32L4x2 STM32L4x3 STM32G4 series
Doublebuffered[2]
8[1] endpoints
BC1.2
usbd_devfs
usbd_stm32l433_devfs.c


usbd_devfs_asm
usbd_stm32l052_devfs_asm.S


STM32L1xx
Doublebuffered[2]
8[1] endpoints
usbd_devfs
usbd_stm32l100_devfs.c


usbd_devfs_asm
usbd_stm32l100_devfs_asm.S


STM32F102 STM32F103 STM32F302 STM32F303 STM32F373
Doublebuffered[2]
External DP pullup
8[1] endpoints
usbd_devfs
usbd_stm32f103_devfs.c


usbd_devfs_asm
usbd_stm32f103_devfs_asm.S


STM32WB55
Doublebuffered[2]
External DP pullup
8[1] endpoints
usbd_devfs
usbd_stm32wb55_devfs.c


STM32L4x5 STM32L4x6
Doublebuffered
6 endpoints
BC1.2
VBUS detection
usbd_otgfs
usbd_stm32l476_otgfs.c


STM32F401 STM32F411
Doublebuffered
4 endpoints
VBUS detection
SOF output
usbd_otgfs
usbd_stm32f429_otgfs.c


STM32F4x5 STM32F4x7 STM32F4x9
Doublebuffered
4 endpoints
VBUS detection
SOF output
usbd_otgfs
usbd_stm32f429_otgfs.c


Doublebuffered
6 endpoints
VBUS detection
SOF output
usbd_otghs
usbd_stm32f429_otghs.c


STM32F105 STM32F107
Doublebuffered
4 endpoints
VBUS detection
SOF output
usbd_otgfs
usbd_stm32f105_otgfs.c


STM32F4x6 STM32F7
Doublebuffered
6 endpoints
VBUS detection
SOF output
usbd_otgfs
usbd_stm32f446_otgfs.c


Doublebuffered
9 endpoints
VBUS detection
SOF output
usbd_otghs
usbd_stm32f446_otghs.c


STM32H743
Doublebuffered
6 endpoints
VBUS detection
SOF output
usbd_otgfs
usbd_stm32h743_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)

2. At this moment BULK IN endpoint can use both buffers, but it is not **real** doublebuffered.

3. Tested with STM32L052K8, STM32L100RC, STM32L476RG, STM32F072C8, STM32F103C8, STM32F103CB,
STM32F303CC, STM32F303RE, STM32F429ZI, STM32F105RBT6, STM32F107VCT6, STM32L433CCT6, STM32F070CBT6,
STM32G431RB, STM32F411CEUx, STM32F405RG, STM32F446RE, STM32F373CC, STM32L053R8, GD32F103C8T6,
STM32F745VE, STM32F401CE, STM32H743.
See [hardware.md](hardware.md) for details.

### Don't copy-paste the startup code from the demo without considering RCC and USB clock requirements.
The HSI oscillator usually does not meet the timing requirements for USB and may cause performance loss
and a high error rate.

### Implemented definitions for classes ###
1. USB HID based on [Device Class Definition for Human Interface Devices (HID) Version 1.11](https://www.usb.org/sites/default/files/documents/hid1_11.pdf)
2. USB DFU based on [USB Device Firmware Upgrade Specification, Revision 1.1](https://www.usb.org/sites/default/files/DFU_1.1.pdf)
3. USB CDC based on [Class definitions for Communication Devices 1.2](https://www.usb.org/sites/default/files/CDC1.2_WMC1.1_012011.zip)
4. USB TMC based on [USB Device Test and Measurement Class Specification, Revision 1.0](https://www.usb.org/sites/default/files/USBTMC_1_006a.zip)

### Using makefile ###
+ to build library module
```
make module MODULE=path/module.a DEFINES="mcu specified defines" CFLAGS="cpu specified 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 |
| STPROG_CLI | ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/STM32_Programmer_CLI | Path to the ST Cube Programmer CLI |
| OPTFLAGS | -Os | Code optimization flags |

### Useful Resources ###
1. [USB Implementers Forum official site](https://www.usb.org/)
2. [USB Made Simple](http://www.usbmadesimple.co.uk/)
3. [LUFA - the Lightweight USB Framework for AVRs.](https://github.com/abcminiuser/lufa)
4. [Open Source ARM cortex m microcontroller library](https://github.com/libopencm3/libopencm3)