This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

STM32F412G DISCOVERY - USB Device not working with DFP

Hi!

First of all until now I have used the STM32F103 with an own schematic. Now I have to migrate my "old" project to the new STM32F412G DISCOVERY - Board. As i understood with the USB-Device-API of KEIL-DFP (CMSIS-Driver) I can develop an USB-Communication which is abstracted from hardware, so my code can be easily migrated to a new µController - only by replacing the µC-Device in Keil-µVision.

I migrated already many parts but I'm not able to run the USB-Device. So what have I tried until now?

First I tried the HID-Demo application from ST "STM32Cube_FW_F4_V1.16.0" this is working -> there should no hardware issues at the discovery-board (like broken connections). But as explained I need Keil's USB-API of DFP. So I opened the example projects via keil "Pack Installer" for the "MCBSTM32F400" and the "STM32f429I-Discovery". I have checked the schematics of both boards -> both boards have an "user USB" connector using USB-OTG-FS with pins PA9 to PA12 -> like the STM32F412G DISCOVERY.

For STM32F412G DISCOVERY I can't use the "board support", which means "Button" and "LED", of the example projects will not work, but they are not mandatory for basic USB communication.

Steps:
1. opening USB-Device-HID example of MCBSTM32F400 / STM32f429I-Discovery
2. changeing device to STM32F412ZGTx
3. changeing HSE_VALUE and Xtal to 8000000
4. disable OTG HS driver - because not available at STM32F412ZGTx
5. configured RTE_Device.h - enabled USB-OTG-FS - Device + VBUS sensing pin
6. disabled "board support" with Buttons/LED and removed this from code lines
7. added the "stm32f4xx_ll_fsmc.c" to project
8. changed the RTX clock to 100MHz
9. finally changed the systemclock settings as specified in the "STM32Cube_FW_F4_V1.16.0" example

 void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
  HAL_StatusTypeDef ret = HAL_OK;

  /* Enable Power Control clock */
  __HAL_RCC_PWR_CLK_ENABLE();

  /* The voltage scaling allows optimizing the power consumption when the
   * device is clocked below the maximum system frequency, to update the
   * voltage scaling value regarding system frequency refer to product
   * datasheet.  */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  /* Enable HSE Oscillator and activate PLL with HSE as source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 200;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  RCC_OscInitStruct.PLL.PLLR = 2;
  ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);

  if (ret != HAL_OK)
  {
    while (1)
    {;
    }
  }

  /* Select PLLSAI output as USB clock source */
  PeriphClkInitStruct.PLLI2S.PLLI2SM = 8;
  PeriphClkInitStruct.PLLI2S.PLLI2SQ = 4;
  PeriphClkInitStruct.PLLI2S.PLLI2SN = 192;
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_CK48;
  PeriphClkInitStruct.Clk48ClockSelection = RCC_CK48CLKSOURCE_PLLI2SQ;
  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);

  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
   * clocks dividers */
  RCC_ClkInitStruct.ClockType =
    (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 |
     RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
  if (ret != HAL_OK)
  {
    while (1)
    {;
    }
  }
}

Then i compiled without errors and flashed the target successfully - but after reset the usb-device is doing anything. Normally you get the windows "usb plugin sound" or you can see a new device in the hardware manager, but there happens nothing. If you have a misconfiguration, you will get an error notification from windows -> also nothing. It looks like there is any usb communication. I also check the usb cable - it has data lines and as i mentioned it is working with the "STM32Cube_FW_F4_V1.16.0" example.

So what I'm doing wrong? where is my mistake?