Цитата(1921 @ May 7 2013, 16:57)

Значит, так. Подключен файл stm32f40x.h, из него подключается core_cm4.h.
Если я ручками прописываю какую-либо переменную с префиксом __IO, то никакого возмущения не наблюдаю, т.е. очевидно файл подключен. Что-нибудь с путями напутано в проекте?
Посмотрите инклуды в файле usb_conf.h, там нужно сделать инклуд для своей платы, например, добавив дефайн USE_MY_BOARD:
CODE
/* Includes ------------------------------------------------------------------*/
#if defined (USE_STM322xG_EVAL)
#include "stm322xg_eval.h"
#include "stm322xg_eval_lcd.h"
#include "stm322xg_eval_ioe.h"
#include "stm322xg_eval_sdio_sd.h"
#elif defined(USE_STM324xG_EVAL)
#include "stm32f4xx.h"
#include "stm324xg_eval.h"
#include "stm324xg_eval_lcd.h"
#include "stm324xg_eval_ioe.h"
#include "stm324xg_eval_sdio_sd.h"
#elif defined (USE_STM3210C_EVAL)
#include "stm32f10x.h"
#include "stm3210c_eval.h"
#include "stm3210c_eval_lcd.h"
#include "stm3210c_eval_ioe.h"
#include "stm3210c_eval_spi_sd.h"
#elif defined (USE_MY_BOARD)
#include "platform.h"
#else
#error "Missing define: Evaluation board (ie. USE_STM322xG_EVAL)"
#endif
И в инклуде platform.h указать #include "stm32f4xx.h", а также все определения итд для своей платы.
Цитата(1921 @ May 7 2013, 16:57)

Если переношу объявление структуры (регистры USB) в main.c, то воспринимает на ура, а на объявление в файле usb_regs.h ругается. К чему бы это?
Потому что у вас получается 2 разных определения с одинаковым названием, что некорректно.