STM32L4xx_HAL_Driver  1.14.0
Initialization and de-initialization functions

Initialization and Configuration functions. More...

Modules

 HAL USB OTG HCD Callback ID enumeration definition
 HAL USB OTG HCD Callback ID enumeration definition.
 
 HAL USB OTG HCD Callback pointer definition
 HAL USB OTG HCD Callback pointer definition.
 

Functions

HAL_StatusTypeDef HAL_HCD_Init (HCD_HandleTypeDef *hhcd)
 Initialize the host driver. More...
 
HAL_StatusTypeDef HAL_HCD_DeInit (HCD_HandleTypeDef *hhcd)
 DeInitialize the host driver. More...
 
HAL_StatusTypeDef HAL_HCD_HC_Init (HCD_HandleTypeDef *hhcd, uint8_t ch_num, uint8_t epnum, uint8_t dev_address, uint8_t speed, uint8_t ep_type, uint16_t mps)
 Initialize a host channel. More...
 
HAL_StatusTypeDef HAL_HCD_HC_Halt (HCD_HandleTypeDef *hhcd, uint8_t ch_num)
 Halt a host channel. More...
 
void HAL_HCD_MspInit (HCD_HandleTypeDef *hhcd)
 Initialize the HCD MSP. More...
 
void HAL_HCD_MspDeInit (HCD_HandleTypeDef *hhcd)
 DeInitialize the HCD MSP. More...
 
HAL_StatusTypeDef HAL_HCD_RegisterCallback (HCD_HandleTypeDef *hhcd, HAL_HCD_CallbackIDTypeDef CallbackID, pHCD_CallbackTypeDef pCallback)
 Register a User USB HCD Callback To be used instead of the weak predefined callback. More...
 
HAL_StatusTypeDef HAL_HCD_UnRegisterCallback (HCD_HandleTypeDef *hhcd, HAL_HCD_CallbackIDTypeDef CallbackID)
 Unregister an USB HCD Callback USB HCD callabck is redirected to the weak predefined callback. More...
 
HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback (HCD_HandleTypeDef *hhcd, pHCD_HC_NotifyURBChangeCallbackTypeDef pCallback)
 Register USB HCD Host Channel Notify URB Change Callback To be used instead of the weak HAL_HCD_HC_NotifyURBChange_Callback() predefined callback. More...
 
HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback (HCD_HandleTypeDef *hhcd)
 UnRegister the USB HCD Host Channel Notify URB Change Callback USB HCD Host Channel Notify URB Change Callback is redirected to the weak HAL_HCD_HC_NotifyURBChange_Callback() predefined callback. More...
 

Detailed Description

Initialization and Configuration functions.

 ===============================================================================
          ##### Initialization and de-initialization functions #####
 ===============================================================================
    [..]  This section provides functions allowing to:

Function Documentation

◆ HAL_HCD_DeInit()

HAL_StatusTypeDef HAL_HCD_DeInit ( HCD_HandleTypeDef hhcd)

DeInitialize the host driver.

Parameters
hhcdHCD handle
Return values
HALstatus

Definition at line 261 of file stm32l4xx_hal_hcd.c.

262 {
263  /* Check the HCD handle allocation */
264  if (hhcd == NULL)
265  {
266  return HAL_ERROR;
267  }
268 
269  hhcd->State = HAL_HCD_STATE_BUSY;
270 
271 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U)
272  if (hhcd->MspDeInitCallback == NULL)
273  {
274  hhcd->MspDeInitCallback = HAL_HCD_MspDeInit; /* Legacy weak MspDeInit */
275  }
276 
277  /* DeInit the low level hardware */
278  hhcd->MspDeInitCallback(hhcd);
279 #else
280  /* DeInit the low level hardware: CLOCK, NVIC.*/
281  HAL_HCD_MspDeInit(hhcd);
282 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */
283 
284  __HAL_HCD_DISABLE(hhcd);
285 
286  hhcd->State = HAL_HCD_STATE_RESET;
287 
288  return HAL_OK;
289 }
void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd)
DeInitialize the HCD MSP.
return HAL_OK

