проблемы при не правильной настройке связки Stm32CubeMx и Keil

Всегда после удачного начала программирования в какой-то среде наступает момент когда происходит что-то не понятное : не компилируется, или как-то не так компилируется, какие-то чудеса начинаются. И тогда приходится разбираться как устроен проект. Так получилось и в Keil - наше Custom Hid USB устройство почему-то прекрасно принимало данные , но при посылке хосту вылетало на хосте 0xC0010000 USBD_STATUS_CANCELED и данные могли дойти один раз, а потом постоянно нет.

Видно это было в программе Free Monitor Device Studio. Бесплатная и очень информативная программа для анализа USB событий. Видно было , что устройство нормально инициализировалось при включении , и все шло нормально только до момента приема пары байт.

Была попытка подключения отладки через Uatr2 через printf и это тоже все работало нормально, только причина не была найдена.

И тут как всегда неожиданно было замечено (когда проектов стало несколько) , что изменения , внесенные в код в одном проекте появлялись почему-то в другом. И естественно встал вопрос где лежат исходники, как они подключаются и т.д.

Начинается как-всегда все в Stm32CubeMX, который после инсталляции создает некие репозитории на компьютере ( у меня вот здесь C:\Users\p\STM32Cube\Repository). И кидает он туда исходники , ну например \Middlewares\ST\STM32_USB_Device_Library\Core\Src\usbd_ctlreq.с.

Далее смотрим как генерируется проект. Если Copy only necessery library files , то в ваше новом проекте тот же usbd_ctlreq.с будет представлен из репозитория, а вы в него успели ранее внести изменения например.

фотка 1

В такой ситуации уже поздно вспоминать в каких проектах, где и что менялось. Проще уже снести Stm32CubeMX с репозиториями и установить заново.
Далее по-видимому правильнее делать так Copy all used libraries into the project folders.

Потом переходим в Keil и наблюдаем такое:

фотка 2

т.е. теперь Keil будет тянуть исходники из папок внутри нашего проекта.

И вот теперь о чудо - проект который не работал вдруг заработал нормально!