я бы посоветовал переписать с нуля. Это быстрей будет.
Поддерживаю!
Буквально недавно разбирался с USB в STM'ках.Читал исходники той лапши, что Куб нагенерировал - там поседеть можно пока они через десяток переливаний одних и тех же значений из функции в функцию доберутся наконец до регистров. Кстати, до них я так и не добрался. В opencm3 чуть получше, но регистры они тоже спрятали мама не горюй. Как результат, самый вменяемый код как раз у Eddy_Em и оказался. Правда, я так и не понял как у него идет работа с EPnR и еще пара моментов, но уж такую мелочь можно и самостоятельно расковырять.
Как результат пустое USB устройство из Куба весит 14 кБ, а переписанный по-человечески - 3 кБ.