◆ HAL_HCD_HC_Halt()

HAL_StatusTypeDef HAL_HCD_HC_Halt ( HCD_HandleTypeDef hhcd,
uint8_t  ch_num 
)

Halt a host channel.

Parameters
hhcdHCD handle
ch_numChannel number. This parameter can be a value from 1 to 15
Return values
HALstatus

Definition at line 245 of file stm32l4xx_hal_hcd.c.

246 {
247  HAL_StatusTypeDef status = HAL_OK;
248 
249  __HAL_LOCK(hhcd);
250  (void)USB_HC_Halt(hhcd->Instance, (uint8_t)ch_num);
251  __HAL_UNLOCK(hhcd);
252 
253  return status;
254 }
__HAL_UNLOCK(hrtc)
__HAL_LOCK(hrtc)
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num)
Halt a host channel.
return HAL_OK

◆ HAL_HCD_HC_Init()

HAL_StatusTypeDef HAL_HCD_HC_Init ( HCD_HandleTypeDef hhcd,
uint8_t  ch_num,
uint8_t  epnum,
uint8_t  dev_address,
uint8_t  speed,
uint8_t  ep_type,
uint16_t  mps 
)

Initialize a host channel.

Parameters
hhcdHCD handle
ch_numChannel number. This parameter can be a value from 1 to 15
epnumEndpoint number. This parameter can be a value from 1 to 15
dev_addressCurrent device address This parameter can be a value from 0 to 255
speedCurrent device speed. This parameter can be one of these values: HCD_SPEED_FULL: Full speed mode, HCD_SPEED_LOW: Low speed mode
ep_typeEndpoint Type. This parameter can be one of these values: EP_TYPE_CTRL: Control type, EP_TYPE_ISOC: Isochronous type, EP_TYPE_BULK: Bulk type, EP_TYPE_INTR: Interrupt type
mpsMax Packet Size. This parameter can be a value from 0 to32K
Return values
HALstatus

Definition at line 197 of file stm32l4xx_hal_hcd.c.

204 {
205  HAL_StatusTypeDef status;
206 
207  __HAL_LOCK(hhcd);
208  hhcd->hc[ch_num].do_ping = 0U;
209  hhcd->hc[ch_num].dev_addr = dev_address;
210  hhcd->hc[ch_num].max_packet = mps;
211  hhcd->hc[ch_num].ch_num = ch_num;
212  hhcd->hc[ch_num].ep_type = ep_type;
213  hhcd->hc[ch_num].ep_num = epnum & 0x7FU;
214 
215  if ((epnum & 0x80U) == 0x80U)
216  {
217  hhcd->hc[ch_num].ep_is_in = 1U;
218  }
219  else
220  {
221  hhcd->hc[ch_num].ep_is_in = 0U;
222  }
223 
224  hhcd->hc[ch_num].speed = speed;
225 
226  status = USB_HC_Init(hhcd->Instance,
227  ch_num,
228  epnum,
229  dev_address,
230  speed,
231  ep_type,
232  mps);
233  __HAL_UNLOCK(hhcd);
234 
235  return status;
236 }
HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num, uint8_t epnum, uint8_t dev_address, uint8_t speed, uint8_t ep_type, uint16_t mps)
Initialize a host channel.
__HAL_UNLOCK(hrtc)
__HAL_LOCK(hrtc)

◆ HAL_HCD_Init()

HAL_StatusTypeDef HAL_HCD_Init ( HCD_HandleTypeDef hhcd)

Initialize the host driver.

Parameters
hhcdHCD handle
Return values
HALstatus

Definition at line 108 of file stm32l4xx_hal_hcd.c.

