Skip to content
STMicroelectronics Logo
Type to start searching
  • Table Of Contents
  • STM32 HAL/LL Drivers Documentation
  • Drivers Overview
  • STM32U5 HAL/LL Drivers Documentation
    • STM32U5 Drivers Overview
    • HAL Drivers
      • HAL Common Drivers
      • HAL ADC
      • HAL ADF
      • HAL AES
      • HAL COMP
      • HAL CORDIC
      • HAL CORTEX
      • HAL CRC
      • HAL CRS
      • HAL DAC
      • HAL DBGMCU
      • HAL DCACHE
      • HAL DCMI
      • HAL DMA2D
      • HAL DMA
      • HAL DSI
      • HAL EXTI
      • HAL FDCAN
      • HAL FLASH
      • HAL FMAC
      • HAL GFXMMU
      • HAL GFXTIM
      • HAL GPIO
      • HAL GPU2D
      • HAL GTZC
      • HAL HASH
      • HAL HCD
        • HAL HCD Overview
        • HAL HCD How to Use
        • HAL HCD Use Cases
          • HAL HCD Use Cases
            • Prerequisite
            • initialization sequence
        • HAL HCD APIs
      • HAL I2C
      • HAL ICACHE
      • HAL IWDG
      • HAL JPEG
      • HAL LPTIM
      • HAL LTDC
      • HAL MDF
      • HAL MMC
      • HAL NOR
      • HAL OPAMP
      • HAL PCD
      • HAL PKA
      • HAL PSSI
      • HAL PWR
      • HAL Q
      • HAL RAMCFG
      • HAL RCC
      • HAL RNG
      • HAL RTC
      • HAL SAI
      • HAL SD
      • HAL SDIO
      • HAL SMARTCARD
      • HAL SMBUS
      • HAL SPI
      • HAL SRAM
      • HAL SYSCFG
      • HAL TAMP
      • HAL TIM
      • HAL UART
      • HAL UCPD
      • HAL USART
      • HAL VREFBUF
      • HAL WWDG
      • HAL XSPI
    • LL Drivers
  • HAL HCD Use Cases
    • Prerequisite
    • initialization sequence

HAL HCD Use Cases ¶

Prerequisite ¶

This diagram illustrates the prerequisite steps for initializing the system

@startuml

==Prerequisite==

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as part1

participant "Driver HCD" as part2

Participant "USB OTG Core" as part4

Participant "USB DRD Core" as part5

participant "System" as part3



part1->part3 : HAL_Init()

part3 --> part1

part1->part3 : Configure system clock



part3 --> part1

part1->part3 : Configure GPIO, NVIC



@enduml

Called functions:

  • HAL_HCD_Init()

initialization sequence ¶

@startuml



participant App as "User application"

participant "<font color=green><b>HAL HCD Driver</b></font>" as HCD

participant "USB DRD CORE" as DRD

participant "USB OTG CORE " as OTG

participant "HCD_IRQHandler " as IRQ



== Initialization  ==

App -> HCD : HAL_HCD_Init

alt#grey #lightgrey If (instance == HAL_ HCD_OTG_FS) or (instance ==HAL_HCD_OTG_HS)

HCD->OTG : USB_OTG_HCD_InitDriver

OTG-->HCD

end

alt#grey #lightgrey If (instance == HAL_HCD_DRD_FS)

HCD->DRD : USB_DRD_HCD_InitDriver

DRD-->HCD

end

App <-- HCD : HAL_OK or HAL_INVALID_PARAM

== Configuration==

App -> HCD : HAL_HCD_SetConfig

alt#grey #lightgrey If (instance == HAL_ HCD_OTG_FS) or (instance ==HAL_HCD_OTG_HS)

HCD->OTG : USB_OTG_DisableGlobalInterrupt

OTG-->HCD

end

alt#grey #lightgrey If (instance == HAL_HCD_DRD_FS)

HCD->DRD : USB_DRD_DisableGlobalInterrupt

DRD-->HCD

end

alt#grey #lightgrey If (instance == HAL_ HCD_OTG_FS) or (instance ==HAL_HCD_OTG_HS)

HCD->OTG : USB_OTG_InitCore

OTG-->HCD

end

alt#grey #lightgrey If (instance == HAL_HCD_DRD_FS)

HCD->DRD : USB_DRD_InitCore

DRD-->HCD

end

alt#grey #lightgrey If (instance == HAL_ HCD_OTG_FS) or (instance ==HAL_HCD_OTG_HS)

HCD->OTG : USB_OTG_SetCurrentMode

OTG-->HCD

end

alt#grey #lightgrey If (instance == HAL_HCD_DRD_FS)

HCD->DRD : USB_DRD_SetCurrentMode

DRD-->HCD

end

alt#grey #lightgrey If (instance == HAL_ HCD_OTG_FS) or (instance ==HAL_HCD_OTG_HS)

HCD->OTG : USB_OTG_InitHost

OTG-->HCD

end

alt#grey #lightgrey If (instance == HAL_HCD_DRD_FS)

HCD->DRD : USB_DRD_InitHost

DRD-->HCD

end

App <--  HCD :HAL_OK or HAL_ERROR

== Process==

App ->  HCD : HAL_HCD_Start

alt#grey #lightgrey If (instance == HAL_ HCD_OTG_FS) or (instance ==HAL_HCD_OTG_HS)

HCD->OTG : USB_OTG_StartHost

OTG-->HCD

end

alt#grey #lightgrey If (instance == HAL_HCD_DRD_FS)

HCD->DRD : USB_DRD_StartHost

DRD-->HCD

end

 HCD -->App : HAL_OK or HAL_INVALID_PARAM



@enduml

Called functions:

  • HAL_HCD_Init()

  • HAL_HCD_SetConfig()

  • HAL_HCD_Start()

© Copyright 2025, STMicroelectronics.