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 I2C
      • HAL ICACHE
      • HAL IWDG
      • HAL JPEG
      • HAL LPTIM
      • HAL LTDC
      • HAL MDF
      • HAL MMC
      • HAL NOR
      • HAL OPAMP
      • HAL PCD
        • HAL PCD Overview
        • HAL PCD How to Use
        • HAL PCD Use Cases
          • HAL PCD Use Cases
            • prerequisite
            • initialization_seq
        • HAL PCD APIs
      • 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 PCD Use Cases
    • prerequisite
    • initialization_seq

HAL PCD Use Cases ¶

prerequisite ¶

@startuml

==Prerequisite==

' To add a number by line

'autonumber



' Fix order of each column

participant "User Application" as part1

participant "Driver PCD" 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

Functions called:

  • HAL_Init()

initialization_seq ¶

@startuml



participant App as "User application"

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

participant "USB DRD CORE" as DRD

participant "USB OTG CORE " as OTG

participant "PCD_IRQHandler " as IRQ



== Initialization  ==

App -> PCD : HAL_PCD_Init

alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_PCD_InitDriver

OTG-->PCD

end

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

PCD->DRD : USB_DRD_PCD_InitDriver

DRD-->PCD

end

App <-- PCD : HAL_OK or HAL_INVALID_PARAM



== Configuration==

App -> PCD : HAL_PCD_SetConfig



alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_DisableGlobalInterrupt

OTG-->PCD

end

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

PCD->DRD : USB_DRD_DisableGlobalInterrupt

DRD-->PCD

end



alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_InitCore

OTG-->PCD

end

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

PCD->DRD : USB_DRD_InitCore

DRD-->PCD

end



alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_SetCurrentMode

OTG-->PCD

end

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

PCD->DRD : USB_DRD_SetCurrentMode

DRD-->PCD

end



alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_InitDevice

OTG-->PCD

end

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

PCD->DRD : USB_DRD_InitDevice

DRD-->PCD

end



alt#grey #lightgrey if (p_config->lpm_enable == 1U):

PCD->OTG : If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)\n USB_OTG_LPM_Activate

OTG-->PCD

PCD->DRD : If (instance == HAL_PCD_DRD_FS) \n USB_DRD_LPM_Activate

DRD-->PCD

end

alt#grey #lightgrey if (p_config->battery_charging_enable == 1U): hpcd->driver.bcd_activate

PCD->OTG : If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS) \n USB_OTG_BCD_Activate

OTG-->PCD

PCD->DRD : If (instance == HAL_PCD_DRD_FS) \n USB_DRD_BCD_Activate

DRD-->PCD

end



alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_DisconnectDevice

OTG-->PCD

end

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

PCD->DRD : USB_DRD_DisconnectDevice

DRD-->PCD

end



App <-- PCD :HAL_OK or HAL_ERROR

== Process==

App -> PCD : HAL_PCD_Start



alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_EnableGlobalInterrupt

OTG-->PCD

end

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

PCD->DRD : USB_DRD_EnableGlobalInterrupt

DRD-->PCD

end



alt#grey #lightgrey If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

PCD->OTG : USB_OTG_ConnectDevice

OTG-->PCD

end

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

PCD->DRD : USB_DRD_ConnectDevice

DRD-->PCD

end





IRQ ->PCD : HAL_PCD_IRQHandler

alt#grey #lightgrey HAL_PCD_DRD_IRQHandler

PCD->DRD : If (instance == HAL_PCD_DRD_FS)

end

alt#grey #lightgrey HAL_PCD_OTG_IRQHandler

PCD->OTG : If (instance == HAL_PCD_OTG_FS) or (instance ==HAL_PCD_OTG_HS)

end

PCD -->App : HAL_OK or HAL_INVALID_PARAM



@enduml

Functions called:

  • HAL_PCD_Init()

  • HAL_PCD_SetConfig()

  • HAL_PCD_Start()

  • HAL_PCD_IRQHandler()

© Copyright 2025, STMicroelectronics.