109 {
110  USB_OTG_GlobalTypeDef *USBx;
111 
112  /* Check the HCD handle allocation */
113  if (hhcd == NULL)
114  {
115  return HAL_ERROR;
116  }
117 
118  /* Check the parameters */
119  assert_param(IS_HCD_ALL_INSTANCE(hhcd->Instance));
120 
121  USBx = hhcd->Instance;
122 
123  if (hhcd->State == HAL_HCD_STATE_RESET)
124  {
125  /* Allocate lock resource and initialize it */
126  hhcd->Lock = HAL_UNLOCKED;
127 
128 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U)
129  hhcd->SOFCallback = HAL_HCD_SOF_Callback;
130  hhcd->ConnectCallback = HAL_HCD_Connect_Callback;
131  hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback;
132  hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback;
133  hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback;
134  hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback;
135 
136  if (hhcd->MspInitCallback == NULL)
137  {
138  hhcd->MspInitCallback = HAL_HCD_MspInit;
139  }
140 
141  /* Init the low level hardware */
142  hhcd->MspInitCallback(hhcd);
143 #else
144  /* Init the low level hardware : GPIO, CLOCK, NVIC... */
145  HAL_HCD_MspInit(hhcd);
146 #endif /* (USE_HAL_HCD_REGISTER_CALLBACKS) */
147  }
148 
149  hhcd->State = HAL_HCD_STATE_BUSY;
150 
151  /* Disable DMA mode for FS instance */
152  if ((USBx->CID & (0x1U << 8)) == 0U)
153  {
154  hhcd->Init.dma_enable = 0U;
155  }
156 
157  /* Disable the Interrupts */
158  __HAL_HCD_DISABLE(hhcd);
159 
160  /* Init the Core (common init.) */
161  (void)USB_CoreInit(hhcd->Instance, hhcd->Init);
162 
163  /* Force Host Mode*/
164  (void)USB_SetCurrentMode(hhcd->Instance, USB_HOST_MODE);
165 
166  /* Init Host */
167  (void)USB_HostInit(hhcd->Instance, hhcd->Init);
168 
169  hhcd->State = HAL_HCD_STATE_READY;
170 
171  return HAL_OK;
172 }
void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd)
Port Disabled Event callback.
void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd)
Disconnection Event callback.
void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, HCD_URBStateTypeDef urb_state)
Notify URB state change callback.
return HAL_OK
HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
Initializes the USB Core.
void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd)
Port Enabled Event callback.
void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd)
Initialize the HCD MSP.
void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd)
Connection Event callback.
void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd)
SOF callback.
HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_ModeTypeDef mode)
USB_SetCurrentMode : Set functional mode.
HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg)
USB_HostInit : Initializes the USB OTG controller registers for Host mode.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ HAL_HCD_MspDeInit()

__weak void HAL_HCD_MspDeInit ( HCD_HandleTypeDef hhcd)

DeInitialize the HCD MSP.

Parameters
hhcdHCD handle
Return values
None

Definition at line 311 of file stm32l4xx_hal_hcd.c.

312 {
313  /* Prevent unused argument(s) compilation warning */
314  UNUSED(hhcd);
315 
316  /* NOTE : This function should not be modified, when the callback is needed,
317  the HAL_HCD_MspDeInit could be implemented in the user file
318  */
319 }

◆ HAL_HCD_MspInit()

__weak void HAL_HCD_MspInit ( HCD_HandleTypeDef hhcd)

Initialize the HCD MSP.

Parameters
hhcdHCD handle
Return values
None

Definition at line 296 of file stm32l4xx_hal_hcd.c.

297 {
298  /* Prevent unused argument(s) compilation warning */
299  UNUSED(hhcd);
300 
301  /* NOTE : This function should not be modified, when the callback is needed,
302  the HAL_HCD_MspInit could be implemented in the user file
303  */
304 }

◆ HAL_HCD_RegisterCallback()

HAL_StatusTypeDef HAL_HCD_RegisterCallback ( HCD_HandleTypeDef hhcd,
HAL_HCD_CallbackIDTypeDef  CallbackID,
pHCD_CallbackTypeDef  pCallback 
)

Register a User USB HCD Callback To be used instead of the weak predefined callback.

Parameters
hhcdUSB HCD handle
CallbackIDID of the callback to be registered This parameter can be one of the following values:
pCallbackpointer to the Callback function
Return values
HALstatus

