Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of TUKS-COURSE-TIMER by
stm32l4xx_hal_pcd.h
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_hal_pcd.h 00004 * @author MCD Application Team 00005 * @version V1.5.1 00006 * @date 31-May-2016 00007 * @brief Header file of PCD HAL module. 00008 ****************************************************************************** 00009 * @attention 00010 * 00011 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> 00012 * 00013 * Redistribution and use in source and binary forms, with or without modification, 00014 * are permitted provided that the following conditions are met: 00015 * 1. Redistributions of source code must retain the above copyright notice, 00016 * this list of conditions and the following disclaimer. 00017 * 2. Redistributions in binary form must reproduce the above copyright notice, 00018 * this list of conditions and the following disclaimer in the documentation 00019 * and/or other materials provided with the distribution. 00020 * 3. Neither the name of STMicroelectronics nor the names of its contributors 00021 * may be used to endorse or promote products derived from this software 00022 * without specific prior written permission. 00023 * 00024 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00025 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00026 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 00028 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00029 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00030 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00031 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00032 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00033 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 * 00035 ****************************************************************************** 00036 */ 00037 00038 /* Define to prevent recursive inclusion -------------------------------------*/ 00039 #ifndef __STM32L4xx_HAL_PCD_H 00040 #define __STM32L4xx_HAL_PCD_H 00041 00042 #ifdef __cplusplus 00043 extern "C" { 00044 #endif 00045 00046 #if defined(STM32L475xx) || defined(STM32L476xx) || \ 00047 defined(STM32L485xx) || defined(STM32L486xx) || \ 00048 defined(STM32L432xx) || defined(STM32L433xx) || \ 00049 defined(STM32L442xx) || defined(STM32L443xx) 00050 00051 /* Includes ------------------------------------------------------------------*/ 00052 #include "stm32l4xx_ll_usb.h" 00053 00054 /** @addtogroup STM32L4xx_HAL_Driver 00055 * @{ 00056 */ 00057 00058 /** @addtogroup PCD 00059 * @{ 00060 */ 00061 00062 /* Exported types ------------------------------------------------------------*/ 00063 /** @defgroup PCD_Exported_Types PCD Exported Types 00064 * @{ 00065 */ 00066 00067 /** 00068 * @brief PCD State structure definition 00069 */ 00070 typedef enum 00071 { 00072 HAL_PCD_STATE_RESET = 0x00, 00073 HAL_PCD_STATE_READY = 0x01, 00074 HAL_PCD_STATE_ERROR = 0x02, 00075 HAL_PCD_STATE_BUSY = 0x03, 00076 HAL_PCD_STATE_TIMEOUT = 0x04 00077 } PCD_StateTypeDef; 00078 00079 /* Device LPM suspend state */ 00080 typedef enum 00081 { 00082 LPM_L0 = 0x00, /* on */ 00083 LPM_L1 = 0x01, /* LPM L1 sleep */ 00084 LPM_L2 = 0x02, /* suspend */ 00085 LPM_L3 = 0x03, /* off */ 00086 }PCD_LPM_StateTypeDef; 00087 00088 #if defined (USB) 00089 /** 00090 * @brief PCD double buffered endpoint direction 00091 */ 00092 typedef enum 00093 { 00094 PCD_EP_DBUF_OUT, 00095 PCD_EP_DBUF_IN, 00096 PCD_EP_DBUF_ERR, 00097 }PCD_EP_DBUF_DIR; 00098 00099 /** 00100 * @brief PCD endpoint buffer number 00101 */ 00102 typedef enum 00103 { 00104 PCD_EP_NOBUF, 00105 PCD_EP_BUF0, 00106 PCD_EP_BUF1 00107 }PCD_EP_BUF_NUM; 00108 #endif /* USB */ 00109 00110 #if defined (USB_OTG_FS) 00111 typedef USB_OTG_GlobalTypeDef PCD_TypeDef; 00112 typedef USB_OTG_CfgTypeDef PCD_InitTypeDef; 00113 typedef USB_OTG_EPTypeDef PCD_EPTypeDef; 00114 #endif /* USB_OTG_FS */ 00115 00116 #if defined (USB) 00117 typedef USB_TypeDef PCD_TypeDef; 00118 typedef USB_CfgTypeDef PCD_InitTypeDef; 00119 typedef USB_EPTypeDef PCD_EPTypeDef; 00120 #endif /* USB */ 00121 typedef struct 00122 { 00123 HAL_LockTypeDef Lock; 00124 } PCD_EPLockDef; 00125 00126 /** 00127 * @brief PCD Handle Structure definition 00128 */ 00129 typedef struct 00130 { 00131 PCD_TypeDef *Instance; /*!< Register base address */ 00132 PCD_InitTypeDef Init; /*!< PCD required parameters */ 00133 __IO uint8_t USB_Address; /*!< USB Address: not used by USB OTG FS */ 00134 PCD_EPTypeDef IN_ep[15]; /*!< IN endpoint parameters */ 00135 PCD_EPTypeDef OUT_ep[15]; /*!< OUT endpoint parameters */ 00136 HAL_LockTypeDef Lock; /*!< PCD peripheral status */ 00137 PCD_EPLockDef EPLock[15]; 00138 __IO PCD_StateTypeDef State; /*!< PCD communication state */ 00139 uint32_t Setup[12]; /*!< Setup packet buffer */ 00140 PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */ 00141 uint32_t BESL; 00142 00143 00144 uint32_t lpm_active; /*!< Enable or disable the Link Power Management . 00145 This parameter can be set to ENABLE or DISABLE */ 00146 00147 uint32_t battery_charging_active; /*!< Enable or disable Battery charging. 00148 This parameter can be set to ENABLE or DISABLE */ 00149 void *pData; /*!< Pointer to upper stack Handler */ 00150 00151 } PCD_HandleTypeDef; 00152 00153 /** 00154 * @} 00155 */ 00156 00157 /* Include PCD HAL Extended module */ 00158 #include "stm32l4xx_hal_pcd_ex.h" 00159 00160 /* Exported constants --------------------------------------------------------*/ 00161 /** @defgroup PCD_Exported_Constants PCD Exported Constants 00162 * @{ 00163 */ 00164 00165 /** @defgroup PCD_Speed PCD Speed 00166 * @{ 00167 */ 00168 #define PCD_SPEED_FULL 1 00169 /** 00170 * @} 00171 */ 00172 00173 /** @defgroup PCD_PHY_Module PCD PHY Module 00174 * @{ 00175 */ 00176 #define PCD_PHY_EMBEDDED 1 00177 /** 00178 * @} 00179 */ 00180 00181 /** @defgroup PCD_Turnaround_Timeout Turnaround Timeout Value 00182 * @{ 00183 */ 00184 #ifndef USBD_FS_TRDT_VALUE 00185 #define USBD_FS_TRDT_VALUE 5 00186 #endif /* USBD_FS_TRDT_VALUE */ 00187 /** 00188 * @} 00189 */ 00190 00191 /** 00192 * @} 00193 */ 00194 00195 /* Exported macros -----------------------------------------------------------*/ 00196 /** @defgroup PCD_Exported_Macros PCD Exported Macros 00197 * @brief macros to handle interrupts and specific clock configurations 00198 * @{ 00199 */ 00200 #if defined (USB_OTG_FS) 00201 #define __HAL_PCD_ENABLE(__HANDLE__) USB_EnableGlobalInt ((__HANDLE__)->Instance) 00202 #define __HAL_PCD_DISABLE(__HANDLE__) USB_DisableGlobalInt ((__HANDLE__)->Instance) 00203 00204 #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) 00205 #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) &= (__INTERRUPT__)) 00206 #define __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0) 00207 00208 00209 #define __HAL_PCD_UNGATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) &= \ 00210 ~(USB_OTG_PCGCCTL_STOPCLK) 00211 00212 #define __HAL_PCD_GATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) |= USB_OTG_PCGCCTL_STOPCLK 00213 00214 #define __HAL_PCD_IS_PHY_SUSPENDED(__HANDLE__) ((*(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE))&0x10) 00215 00216 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR1 |= USB_OTG_FS_WAKEUP_EXTI_LINE 00217 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR1 &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE) 00218 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR1 & (USB_OTG_FS_WAKEUP_EXTI_LINE) 00219 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR1 = USB_OTG_FS_WAKEUP_EXTI_LINE 00220 00221 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() do {\ 00222 EXTI->FTSR1 &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ 00223 EXTI->RTSR1 |= USB_OTG_FS_WAKEUP_EXTI_LINE;\ 00224 } while(0) 00225 00226 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE() do {\ 00227 EXTI->FTSR1 |= (USB_OTG_FS_WAKEUP_EXTI_LINE);\ 00228 EXTI->RTSR1 &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ 00229 } while(0) 00230 00231 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() do {\ 00232 EXTI->RTSR1 &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ 00233 EXTI->FTSR1 &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ 00234 EXTI->RTSR1 |= USB_OTG_FS_WAKEUP_EXTI_LINE;\ 00235 EXTI->FTSR1 |= USB_OTG_FS_WAKEUP_EXTI_LINE;\ 00236 } while(0) 00237 00238 #define __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT() (EXTI->SWIER1 |= USB_OTG_FS_WAKEUP_EXTI_LINE) 00239 00240 #endif /* USB_OTG_FS */ 00241 00242 #if defined (USB) 00243 #define __HAL_PCD_ENABLE(__HANDLE__) USB_EnableGlobalInt ((__HANDLE__)->Instance) 00244 #define __HAL_PCD_DISABLE(__HANDLE__) USB_DisableGlobalInt ((__HANDLE__)->Instance) 00245 #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) 00246 #define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) &= ~(__INTERRUPT__)) 00247 00248 #define __HAL_USB_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR1 |= USB_WAKEUP_EXTI_LINE 00249 #define __HAL_USB_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR1 &= ~(USB_WAKEUP_EXTI_LINE) 00250 #define __HAL_USB_WAKEUP_EXTI_GET_FLAG() EXTI->PR1 & (USB_WAKEUP_EXTI_LINE) 00251 #define __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR1 = USB_WAKEUP_EXTI_LINE 00252 00253 #define __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE() do {\ 00254 EXTI->FTSR1 &= ~(USB_WAKEUP_EXTI_LINE);\ 00255 EXTI->RTSR1 |= USB_WAKEUP_EXTI_LINE;\ 00256 } while(0) 00257 00258 #define __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE() do {\ 00259 EXTI->FTSR1 |= (USB_WAKEUP_EXTI_LINE);\ 00260 EXTI->RTSR1 &= ~(USB_WAKEUP_EXTI_LINE);\ 00261 } while(0) 00262 00263 #define __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() do {\ 00264 EXTI->RTSR1 &= ~(USB_WAKEUP_EXTI_LINE);\ 00265 EXTI->FTSR1 &= ~(USB_WAKEUP_EXTI_LINE);\ 00266 EXTI->RTSR1 |= USB_WAKEUP_EXTI_LINE;\ 00267 EXTI->FTSR1 |= USB_WAKEUP_EXTI_LINE;\ 00268 } while(0) 00269 00270 #define __HAL_USB_WAKEUP_EXTI_GENERATE_SWIT() (EXTI->SWIER1 |= USB_WAKEUP_EXTI_LINE) 00271 00272 #endif /* USB */ 00273 00274 /** 00275 * @} 00276 */ 00277 00278 /** @addtogroup PCD_Exported_Functions PCD Exported Functions 00279 * @{ 00280 */ 00281 00282 /* Initialization/de-initialization functions ********************************/ 00283 /** @addtogroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions 00284 * @{ 00285 */ 00286 HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd); 00287 HAL_StatusTypeDef HAL_PCD_DeInit (PCD_HandleTypeDef *hpcd); 00288 void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd); 00289 void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd); 00290 /** 00291 * @} 00292 */ 00293 00294 /* I/O operation functions ***************************************************/ 00295 /* Non-Blocking mode: Interrupt */ 00296 /** @addtogroup PCD_Exported_Functions_Group2 Input and Output operation functions 00297 * @{ 00298 */ 00299 /* Non-Blocking mode: Interrupt */ 00300 HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd); 00301 HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd); 00302 void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd); 00303 00304 void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 00305 void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 00306 void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd); 00307 void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd); 00308 void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd); 00309 void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd); 00310 void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd); 00311 void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 00312 void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); 00313 void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd); 00314 void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd); 00315 /** 00316 * @} 00317 */ 00318 00319 /* Peripheral Control functions **********************************************/ 00320 /** @addtogroup PCD_Exported_Functions_Group3 Peripheral Control functions 00321 * @{ 00322 */ 00323 HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); 00324 HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); 00325 HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address); 00326 HAL_StatusTypeDef HAL_PCD_EP_Open(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint16_t ep_mps, uint8_t ep_type); 00327 HAL_StatusTypeDef HAL_PCD_EP_Close(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 00328 HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); 00329 HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, uint8_t *pBuf, uint32_t len); 00330 uint16_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 00331 HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 00332 HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 00333 HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); 00334 HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); 00335 HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); 00336 /** 00337 * @} 00338 */ 00339 00340 /* Peripheral State functions ************************************************/ 00341 /** @addtogroup PCD_Exported_Functions_Group4 Peripheral State functions 00342 * @{ 00343 */ 00344 PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd); 00345 /** 00346 * @} 00347 */ 00348 00349 /** 00350 * @} 00351 */ 00352 00353 /* Private constants ---------------------------------------------------------*/ 00354 /** @defgroup PCD_Private_Constants PCD Private Constants 00355 * @{ 00356 */ 00357 /** @defgroup USB_EXTI_Line_Interrupt USB EXTI line interrupt 00358 * @{ 00359 */ 00360 #if defined (USB_OTG_FS) 00361 #define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE ((uint32_t)0x08) 00362 #define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE ((uint32_t)0x0C) 00363 #define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE ((uint32_t)0x10) 00364 00365 #define USB_OTG_FS_WAKEUP_EXTI_LINE ((uint32_t)0x00020000) /*!< External interrupt line 17 Connected to the USB EXTI Line */ 00366 #endif /* USB_OTG_FS */ 00367 00368 #if defined (USB) 00369 #define USB_WAKEUP_EXTI_LINE ((uint32_t)0x00020000) /*!< External interrupt line 17Connected to the USB EXTI Line */ 00370 #endif /* USB */ 00371 00372 /** 00373 * @} 00374 */ 00375 00376 #if defined (USB) 00377 /** @defgroup PCD_EP0_MPS PCD EP0 MPS 00378 * @{ 00379 */ 00380 #define PCD_EP0MPS_64 DEP0CTL_MPS_64 00381 #define PCD_EP0MPS_32 DEP0CTL_MPS_32 00382 #define PCD_EP0MPS_16 DEP0CTL_MPS_16 00383 #define PCD_EP0MPS_08 DEP0CTL_MPS_8 00384 /** 00385 * @} 00386 */ 00387 00388 /** @defgroup PCD_ENDP PCD ENDP 00389 * @{ 00390 */ 00391 #define PCD_ENDP0 ((uint8_t)0) 00392 #define PCD_ENDP1 ((uint8_t)1) 00393 #define PCD_ENDP2 ((uint8_t)2) 00394 #define PCD_ENDP3 ((uint8_t)3) 00395 #define PCD_ENDP4 ((uint8_t)4) 00396 #define PCD_ENDP5 ((uint8_t)5) 00397 #define PCD_ENDP6 ((uint8_t)6) 00398 #define PCD_ENDP7 ((uint8_t)7) 00399 /** 00400 * @} 00401 */ 00402 00403 /** @defgroup PCD_ENDP_Kind PCD Endpoint Kind 00404 * @{ 00405 */ 00406 #define PCD_SNG_BUF 0 00407 #define PCD_DBL_BUF 1 00408 /** 00409 * @} 00410 */ 00411 #endif /* USB */ 00412 /** 00413 * @} 00414 */ 00415 00416 /* Private macros ------------------------------------------------------------*/ 00417 /** @addtogroup PCD_Private_Macros PCD Private Macros 00418 * @{ 00419 */ 00420 #if defined (USB) 00421 /* SetENDPOINT */ 00422 #define PCD_SET_ENDPOINT(USBx, bEpNum,wRegValue) (*(&(USBx)->EP0R + (bEpNum) * 2)= (uint16_t)(wRegValue)) 00423 00424 /* GetENDPOINT */ 00425 #define PCD_GET_ENDPOINT(USBx, bEpNum) (*(&(USBx)->EP0R + (bEpNum) * 2)) 00426 00427 /* ENDPOINT transfer */ 00428 #define USB_EP0StartXfer USB_EPStartXfer 00429 00430 /** 00431 * @brief sets the type in the endpoint register(bits EP_TYPE[1:0]) 00432 * @param USBx: USB peripheral instance register address. 00433 * @param bEpNum: Endpoint Number. 00434 * @param wType: Endpoint Type. 00435 * @retval None 00436 */ 00437 #define PCD_SET_EPTYPE(USBx, bEpNum,wType) (PCD_SET_ENDPOINT((USBx), (bEpNum),\ 00438 ((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_MASK) | (wType) ))) 00439 00440 /** 00441 * @brief gets the type in the endpoint register(bits EP_TYPE[1:0]) 00442 * @param USBx: USB peripheral instance register address. 00443 * @param bEpNum: Endpoint Number. 00444 * @retval Endpoint Type 00445 */ 00446 #define PCD_GET_EPTYPE(USBx, bEpNum) (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_T_FIELD) 00447 00448 /** 00449 * @brief free buffer used from the application realizing it to the line 00450 toggles bit SW_BUF in the double buffered endpoint register 00451 * @param USBx: USB peripheral instance register address. 00452 * @param bEpNum: Endpoint Number. 00453 * @param bDir: Direction 00454 * @retval None 00455 */ 00456 #define PCD_FreeUserBuffer(USBx, bEpNum, bDir)\ 00457 {\ 00458 if ((bDir) == PCD_EP_DBUF_OUT)\ 00459 { /* OUT double buffered endpoint */\ 00460 PCD_TX_DTOG((USBx), (bEpNum));\ 00461 }\ 00462 else if ((bDir) == PCD_EP_DBUF_IN)\ 00463 { /* IN double buffered endpoint */\ 00464 PCD_RX_DTOG((USBx), (bEpNum));\ 00465 }\ 00466 } 00467 00468 /** 00469 * @brief gets direction of the double buffered endpoint 00470 * @param USBx: USB peripheral instance register address. 00471 * @param bEpNum: Endpoint Number. 00472 * @retval EP_DBUF_OUT, EP_DBUF_IN, 00473 * EP_DBUF_ERR if the endpoint counter not yet programmed. 00474 */ 00475 #define PCD_GET_DB_DIR(USBx, bEpNum)\ 00476 {\ 00477 if ((uint16_t)(*PCD_EP_RX_CNT((USBx), (bEpNum)) & 0xFC00) != 0)\ 00478 return(PCD_EP_DBUF_OUT);\ 00479 else if (((uint16_t)(*PCD_EP_TX_CNT((USBx), (bEpNum))) & 0x03FF) != 0)\ 00480 return(PCD_EP_DBUF_IN);\ 00481 else\ 00482 return(PCD_EP_DBUF_ERR);\ 00483 } 00484 00485 /** 00486 * @brief sets the status for tx transfer (bits STAT_TX[1:0]). 00487 * @param USBx: USB peripheral instance register address. 00488 * @param bEpNum: Endpoint Number. 00489 * @param wState: new state 00490 * @retval None 00491 */ 00492 #define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) { register uint16_t _wRegVal;\ 00493 \ 00494 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_DTOGMASK;\ 00495 /* toggle first bit ? */ \ 00496 if((USB_EPTX_DTOG1 & (wState))!= 0)\ 00497 { \ 00498 _wRegVal ^= USB_EPTX_DTOG1; \ 00499 } \ 00500 /* toggle second bit ? */ \ 00501 if((USB_EPTX_DTOG2 & (wState))!= 0) \ 00502 { \ 00503 _wRegVal ^= USB_EPTX_DTOG2; \ 00504 } \ 00505 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX));\ 00506 } /* PCD_SET_EP_TX_STATUS */ 00507 00508 /** 00509 * @brief sets the status for rx transfer (bits STAT_TX[1:0]) 00510 * @param USBx: USB peripheral instance register address. 00511 * @param bEpNum: Endpoint Number. 00512 * @param wState: new state 00513 * @retval None 00514 */ 00515 #define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) {\ 00516 register uint16_t _wRegVal; \ 00517 \ 00518 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_DTOGMASK;\ 00519 /* toggle first bit ? */ \ 00520 if((USB_EPRX_DTOG1 & (wState))!= 0) \ 00521 { \ 00522 _wRegVal ^= USB_EPRX_DTOG1; \ 00523 } \ 00524 /* toggle second bit ? */ \ 00525 if((USB_EPRX_DTOG2 & (wState))!= 0) \ 00526 { \ 00527 _wRegVal ^= USB_EPRX_DTOG2; \ 00528 } \ 00529 PCD_SET_ENDPOINT((USBx), (bEpNum), (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \ 00530 } /* PCD_SET_EP_RX_STATUS */ 00531 00532 /** 00533 * @brief sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0]) 00534 * @param USBx: USB peripheral instance register address. 00535 * @param bEpNum: Endpoint Number. 00536 * @param wStaterx: new state. 00537 * @param wStatetx: new state. 00538 * @retval None 00539 */ 00540 #define PCD_SET_EP_TXRX_STATUS(USBx,bEpNum,wStaterx,wStatetx) {\ 00541 register uint32_t _wRegVal; \ 00542 \ 00543 _wRegVal = PCD_GET_ENDPOINT((USBx), (bEpNum)) & (USB_EPRX_DTOGMASK |USB_EPTX_STAT) ;\ 00544 /* toggle first bit ? */ \ 00545 if((USB_EPRX_DTOG1 & ((wStaterx)))!= 0) \ 00546 { \ 00547 _wRegVal ^= USB_EPRX_DTOG1; \ 00548 } \ 00549 /* toggle second bit ? */ \ 00550 if((USB_EPRX_DTOG2 & (wStaterx))!= 0) \ 00551 { \ 00552 _wRegVal ^= USB_EPRX_DTOG2; \ 00553 } \ 00554 /* toggle first bit ? */ \ 00555 if((USB_EPTX_DTOG1 & (wStatetx))!= 0) \ 00556 { \ 00557 _wRegVal ^= USB_EPTX_DTOG1; \ 00558 } \ 00559 /* toggle second bit ? */ \ 00560 if((USB_EPTX_DTOG2 & (wStatetx))!= 0) \ 00561 { \ 00562 _wRegVal ^= USB_EPTX_DTOG2; \ 00563 } \ 00564 PCD_SET_ENDPOINT((USBx), (bEpNum), _wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX); \ 00565 } /* PCD_SET_EP_TXRX_STATUS */ 00566 00567 /** 00568 * @brief gets the status for tx/rx transfer (bits STAT_TX[1:0] 00569 * /STAT_RX[1:0]) 00570 * @param USBx: USB peripheral instance register address. 00571 * @param bEpNum: Endpoint Number. 00572 * @retval status 00573 */ 00574 #define PCD_GET_EP_TX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPTX_STAT) 00575 #define PCD_GET_EP_RX_STATUS(USBx, bEpNum) ((uint16_t)PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPRX_STAT) 00576 00577 /** 00578 * @brief sets directly the VALID tx/rx-status into the endpoint register 00579 * @param USBx: USB peripheral instance register address. 00580 * @param bEpNum: Endpoint Number. 00581 * @retval None 00582 */ 00583 #define PCD_SET_EP_TX_VALID(USBx, bEpNum) (PCD_SET_EP_TX_STATUS((USBx), (bEpNum), USB_EP_TX_VALID)) 00584 #define PCD_SET_EP_RX_VALID(USBx, bEpNum) (PCD_SET_EP_RX_STATUS((USBx), (bEpNum), USB_EP_RX_VALID)) 00585 00586 /** 00587 * @brief checks stall condition in an endpoint. 00588 * @param USBx: USB peripheral instance register address. 00589 * @param bEpNum: Endpoint Number. 00590 * @retval TRUE = endpoint in stall condition. 00591 */ 00592 #define PCD_GET_EP_TX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_TX_STATUS((USBx), (bEpNum)) \ 00593 == USB_EP_TX_STALL) 00594 #define PCD_GET_EP_RX_STALL_STATUS(USBx, bEpNum) (PCD_GET_EP_RX_STATUS((USBx), (bEpNum)) \ 00595 == USB_EP_RX_STALL) 00596 00597 /** 00598 * @brief set & clear EP_KIND bit. 00599 * @param USBx: USB peripheral instance register address. 00600 * @param bEpNum: Endpoint Number. 00601 * @retval None 00602 */ 00603 #define PCD_SET_EP_KIND(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ 00604 (USB_EP_CTR_RX|USB_EP_CTR_TX|((PCD_GET_ENDPOINT((USBx), (bEpNum)) | USB_EP_KIND) & USB_EPREG_MASK)))) 00605 #define PCD_CLEAR_EP_KIND(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ 00606 (USB_EP_CTR_RX|USB_EP_CTR_TX|(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPKIND_MASK)))) 00607 00608 /** 00609 * @brief Sets/clears directly STATUS_OUT bit in the endpoint register. 00610 * @param USBx: USB peripheral instance register address. 00611 * @param bEpNum: Endpoint Number. 00612 * @retval None 00613 */ 00614 #define PCD_SET_OUT_STATUS(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum)) 00615 #define PCD_CLEAR_OUT_STATUS(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum)) 00616 00617 /** 00618 * @brief Sets/clears directly EP_KIND bit in the endpoint register. 00619 * @param USBx: USB peripheral instance register address. 00620 * @param bEpNum: Endpoint Number. 00621 * @retval None 00622 */ 00623 #define PCD_SET_EP_DBUF(USBx, bEpNum) PCD_SET_EP_KIND((USBx), (bEpNum)) 00624 #define PCD_CLEAR_EP_DBUF(USBx, bEpNum) PCD_CLEAR_EP_KIND((USBx), (bEpNum)) 00625 00626 /** 00627 * @brief Clears bit CTR_RX / CTR_TX in the endpoint register. 00628 * @param USBx: USB peripheral instance register address. 00629 * @param bEpNum: Endpoint Number. 00630 * @retval None 00631 */ 00632 #define PCD_CLEAR_RX_EP_CTR(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum),\ 00633 PCD_GET_ENDPOINT((USBx), (bEpNum)) & 0x7FFF & USB_EPREG_MASK)) 00634 #define PCD_CLEAR_TX_EP_CTR(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum),\ 00635 PCD_GET_ENDPOINT((USBx), (bEpNum)) & 0xFF7F & USB_EPREG_MASK)) 00636 00637 /** 00638 * @brief Toggles DTOG_RX / DTOG_TX bit in the endpoint register. 00639 * @param USBx: USB peripheral instance register address. 00640 * @param bEpNum: Endpoint Number. 00641 * @retval None 00642 */ 00643 #define PCD_RX_DTOG(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ 00644 USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_RX | (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK))) 00645 #define PCD_TX_DTOG(USBx, bEpNum) (PCD_SET_ENDPOINT((USBx), (bEpNum), \ 00646 USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_TX | (PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK))) 00647 00648 /** 00649 * @brief Clears DTOG_RX / DTOG_TX bit in the endpoint register. 00650 * @param USBx: USB peripheral instance register address. 00651 * @param bEpNum: Endpoint Number. 00652 * @retval None 00653 */ 00654 #define PCD_CLEAR_RX_DTOG(USBx, bEpNum) if((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_DTOG_RX) != 0)\ 00655 { \ 00656 PCD_RX_DTOG((USBx), (bEpNum)); \ 00657 } 00658 #define PCD_CLEAR_TX_DTOG(USBx, bEpNum) if((PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EP_DTOG_TX) != 0)\ 00659 { \ 00660 PCD_TX_DTOG((USBx), (bEpNum)); \ 00661 } 00662 00663 /** 00664 * @brief Sets address in an endpoint register. 00665 * @param USBx: USB peripheral instance register address. 00666 * @param bEpNum: Endpoint Number. 00667 * @param bAddr: Address. 00668 * @retval None 00669 */ 00670 #define PCD_SET_EP_ADDRESS(USBx, bEpNum,bAddr) PCD_SET_ENDPOINT((USBx), (bEpNum),\ 00671 USB_EP_CTR_RX|USB_EP_CTR_TX|(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPREG_MASK) | (bAddr)) 00672 00673 #define PCD_GET_EP_ADDRESS(USBx, bEpNum) ((uint8_t)(PCD_GET_ENDPOINT((USBx), (bEpNum)) & USB_EPADDR_FIELD)) 00674 00675 #define PCD_EP_TX_ADDRESS(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8)+ ((uint32_t)(USBx) + 0x400))) 00676 #define PCD_EP_TX_CNT(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8+2)+ ((uint32_t)(USBx) + 0x400))) 00677 #define PCD_EP_RX_ADDRESS(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8+4)+ ((uint32_t)(USBx) + 0x400))) 00678 #define PCD_EP_RX_CNT(USBx, bEpNum) ((uint16_t *)(((USBx)->BTABLE+(bEpNum)*8+6)+ ((uint32_t)(USBx) + 0x400))) 00679 00680 #define PCD_SET_EP_RX_CNT(USBx, bEpNum,wCount) {\ 00681 uint16_t *pdwReg = PCD_EP_RX_CNT((USBx), (bEpNum)); \ 00682 PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount));\ 00683 } 00684 00685 /** 00686 * @brief sets address of the tx/rx buffer. 00687 * @param USBx: USB peripheral instance register address. 00688 * @param bEpNum: Endpoint Number. 00689 * @param wAddr: address to be set (must be word aligned). 00690 * @retval None 00691 */ 00692 #define PCD_SET_EP_TX_ADDRESS(USBx, bEpNum,wAddr) (*PCD_EP_TX_ADDRESS((USBx), (bEpNum)) = (((wAddr) >> 1) << 1)) 00693 #define PCD_SET_EP_RX_ADDRESS(USBx, bEpNum,wAddr) (*PCD_EP_RX_ADDRESS((USBx), (bEpNum)) = (((wAddr) >> 1) << 1)) 00694 00695 /** 00696 * @brief Gets address of the tx/rx buffer. 00697 * @param USBx: USB peripheral instance register address. 00698 * @param bEpNum: Endpoint Number. 00699 * @retval address of the buffer. 00700 */ 00701 #define PCD_GET_EP_TX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_TX_ADDRESS((USBx), (bEpNum))) 00702 #define PCD_GET_EP_RX_ADDRESS(USBx, bEpNum) ((uint16_t)*PCD_EP_RX_ADDRESS((USBx), (bEpNum))) 00703 00704 /** 00705 * @brief Sets counter of rx buffer with no. of blocks. 00706 * @param dwReg: Register 00707 * @param wCount: Counter. 00708 * @param wNBlocks: no. of Blocks. 00709 * @retval None 00710 */ 00711 #define PCD_CALC_BLK32(dwReg,wCount,wNBlocks) {\ 00712 (wNBlocks) = (wCount) >> 5;\ 00713 if(((wCount) & 0x1f) == 0)\ 00714 { \ 00715 (wNBlocks)--;\ 00716 } \ 00717 *pdwReg = (uint16_t)((uint16_t)((wNBlocks) << 10) | 0x8000); \ 00718 }/* PCD_CALC_BLK32 */ 00719 00720 #define PCD_CALC_BLK2(dwReg,wCount,wNBlocks) {\ 00721 (wNBlocks) = (wCount) >> 1;\ 00722 if(((wCount) & 0x1) != 0)\ 00723 { \ 00724 (wNBlocks)++;\ 00725 } \ 00726 *pdwReg = (uint16_t)((wNBlocks) << 10);\ 00727 }/* PCD_CALC_BLK2 */ 00728 00729 #define PCD_SET_EP_CNT_RX_REG(dwReg,wCount) {\ 00730 uint16_t wNBlocks;\ 00731 if((wCount) > 62) \ 00732 { \ 00733 PCD_CALC_BLK32((dwReg),(wCount),wNBlocks); \ 00734 } \ 00735 else \ 00736 { \ 00737 PCD_CALC_BLK2((dwReg),(wCount),wNBlocks); \ 00738 } \ 00739 }/* PCD_SET_EP_CNT_RX_REG */ 00740 00741 #define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum,wCount) {\ 00742 uint16_t *pdwReg = PCD_EP_TX_CNT((USBx), (bEpNum)); \ 00743 PCD_SET_EP_CNT_RX_REG(pdwReg, (wCount));\ 00744 } 00745 00746 /** 00747 * @brief sets counter for the tx/rx buffer. 00748 * @param USBx: USB peripheral instance register address. 00749 * @param bEpNum: Endpoint Number. 00750 * @param wCount: Counter value. 00751 * @retval None 00752 */ 00753 #define PCD_SET_EP_TX_CNT(USBx, bEpNum,wCount) (*PCD_EP_TX_CNT((USBx), (bEpNum)) = (wCount)) 00754 00755 00756 /** 00757 * @brief gets counter of the tx buffer. 00758 * @param USBx: USB peripheral instance register address. 00759 * @param bEpNum: Endpoint Number. 00760 * @retval Counter value 00761 */ 00762 #define PCD_GET_EP_TX_CNT(USBx, bEpNum) ((uint16_t)(*PCD_EP_TX_CNT((USBx), (bEpNum))) & 0x3ff) 00763 #define PCD_GET_EP_RX_CNT(USBx, bEpNum) ((uint16_t)(*PCD_EP_RX_CNT((USBx), (bEpNum))) & 0x3ff) 00764 00765 /** 00766 * @brief Sets buffer 0/1 address in a double buffer endpoint. 00767 * @param USBx: USB peripheral instance register address. 00768 * @param bEpNum: Endpoint Number. 00769 * @param wBuf0Addr: buffer 0 address. 00770 * @retval Counter value 00771 */ 00772 #define PCD_SET_EP_DBUF0_ADDR(USBx, bEpNum,wBuf0Addr) {PCD_SET_EP_TX_ADDRESS((USBx), (bEpNum), (wBuf0Addr));} 00773 #define PCD_SET_EP_DBUF1_ADDR(USBx, bEpNum,wBuf1Addr) {PCD_SET_EP_RX_ADDRESS((USBx), (bEpNum), (wBuf1Addr));} 00774 00775 /** 00776 * @brief Sets addresses in a double buffer endpoint. 00777 * @param USBx: USB peripheral instance register address. 00778 * @param bEpNum: Endpoint Number. 00779 * @param wBuf0Addr: buffer 0 address. 00780 * @param wBuf1Addr = buffer 1 address. 00781 * @retval None 00782 */ 00783 #define PCD_SET_EP_DBUF_ADDR(USBx, bEpNum,wBuf0Addr,wBuf1Addr) { \ 00784 PCD_SET_EP_DBUF0_ADDR((USBx), (bEpNum), (wBuf0Addr));\ 00785 PCD_SET_EP_DBUF1_ADDR((USBx), (bEpNum), (wBuf1Addr));\ 00786 } /* PCD_SET_EP_DBUF_ADDR */ 00787 00788 /** 00789 * @brief Gets buffer 0/1 address of a double buffer endpoint. 00790 * @param USBx: USB peripheral instance register address. 00791 * @param bEpNum: Endpoint Number. 00792 * @retval None 00793 */ 00794 #define PCD_GET_EP_DBUF0_ADDR(USBx, bEpNum) (PCD_GET_EP_TX_ADDRESS((USBx), (bEpNum))) 00795 #define PCD_GET_EP_DBUF1_ADDR(USBx, bEpNum) (PCD_GET_EP_RX_ADDRESS((USBx), (bEpNum))) 00796 00797 /** 00798 * @brief Gets buffer 0/1 address of a double buffer endpoint. 00799 * @param USBx: USB peripheral instance register address. 00800 * @param bEpNum: Endpoint Number. 00801 * @param bDir: endpoint dir EP_DBUF_OUT = OUT 00802 * EP_DBUF_IN = IN 00803 * @param wCount: Counter value 00804 * @retval None 00805 */ 00806 #define PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount) { \ 00807 if((bDir) == PCD_EP_DBUF_OUT)\ 00808 /* OUT endpoint */ \ 00809 {PCD_SET_EP_RX_DBUF0_CNT((USBx), (bEpNum),(wCount));} \ 00810 else if((bDir) == PCD_EP_DBUF_IN)\ 00811 /* IN endpoint */ \ 00812 *PCD_EP_TX_CNT((USBx), (bEpNum)) = (uint32_t)(wCount); \ 00813 } /* SetEPDblBuf0Count*/ 00814 00815 #define PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount) { \ 00816 if((bDir) == PCD_EP_DBUF_OUT)\ 00817 {/* OUT endpoint */ \ 00818 PCD_SET_EP_RX_CNT((USBx), (bEpNum),(wCount)); \ 00819 } \ 00820 else if((bDir) == PCD_EP_DBUF_IN)\ 00821 {/* IN endpoint */ \ 00822 *PCD_EP_TX_CNT((USBx), (bEpNum)) = (uint32_t)(wCount); \ 00823 } \ 00824 } /* SetEPDblBuf1Count */ 00825 00826 #define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) {\ 00827 PCD_SET_EP_DBUF0_CNT((USBx), (bEpNum), (bDir), (wCount)); \ 00828 PCD_SET_EP_DBUF1_CNT((USBx), (bEpNum), (bDir), (wCount)); \ 00829 } /* PCD_SET_EP_DBUF_CNT */ 00830 00831 /** 00832 * @brief Gets buffer 0/1 rx/tx counter for double buffering. 00833 * @param USBx: USB peripheral instance register address. 00834 * @param bEpNum: Endpoint Number. 00835 * @retval None 00836 */ 00837 #define PCD_GET_EP_DBUF0_CNT(USBx, bEpNum) (PCD_GET_EP_TX_CNT((USBx), (bEpNum))) 00838 #define PCD_GET_EP_DBUF1_CNT(USBx, bEpNum) (PCD_GET_EP_RX_CNT((USBx), (bEpNum))) 00839 00840 #endif /* USB */ 00841 00842 #if defined(STM32L432xx) || defined(STM32L433xx) || \ 00843 defined(STM32L442xx) || defined(STM32L443xx) 00844 /** @defgroup PCD_Instance_definition PCD Instance definition 00845 * @{ 00846 */ 00847 #define IS_PCD_ALL_INSTANCE IS_USB_ALL_INSTANCE 00848 /** 00849 * @} 00850 */ 00851 #endif /* STM32L432xx || STM32L433xx || */ 00852 /* STM32L442xx || STM32L443xx */ 00853 00854 /** 00855 * @} 00856 */ 00857 00858 /** 00859 * @} 00860 */ 00861 00862 /** 00863 * @} 00864 */ 00865 00866 #endif /* STM32L475xx || STM32L476xx || */ 00867 /* STM32L485xx || STM32L486xx || */ 00868 /* STM32L432xx || STM32L433xx || */ 00869 /* STM32L442xx || STM32L443xx */ 00870 00871 #ifdef __cplusplus 00872 } 00873 #endif 00874 00875 00876 #endif /* __STM32L4xx_HAL_PCD_H */ 00877 00878 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Generated on Tue Jul 12 2022 17:38:49 by
1.7.2
