1 /** 2 ****************************************************************************** 3 * @file stm32f7xx_hal_pcd.h 4 * @author MCD Application Team 5 * @version V1.0.1 6 * @date 25-June-2015 7 * @brief Header file of PCD HAL module. 8 ****************************************************************************** 9 * @attention 10 * 11 * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> 12 * 13 * Redistribution and use in source and binary forms, with or without modification, 14 * are permitted provided that the following conditions are met: 15 * 1. Redistributions of source code must retain the above copyright notice, 16 * this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright notice, 18 * this list of conditions and the following disclaimer in the documentation 19 * and/or other materials provided with the distribution. 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 * 35 ****************************************************************************** 36 */ 37 38 /* Define to prevent recursive inclusion -------------------------------------*/ 39 #ifndef __STM32F7xx_HAL_PCD_H 40 #define __STM32F7xx_HAL_PCD_H 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /* Includes ------------------------------------------------------------------*/ 47 #include "stm32f7xx_ll_usb.h" 48 49 /** @addtogroup STM32F7xx_HAL_Driver 50 * @{ 51 */ 52 53 /** @addtogroup PCD 54 * @{ 55 */ 56 57 /* Exported types ------------------------------------------------------------*/ 58 /** @defgroup PCD_Exported_Types PCD Exported Types 59 * @{ 60 */ 61 62 /** 63 * @brief PCD State structure definition 64 */ 65 typedef enum { 66 HAL_PCD_STATE_RESET = 0x00, 67 HAL_PCD_STATE_READY = 0x01, 68 HAL_PCD_STATE_ERROR = 0x02, 69 HAL_PCD_STATE_BUSY = 0x03, 70 HAL_PCD_STATE_TIMEOUT = 0x04 71 } PCD_StateTypeDef; 72 73 /* Device LPM suspend state */ 74 typedef enum { 75 LPM_L0 = 0x00, /* on */ 76 LPM_L1 = 0x01, /* LPM L1 sleep */ 77 LPM_L2 = 0x02, /* suspend */ 78 LPM_L3 = 0x03, /* off */ 79 } PCD_LPM_StateTypeDef; 80 81 typedef USB_OTG_GlobalTypeDef PCD_TypeDef; 82 typedef USB_OTG_CfgTypeDef PCD_InitTypeDef; 83 typedef USB_OTG_EPTypeDef PCD_EPTypeDef ; 84 85 /** 86 * @brief PCD Handle Structure definition 87 */ 88 typedef struct { 89 PCD_TypeDef *Instance; /*!< Register base address */ 90 PCD_InitTypeDef Init; /*!< PCD required parameters */ 91 PCD_EPTypeDef IN_ep[15]; /*!< IN endpoint parameters */ 92 PCD_EPTypeDef OUT_ep[15]; /*!< OUT endpoint parameters */ 93 HAL_LockTypeDef Lock; /*!< PCD peripheral status */ 94 __IO PCD_StateTypeDef State; /*!< PCD communication state */ 95 uint32_t Setup[12]; /*!< Setup packet buffer */ 96 PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */ 97 uint32_t BESL; 98 uint32_t lpm_active; /*!< Enable or disable the Link Power Management . 99 This parameter can be set to ENABLE or DISABLE */ 100 void *pData; /*!< Pointer to upper stack Handler */ 101 } PCD_HandleTypeDef; 102 103 /** 104 * @} 105 */ 106 107 /* Include PCD HAL Extension module */ 108 #include "stm32f7xx_hal_pcd_ex.h" 109 110 /* Exported constants --------------------------------------------------------*/ 111 /** @defgroup PCD_Exported_Constants PCD Exported Constants 112 * @{ 113 */ 114 115 /** @defgroup PCD_Speed PCD Speed 116 * @{ 117 */ 118 #define PCD_SPEED_HIGH 0 119 #define PCD_SPEED_HIGH_IN_FULL 1 120 #define PCD_SPEED_FULL 2 121 /** 122 * @} 123 */ 124 125 /** @defgroup PCD_PHY_Module PCD PHY Module 126 * @{ 127 */ 128 #define PCD_PHY_ULPI 1 129 #define PCD_PHY_EMBEDDED 2 130 /** 131 * @} 132 */ 133 134 /** @defgroup PCD_Turnaround_Timeout Turnaround Timeout Value 135 * @{ 136 */ 137 #ifndef USBD_HS_TRDT_VALUE 138 #define USBD_HS_TRDT_VALUE 9 139 #endif /* USBD_HS_TRDT_VALUE */ 140 #ifndef USBD_FS_TRDT_VALUE 141 #define USBD_FS_TRDT_VALUE 5 142 #endif /* USBD_HS_TRDT_VALUE */ 143 144 /** 145 * @} 146 */ 147 148 /** 149 * @} 150 */ 151 152 /* Exported macros -----------------------------------------------------------*/ 153 /** @defgroup PCD_Exported_Macros PCD Exported Macros 154 * @brief macros to handle interrupts and specific clock configurations 155 * @{ 156 */ 157 #define __HAL_PCD_ENABLE(__HANDLE__) USB_EnableGlobalInt ((__HANDLE__)->Instance) 158 #define __HAL_PCD_DISABLE(__HANDLE__) USB_DisableGlobalInt ((__HANDLE__)->Instance) 159 160 #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) 161 #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) = (__INTERRUPT__)) 162 #define __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0) 163 164 165 #define __HAL_PCD_UNGATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) &= \ 166 ~(USB_OTG_PCGCCTL_STOPCLK) 167 168 #define __HAL_PCD_GATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) |= USB_OTG_PCGCCTL_STOPCLK 169 170 #define __HAL_PCD_IS_PHY_SUSPENDED(__HANDLE__) ((*(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE))&0x10) 171 172 #define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE ((uint32_t)0x08) 173 #define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE ((uint32_t)0x0C) 174 #define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE ((uint32_t)0x10) 175 176 #define USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE ((uint32_t)0x08) 177 #define USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE ((uint32_t)0x0C) 178 #define USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE ((uint32_t)0x10) 179 180 #define USB_OTG_HS_WAKEUP_EXTI_LINE ((uint32_t)0x00100000) /*!< External interrupt line 20 Connected to the USB HS EXTI Line */ 181 #define USB_OTG_FS_WAKEUP_EXTI_LINE ((uint32_t)0x00040000) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */ 182 183 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= (USB_OTG_HS_WAKEUP_EXTI_LINE) 184 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE) 185 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_HS_WAKEUP_EXTI_LINE) 186 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = (USB_OTG_HS_WAKEUP_EXTI_LINE) 187 188 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE);\ 189 EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE 190 191 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE() EXTI->FTSR |= (USB_OTG_HS_WAKEUP_EXTI_LINE);\ 192 EXTI->RTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE) 193 194 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() EXTI->RTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE);\ 195 EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE;)\ 196 EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE;\ 197 EXTI->FTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE 198 199 #define __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT() (EXTI->SWIER |= USB_OTG_FS_WAKEUP_EXTI_LINE) 200 201 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE 202 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE) 203 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE) 204 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE 205 206 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ 207 EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE 208 209 210 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE() EXTI->FTSR |= (USB_OTG_FS_WAKEUP_EXTI_LINE);\ 211 EXTI->RTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE) 212 213 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() EXTI->RTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ 214 EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ 215 EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE;\ 216 EXTI->FTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE 217 218 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT() (EXTI->SWIER |= USB_OTG_FS_WAKEUP_EXTI_LINE) 219 220 /* Exported functions --------------------------------------------------------*/ 221 /** @addtogroup PCD_Exported_Functions PCD Exported Functions 222 * @{ 223 */ 224 225 /* Initialization/de-initialization functions ********************************/ 226 /** @addtogroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions 227 * @{ 228 */ 229 HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd); 230 HAL_StatusTypeDef HAL_PCD_DeInit (PCD_HandleTypeDef *hpcd); 231 void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd); 232 void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd); 233 /** 234 * @} 235 */ 236 237 /* I/O operation functions ***************************************************/ 238 /* Non-Blocking mode: Interrupt */ 239 /** @addtogroup PCD_Exported_Functions_Group2 IO operation functions 240 * @{ 241 */ 242 HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd); 243 HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd); 244 void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd); 245 246 void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 247 void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 248 void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd); 249 void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd); 250 void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd); 251 void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd); 252 void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd); 253 void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 254 void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 255 void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd); 256 void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd); 257 /** 258 * @} 259 */ 260 261 /* Peripheral Control functions **********************************************/ 262 /** @addtogroup PCD_Exported_Functions_Group3 Peripheral Control functions 263 * @{ 264 */ 265 HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); 266 HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); 267 HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address); 268 HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type); 269 HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 270 HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); 271 HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); 272 uint16_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 273 HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 274 HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 275 HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 276 HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); 277 HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); 278 /** 279 * @} 280 */ 281 282 /* Peripheral State functions ************************************************/ 283 /** @addtogroup PCD_Exported_Functions_Group4 Peripheral State functions 284 * @{ 285 */ 286 PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd); 287 /** 288 * @} 289 */ 290 291 /** 292 * @} 293 */ 294 295 /** @defgroup PCD_Instance_definition PCD Instance definition 296 * @{ 297 */ 298 #define IS_PCD_ALL_INSTANCE(INSTANCE) (((INSTANCE) == USB_OTG_FS) || \ 299 ((INSTANCE) == USB_OTG_HS)) 300 /** 301 * @} 302 */ 303 304 /** 305 * @} 306 */ 307 308 /** 309 * @} 310 */ 311 312 /** 313 * @} 314 */ 315 316 #ifdef __cplusplus 317 } 318 #endif 319 320 321 #endif /* __STM32F7xx_HAL_PCD_H */ 322 323 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 324