Definition at line 719 of file stm32l4xx_hal_hcd.c.

720 {
721  HAL_StatusTypeDef status = HAL_OK;
722 
723  if (pCallback == NULL)
724  {
725  /* Update the error code */
726  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
727  return HAL_ERROR;
728  }
729  /* Process locked */
730  __HAL_LOCK(hhcd);
731 
732  if (hhcd->State == HAL_HCD_STATE_READY)
733  {
734  switch (CallbackID)
735  {
736  case HAL_HCD_SOF_CB_ID :
737  hhcd->SOFCallback = pCallback;
738  break;
739 
740  case HAL_HCD_CONNECT_CB_ID :
741  hhcd->ConnectCallback = pCallback;
742  break;
743 
745  hhcd->DisconnectCallback = pCallback;
746  break;
747 
749  hhcd->PortEnabledCallback = pCallback;
750  break;
751 
753  hhcd->PortDisabledCallback = pCallback;
754  break;
755 
756  case HAL_HCD_MSPINIT_CB_ID :
757  hhcd->MspInitCallback = pCallback;
758  break;
759 
761  hhcd->MspDeInitCallback = pCallback;
762  break;
763 
764  default :
765  /* Update the error code */
766  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
767  /* Return error status */
768  status = HAL_ERROR;
769  break;
770  }
771  }
772  else if (hhcd->State == HAL_HCD_STATE_RESET)
773  {
774  switch (CallbackID)
775  {
776  case HAL_HCD_MSPINIT_CB_ID :
777  hhcd->MspInitCallback = pCallback;
778  break;
779 
781  hhcd->MspDeInitCallback = pCallback;
782  break;
783 
784  default :
785  /* Update the error code */
786  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
787  /* Return error status */
788  status = HAL_ERROR;
789  break;
790  }
791  }
792  else
793  {
794  /* Update the error code */
795  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
796  /* Return error status */
797  status = HAL_ERROR;
798  }
799 
800  /* Release Lock */
801  __HAL_UNLOCK(hhcd);
802  return status;
803 }
__HAL_UNLOCK(hrtc)
__HAL_LOCK(hrtc)
return HAL_OK

◆ HAL_HCD_RegisterHC_NotifyURBChangeCallback()

HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback ( HCD_HandleTypeDef hhcd,
pHCD_HC_NotifyURBChangeCallbackTypeDef  pCallback 
)

Register USB HCD Host Channel Notify URB Change Callback To be used instead of the weak HAL_HCD_HC_NotifyURBChange_Callback() predefined callback.

Parameters
hhcdHCD handle
pCallbackpointer to the USB HCD Host Channel Notify URB Change Callback function
Return values
HALstatus

Definition at line 911 of file stm32l4xx_hal_hcd.c.

912 {
913  HAL_StatusTypeDef status = HAL_OK;
914 
915  if (pCallback == NULL)
916  {
917  /* Update the error code */
918  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
919 
920  return HAL_ERROR;
921  }
922 
923  /* Process locked */
924  __HAL_LOCK(hhcd);
925 
926  if (hhcd->State == HAL_HCD_STATE_READY)
927  {
928  hhcd->HC_NotifyURBChangeCallback = pCallback;
929  }
930  else
931  {
932  /* Update the error code */
933  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
934 
935  /* Return error status */
936  status = HAL_ERROR;
937  }
938 
939  /* Release Lock */
940  __HAL_UNLOCK(hhcd);
941 
942  return status;
943 }
__HAL_UNLOCK(hrtc)
__HAL_LOCK(hrtc)
return HAL_OK

◆ HAL_HCD_UnRegisterCallback()

HAL_StatusTypeDef HAL_HCD_UnRegisterCallback ( HCD_HandleTypeDef hhcd,
HAL_HCD_CallbackIDTypeDef  CallbackID 
)

Unregister an USB HCD Callback USB HCD callabck is redirected to the weak predefined callback.

Parameters
hhcdUSB HCD handle
CallbackIDID of the callback to be unregistered This parameter can be one of the following values:
Return values
HALstatus

