Ещё одна муть голубая.
В демо-примерах USB включается командами:
// Select USBCLK source
RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
// Enable the USB clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;
Первого я пока не понял, а второе переводится на язык регистров следующим образом:
RCC->AHBENR |= (uint32_t)0x00001000;
Т.е. бит 12 выставляется единица. Но в рефмане RM0008, в п. 7.3.6 на стр. 108 этот бит находится в числе Reserved.
На самом деле синхронизация влючается здесь:
// APB1ENR
// RCC_APB1Periph_USB = (uint32_t)0x00800000 -- bit 23
RCC_APB1PeriphClockCmd ( RCC_APB1Periph_USB, ENABLE );
т.е.
RCC->APB1ENR |= (uint32_t)0x00800000;
Но и это пока не помогло

...
Поставил в начало main
RCC_ClocksTypeDef RCC_Clocks;
RCC_GetClocksFreq ( &RCC_Clocks );
В RCC_Clocks - все поля равны 8*10^6, т.е. ни хрена не настроено.
Компилятор - IAR, где эти вещи всегда делались автоматом до вызова main..
Бред собачий и только. Роюсь дальше ...
Или я уже с катушек съехал и ни хрена не понимаю.
Кста. Прерывание USB не вызывается вообще - проверено светодиодиком.