.
Yo toda la periferia, reloj y librerías Middleware (como le llaman a lo común, USB, TCPIP, CAN, SDIO, FATFS etc...), las configuro con Cube. Ni loco me pongo a configurar todo eso a mano. En la estructura que te crea Cube, por ahí se ve el directorio de las CMSIS, pero creo que no está completo, supongo que puedes luego copiar a capón todos los ficheros y usarlas.
En toda la estructura que te genera Cube, echa mano de las HAL. Tengo un proyecto que usa SPI, SDIO, FATFS y GPIO, y no he tenido ningún problema. Cuando quiero cambiar o añadir algo de configuración, me voy a Cube, lo toco, regenero el proyecto y a seguir. Si colocas tu código donde debes, Cube te lo respeta. Te ahorras muchísimo tiempo de trabajo. En el KDE para los Kinetis tienes algo parecido, pero no tan chulo, por lo menos el Processor Expert no es tan completo.
El usuario puede meter código propio en todas las acotaciones entre /* USER CODE BEGIN x */ y /* USER CODE END x */, donde x es un número correlativo que identifica cada bloque, tienes unas cuantas en todos los fuentes que genera Cube.
