STM32F411 «Black Pill» USB & Libopencm3 bug

Небольшая заметка по результатм исследования бага с неработающей инициализацией USB с библиотекой LibOpenCm3 для китайской платки WeAct «Black Pill» v2.0.
Если не у вас не работают примеры для USB, и система даже не проводит энумерацию подключенного устройства, то вам надо:

  1. Заинклюдить otg_fs.h
    #include <libopencm3/usb/dwc/otg_fs.h>
  2. После вызова функции usbd_init отключить VBUS sensing
    OTG_FS_GCCFG |= OTG_GCCFG_NOVBUSSENS | OTG_GCCFG_PWRDWN;
    OTG_FS_GCCFG &= ~(OTG_GCCFG_VBUSBSEN | OTG_GCCFG_VBUSASEN);

Фикс-реквест все еще с 2020 года ждет мержа.
https://github.com/libopencm3/libopencm3/pull/1256