Skip to main content
Visitor II
December 3, 2022
Question

Seeing an issue with USB interrupts on STM32H742 only on Endpoint 1 USB Enumeration works fine. I am seeing HAL_PCD_DataOutStageCallback for endpoint 0 but not HAL_PCD_DataOutStageCallback for endpoint 1. Any ideas what I might be missing?

  • December 3, 2022
  • 0 replies
  • 590 views

Initialization sequence:

hpcd_USB_OTG_FS.Instance = USB_OTG_FS;
 hpcd_USB_OTG_FS.Init.dev_endpoints = 9;
 hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL;
 hpcd_USB_OTG_FS.Init.dma_enable = DISABLE;
 hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
 hpcd_USB_OTG_FS.Init.Sof_enable = DISABLE;
 hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE;
 hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE;
 hpcd_USB_OTG_FS.Init.battery_charging_enable = DISABLE;
 hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE;
 hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE;
 if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK)
 {
 Error_Handler();
 }

HAL_Pcd_MSp_INIT():

PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
 PeriphClkInitStruct.PLL3.PLL3M = 16;
 PeriphClkInitStruct.PLL3.PLL3N = 192;
 PeriphClkInitStruct.PLL3.PLL3P = 4;
 PeriphClkInitStruct.PLL3.PLL3Q = 4;
 PeriphClkInitStruct.PLL3.PLL3R = 4;
 PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_0;
 PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
 PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3;
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 HAL_PWREx_EnableUSBVoltageDetector();
 
 __HAL_RCC_GPIOA_CLK_ENABLE();
 /**USB_OTG_FS GPIO Configuration
 PA12 ------> USB_OTG_FS_DP
 PA11 ------> USB_OTG_FS_DM
 */
 GPIO_InitStruct.Pin = USB_P_Pin | USB_N_Pin;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
 GPIO_InitStruct.Alternate = GPIO_AF10_OTG1_FS;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 /* USB_OTG_FS clock enable */
 __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
 
 __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE();
 
 /* USB_OTG_FS interrupt Init */
 HAL_NVIC_SetPriority(OTG_FS_EP1_OUT_IRQn, 5, 0);
 HAL_NVIC_EnableIRQ(OTG_FS_EP1_OUT_IRQn);
 HAL_NVIC_SetPriority(OTG_FS_EP1_IN_IRQn, 5, 0);
 HAL_NVIC_EnableIRQ(OTG_FS_EP1_IN_IRQn);
 HAL_NVIC_SetPriority(OTG_FS_IRQn, 5, 0);
 HAL_NVIC_EnableIRQ(OTG_FS_IRQn);

FIFO Settings:

status = HAL_PCDEx_SetRxFiFo(hpcd_, 0x200);
 
status = HAL_PCDEx_SetTxFiFo(hpcd_, 0, 0x40);
 
status = HAL_PCDEx_SetTxFiFo(hpcd_, 1, 0x40);

I have setup a receive using

HAL_PCD_EP_Receive(hpcd_, 1, 0x40);

 I have verified on USB analyzer that the host is sending some 20 bytes on EP 1

    This topic has been closed for replies.