Definition at line 820 of file stm32l4xx_hal_hcd.c.

821 {
822  HAL_StatusTypeDef status = HAL_OK;
823 
824  /* Process locked */
825  __HAL_LOCK(hhcd);
826 
827  /* Setup Legacy weak Callbacks */
828  if (hhcd->State == HAL_HCD_STATE_READY)
829  {
830  switch (CallbackID)
831  {
832  case HAL_HCD_SOF_CB_ID :
833  hhcd->SOFCallback = HAL_HCD_SOF_Callback;
834  break;
835 
836  case HAL_HCD_CONNECT_CB_ID :
837  hhcd->ConnectCallback = HAL_HCD_Connect_Callback;
838  break;
839 
841  hhcd->DisconnectCallback = HAL_HCD_Disconnect_Callback;
842  break;
843 
845  hhcd->PortEnabledCallback = HAL_HCD_PortEnabled_Callback;
846  break;
847 
849  hhcd->PortDisabledCallback = HAL_HCD_PortDisabled_Callback;
850  break;
851 
852  case HAL_HCD_MSPINIT_CB_ID :
853  hhcd->MspInitCallback = HAL_HCD_MspInit;
854  break;
855 
857  hhcd->MspDeInitCallback = HAL_HCD_MspDeInit;
858  break;
859 
860  default :
861  /* Update the error code */
862  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
863 
864  /* Return error status */
865  status = HAL_ERROR;
866  break;
867  }
868  }
869  else if (hhcd->State == HAL_HCD_STATE_RESET)
870  {
871  switch (CallbackID)
872  {
873  case HAL_HCD_MSPINIT_CB_ID :
874  hhcd->MspInitCallback = HAL_HCD_MspInit;
875  break;
876 
878  hhcd->MspDeInitCallback = HAL_HCD_MspDeInit;
879  break;
880 
881  default :
882  /* Update the error code */
883  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
884 
885  /* Return error status */
886  status = HAL_ERROR;
887  break;
888  }
889  }
890  else
891  {
892  /* Update the error code */
893  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
894 
895  /* Return error status */
896  status = HAL_ERROR;
897  }
898 
899  /* Release Lock */
900  __HAL_UNLOCK(hhcd);
901  return status;
902 }
void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd)
Port Disabled Event callback.
void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd)
DeInitialize the HCD MSP.
__HAL_UNLOCK(hrtc)
void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd)
Disconnection Event callback.
__HAL_LOCK(hrtc)
return HAL_OK
void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd)
Port Enabled Event callback.
void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd)
Initialize the HCD MSP.
void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd)
Connection Event callback.
void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd)
SOF callback.

◆ HAL_HCD_UnRegisterHC_NotifyURBChangeCallback()

HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback ( HCD_HandleTypeDef hhcd)

UnRegister the USB HCD Host Channel Notify URB Change Callback USB HCD Host Channel Notify URB Change Callback is redirected to the weak HAL_HCD_HC_NotifyURBChange_Callback() predefined callback.

Parameters
hhcdHCD handle
Return values
HALstatus

Definition at line 951 of file stm32l4xx_hal_hcd.c.

952 {
953  HAL_StatusTypeDef status = HAL_OK;
954 
955  /* Process locked */
956  __HAL_LOCK(hhcd);
957 
958  if (hhcd->State == HAL_HCD_STATE_READY)
959  {
960  hhcd->HC_NotifyURBChangeCallback = HAL_HCD_HC_NotifyURBChange_Callback; /* Legacy weak DataOutStageCallback */
961  }
962  else
963  {
964  /* Update the error code */
965  hhcd->ErrorCode |= HAL_HCD_ERROR_INVALID_CALLBACK;
966 
967  /* Return error status */
968  status = HAL_ERROR;
969  }
970 
971  /* Release Lock */
972  __HAL_UNLOCK(hhcd);
973 
974  return status;
975 }
__HAL_UNLOCK(hrtc)
__HAL_LOCK(hrtc)
void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, HCD_URBStateTypeDef urb_state)
Notify URB state change callback.
return HAL_OK