Can’t compile KEIL MDK with STM32CubeMX middleware USB components due to missing header file (usbd_def.h)

Dear readers,

I’m developing a SW project with KEIL MDK Plus (V5.25) and the STM32CubeMX (V6.5) tool. The target processor is the STM32F303VCTx and everything goes well until I added a USB device to the project.

Before I describe the issue  I’d like to ask some basic questions for a better comprehension:

When I generate the code with CubeMX a new KEIL project is generated in the path

…\RTE\Device\STM32F303VCTx\STCubeGenerated\MDK-ARM

and the original KEIL project is going to be updated by CubeMX. May I understand the two KEIL projects as a generated output which shares some common resources ?

  • What is the reason for the second (new) generated project ? Is it connected to the stand alone concept from STM ?
  • Due to the original KEIL project contains all the developed code I’d like to continue with this project. Is there any reason against this ?
  • Do I need a special configuration settings to make sure that I receive everything from CubeMX?

 

The problem appears when I added a USB device and the Middleware class USB_DEVICE with HID. After generating code and compiling the project I received the following message:

 

./RTE/Device/STM32F303VCTx/STCubeGenerated/Inc\usb_device.h(33): error: 'usbd_def.h' file not found

 

In principle, it’s possible to fix this by adding manually some groups from the generated cubeMX code and with some include path from my local  STM32Cube repository but I’m not sure whether this is the right way?

I guess I have to add the USB port to the run time environment. Is this correct:

CubeMX looks like this:

 

and the KEIL project folder looks like this:

 

Any suggesting how to solve the missing groups, paths and entries in the KEIL project ?

 Thanks in advance.

Best regards

Norbert

Parents
  • Hello Norbert, as discussed in the support case, I repeat my answer also here for completeness.

    First, you should ignore the STM32CubeMX generated MDK project. When after code generation the Cube asks to open it, just click "Close" in this dialog and change back to the actual µVision project from within you did start the STM32CubeMX from the RTE dialog.

    Then I think you need to decide, if you want to use USB HID from Cube or the Keil Middleware. If you want to use the Keil Middleware, deselect USB_DEVICE HID in Cube. Having enabled both potentially will not work.

    You can also check some example project and how that is configured, like the Middleware USB Device HID for STM32303E-EVAL example, which you can find in the Pack Installer Example tab.

Reply
  • Hello Norbert, as discussed in the support case, I repeat my answer also here for completeness.

    First, you should ignore the STM32CubeMX generated MDK project. When after code generation the Cube asks to open it, just click "Close" in this dialog and change back to the actual µVision project from within you did start the STM32CubeMX from the RTE dialog.

    Then I think you need to decide, if you want to use USB HID from Cube or the Keil Middleware. If you want to use the Keil Middleware, deselect USB_DEVICE HID in Cube. Having enabled both potentially will not work.

    You can also check some example project and how that is configured, like the Middleware USB Device HID for STM32303E-EVAL example, which you can find in the Pack Installer Example tab.

Children