2024-09-12 06:20 AM - last edited on 2024-09-13 06:33 AM by Andrew Neil
Dear @KDJEM.1 ,
I have seen that in STM32CubeIDE Version: 1.16.0 this issue is solved if the "Generate peripheral inizialization as a pair of '.c/.h' files per peripheral" is NOT selected in the ".ioc". Otherwise, the problem keeps there and "HAL_PWREx_EnableVddUSB()" is not called.
Here, you can see the code if the option is NOT selected:
void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)
{
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
if(hpcd->Instance==USB_DRD_FS)
{
/* USER CODE BEGIN USB_DRD_FS_MspInit 0 */
/* USER CODE END USB_DRD_FS_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* Enable VDDUSB */
HAL_PWREx_EnableVddUSB();
/* Peripheral clock enable */
__HAL_RCC_USB_CLK_ENABLE();
/* USB_DRD_FS interrupt Init */
HAL_NVIC_SetPriority(USB_DRD_FS_IRQn, 6, 0);
HAL_NVIC_EnableIRQ(USB_DRD_FS_IRQn);
/* USER CODE BEGIN USB_DRD_FS_MspInit 1 */
/* USER CODE END USB_DRD_FS_MspInit 1 */
}
}
And here if the option is selected:
void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
{
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
if(pcdHandle->Instance==USB_DRD_FS)
{
/* USER CODE BEGIN USB_DRD_FS_MspInit 0 */
/* USER CODE END USB_DRD_FS_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* USB_DRD_FS clock enable */
__HAL_RCC_USB_CLK_ENABLE();
/* USB_DRD_FS interrupt Init */
HAL_NVIC_SetPriority(USB_DRD_FS_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USB_DRD_FS_IRQn);
/* USER CODE BEGIN USB_DRD_FS_MspInit 1 */
/* USER CODE END USB_DRD_FS_MspInit 1 */
}
}
As you can observe, in the second case, the function is missing.
Could you please check that?
In my case, the selected uC is STM32H563ZIT6.
Thank you and regards.
Egoitz.
2024-09-12 07:40 AM - edited 2024-09-12 07:44 AM
Hello @ego ,
This post is moved from Solved: Re: STM32H573 USBX CDC ACM(DEVICE) - STMicroelectronics Community.
Thank you for bringing this issue to our attention.
I confirm the issue HAL_PWREx_EnableVddUSB() function call is not generated at any source code in the project when generating code by choosing "Generate peripheral initialization as a pair of '.c/.h' files per peripheral"
I reported this issue internally.
Internal ticket number: 190972 (This is an internal tracking number and is not accessible or usable by customers).
Thank you.
Kaouthar
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2024-09-12 09:12 PM
Great, thank you Kaouthar!
Best regards.
2024-10-29 06:33 PM
After spending most of an evening pulling my hair out, unable to figure out why I couldn't get USB to work on the STM32H523, I eventually found this same issue.
Without
being called, the USB interrupt never fires, thus breaking USB entirely.
I'm posting primarily to get this into Google's index in case others have the same issue.