1 /** 2 ****************************************************************************** 3 * @file stm32l5xx_ll_usb.h 4 * @author MCD Application Team 5 * @brief Header file of USB Low Layer HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2019 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32L5xx_LL_USB_H 21 #define STM32L5xx_LL_USB_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif /* __cplusplus */ 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32l5xx_hal_def.h" 29 30 #if defined (USB) 31 /** @addtogroup STM32L5xx_HAL_Driver 32 * @{ 33 */ 34 35 /** @addtogroup USB_LL 36 * @{ 37 */ 38 39 /* Exported types ------------------------------------------------------------*/ 40 41 /** 42 * @brief USB Mode definition 43 */ 44 45 typedef enum 46 { 47 USB_DEVICE_MODE = 0 48 } USB_ModeTypeDef; 49 50 51 /** 52 * @brief USB Instance Initialization Structure definition 53 */ 54 typedef struct 55 { 56 uint32_t dev_endpoints; /*!< Device Endpoints number. 57 This parameter depends on the used USB core. 58 This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ 59 60 uint32_t speed; /*!< USB Core speed. 61 This parameter can be any value of @ref PCD_Speed/HCD_Speed 62 (HCD_SPEED_xxx, HCD_SPEED_xxx) */ 63 64 uint32_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size. */ 65 66 uint32_t phy_itface; /*!< Select the used PHY interface. 67 This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module */ 68 69 uint32_t Sof_enable; /*!< Enable or disable the output of the SOF signal. */ 70 71 uint32_t low_power_enable; /*!< Enable or disable the low Power Mode. */ 72 73 uint32_t lpm_enable; /*!< Enable or disable Link Power Management. */ 74 75 uint32_t battery_charging_enable; /*!< Enable or disable Battery charging. */ 76 } USB_CfgTypeDef; 77 78 typedef struct 79 { 80 uint8_t num; /*!< Endpoint number 81 This parameter must be a number between Min_Data = 1 and Max_Data = 15 */ 82 83 uint8_t is_in; /*!< Endpoint direction 84 This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ 85 86 uint8_t is_stall; /*!< Endpoint stall condition 87 This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ 88 89 uint8_t type; /*!< Endpoint type 90 This parameter can be any value of @ref USB_LL_EP_Type */ 91 92 uint8_t data_pid_start; /*!< Initial data PID 93 This parameter must be a number between Min_Data = 0 and Max_Data = 1 */ 94 95 96 uint16_t pmaadress; /*!< PMA Address 97 This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ 98 99 uint16_t pmaaddr0; /*!< PMA Address0 100 This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ 101 102 uint16_t pmaaddr1; /*!< PMA Address1 103 This parameter can be any value between Min_addr = 0 and Max_addr = 1K */ 104 105 uint8_t doublebuffer; /*!< Double buffer enable 106 This parameter can be 0 or 1 */ 107 108 109 uint32_t maxpacket; /*!< Endpoint Max packet size 110 This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */ 111 112 uint8_t *xfer_buff; /*!< Pointer to transfer buffer */ 113 114 uint32_t xfer_len; /*!< Current transfer length */ 115 116 uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */ 117 118 uint32_t xfer_len_db; /*!< double buffer transfer length used with bulk double buffer in */ 119 120 uint8_t xfer_fill_db; /*!< double buffer Need to Fill new buffer used with bulk_in */ 121 } USB_EPTypeDef; 122 123 /* Exported constants --------------------------------------------------------*/ 124 125 /** @defgroup PCD_Exported_Constants PCD Exported Constants 126 * @{ 127 */ 128 /** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS 129 * @{ 130 */ 131 #define EP_MPS_64 0U 132 #define EP_MPS_32 1U 133 #define EP_MPS_16 2U 134 #define EP_MPS_8 3U 135 /** 136 * @} 137 */ 138 139 /** @defgroup USB_LL_EP_Type USB Low Layer EP Type 140 * @{ 141 */ 142 #define EP_TYPE_CTRL 0U 143 #define EP_TYPE_ISOC 1U 144 #define EP_TYPE_BULK 2U 145 #define EP_TYPE_INTR 3U 146 #define EP_TYPE_MSK 3U 147 /** 148 * @} 149 */ 150 151 /** @defgroup USB_LL Device Speed 152 * @{ 153 */ 154 #define USBD_FS_SPEED 2U 155 /** 156 * @} 157 */ 158 159 160 #define BTABLE_ADDRESS 0x000U 161 #define PMA_ACCESS 1U 162 163 #ifndef USB_EP_RX_STRX 164 #define USB_EP_RX_STRX (0x3U << 12) 165 #endif /* USB_EP_RX_STRX */ 166 167 #define EP_ADDR_MSK 0x7U 168 169 #ifndef USE_USB_DOUBLE_BUFFER 170 #define USE_USB_DOUBLE_BUFFER 1U 171 #endif /* USE_USB_DOUBLE_BUFFER */ 172 173 174 /** 175 * @} 176 */ 177 178 /* Exported macro ------------------------------------------------------------*/ 179 /** 180 * @} 181 */ 182 183 /* Exported functions --------------------------------------------------------*/ 184 /** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions 185 * @{ 186 */ 187 188 189 HAL_StatusTypeDef USB_CoreInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg); 190 HAL_StatusTypeDef USB_DevInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg); 191 HAL_StatusTypeDef USB_EnableGlobalInt(USB_TypeDef *USBx); 192 HAL_StatusTypeDef USB_DisableGlobalInt(USB_TypeDef *USBx); 193 HAL_StatusTypeDef USB_SetCurrentMode(USB_TypeDef *USBx, USB_ModeTypeDef mode); 194 195 #if defined (HAL_PCD_MODULE_ENABLED) 196 HAL_StatusTypeDef USB_ActivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep); 197 HAL_StatusTypeDef USB_DeactivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep); 198 HAL_StatusTypeDef USB_EPStartXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep); 199 HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx, USB_EPTypeDef *ep); 200 HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx, USB_EPTypeDef *ep); 201 HAL_StatusTypeDef USB_EPStopXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep); 202 #endif /* defined (HAL_PCD_MODULE_ENABLED) */ 203 204 HAL_StatusTypeDef USB_SetDevAddress(USB_TypeDef *USBx, uint8_t address); 205 HAL_StatusTypeDef USB_DevConnect(USB_TypeDef *USBx); 206 HAL_StatusTypeDef USB_DevDisconnect(USB_TypeDef *USBx); 207 HAL_StatusTypeDef USB_StopDevice(USB_TypeDef *USBx); 208 uint32_t USB_ReadInterrupts(USB_TypeDef *USBx); 209 HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_TypeDef *USBx); 210 HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_TypeDef *USBx); 211 212 void USB_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, 213 uint16_t wPMABufAddr, uint16_t wNBytes); 214 215 void USB_ReadPMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, 216 uint16_t wPMABufAddr, uint16_t wNBytes); 217 218 /** 219 * @} 220 */ 221 222 /** 223 * @} 224 */ 225 226 /** 227 * @} 228 */ 229 230 /** 231 * @} 232 */ 233 #endif /* defined (USB) */ 234 235 #ifdef __cplusplus 236 } 237 #endif /* __cplusplus */ 238 239 240 #endif /* STM32L5xx_LL_USB_H */ 241