cancel
Showing results for 
Search instead for 
Did you mean: 

How to implement USB-CDC functionality for B L072Z LRWAN1 discovery kit

SMitt.1
Associate II

Hi,

I am using B-L072Z-LRWAN1 discovery kit. I want to implement USB-CDC functionality for my project.

I created the project using STM32CubeMX with the settings of USB-CDC after following this STM USB training link

https://www.youtube.com/watch?v=h9T0RTu9Muc&list=PLnMKNibPkDnFFRBVD206EfnnHhQZI4Hxa&index=9

After that i connected one USB to CN7 connector and run the code in debugging mode. Then i connected another USB to CN11 connector which is USER USB.

As per the video,

USB connected to CN7 should show one COM port with name "STMicroelectronics STLink VCP"

USB connected to CN11 should show another COM port with name "STMicroelectronics VCP".

But after connecting i am not detecting 2nd com port on my PC side in short no virtual port is showing after connecting to USER USB connector.

Please guide me regarding this with any example related to the same controller or any hardware settings need to be done for its working.

Thanks

Shubham

6 REPLIES 6
dbgarasiya
Senior II

you can find not similar but project for another controller on your IDE folder

SMitt.1
Associate II

Ya followed that but still facing problem. Till now i have tried following things:-

  • Changed the clock source on the hardware board, made it to TCXO source now. After changing it is working in debug mode and my clock configuration is
  /* Enable HSI Oscillator to be used as System clock source
     Enable HSI48 Oscillator to be used as USB clock source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSI48;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);
 
  /* Select HSI48 as USB clock source */
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
  PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
 
  /* Select HSI as system clock source and configure the HCLK, PCLK1 and PCLK2
     clock dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
 
  /*Configure the clock recovery system (CRS)**********************************/
 
  /*Enable CRS Clock*/
  __HAL_RCC_CRS_CLK_ENABLE();
 
  /* Default Synchro Signal division factor (not divided) */
  RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
  /* Set the SYNCSRC[1:0] bits according to CRS_Source value */
  RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
  /* HSI48 is synchronized with USB SOF at 1KHz rate */
  RCC_CRSInitStruct.ReloadValue =  __HAL_RCC_CRS_RELOADVALUE_CALCULATE(48000000, 1000);
  RCC_CRSInitStruct.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
  /* Set the TRIM[5:0] to the default value*/
  RCC_CRSInitStruct.HSI48CalibrationValue = 0x20;
  /* Start automatic synchronization */
  HAL_RCCEx_CRSConfig (&RCC_CRSInitStruct);

  • With the same clock configuration when i flash the code and put BOOT0 pin = 0, then Virtual com port is not creating.

I've had the USB working on the Murata modules, for the DISCO board I recall there being Solder Bridges (SB) that you must attend too. Review schematic/user manual.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..

Hi clive1,

Yes that i already done.

Anyways i was able to resolve the issue. I did the following things t o resolve the issue:-

  1. Connected SB 15 and 16 in order to use user USB CN11.
  2. Increased heap size to 0x1000.
  3. BOOT0 pin state = 0;
  4. Connected SB13 to use TCXO as a clock source.

Flavio Alves
Associate II

Hello,

I intend to add USB CDC feature on the current PING PONG project on my B-L072Z-LRWAN board.

First I did the solder bridges configurations presented on this thread.

Then, I created a simple STM32Cube project for this board, configuring USB CDC. It worked correctly. But it doesn't have the LoraWan stack and porting it to a Cube Project is not a simple task (I tried it, without success). But, I could see USB CDC working.

To add USB CDC on the PingPong project, I got the project from STM32L073Z_EVAL and added the features to PingPong project. But it is not working. My PC cannot recognize the USB port.

I set 0x1000 heap size at linker script.

Below my system clock configuration:

void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_PeriphCLKInitTypeDef  PeriphClkInitStruct = {0};
 
  /* Enable HSE Oscillator and Activate PLL with HSE as source */
  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSEState            = RCC_HSE_OFF;
  RCC_OscInitStruct.HSIState            = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLLMUL_6;
  RCC_OscInitStruct.PLL.PLLDIV          = RCC_PLLDIV_3;
 
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
 
  /*Select PLL 48 MHz output as USB clock source */
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
  PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL;
  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
 
  /* Set Voltage scale1 as MCU will run at 32MHz */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 
  /* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */
  while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};
 
  /* 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_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  {
    Error_Handler();
  }
}

Could you please advise me where am I doing wrong ... or how should I debug my implementation?]

Best regards,

Flavio

Kranthi Reddy
Associate II

Solder the connections SB16 and SB15, by default board comes with open line USB_DM and USB_DP. Once you short SB16 and SB15 you will find another virtual com port.