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.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
Diff: TARGET_NUCLEO_L053R8/stm32l0xx_hal_pcd.h
- Revision:
- 119:aae6fcc7d9bb
- Parent:
- 96:487b796308b0
diff -r 082adc85693f -r aae6fcc7d9bb TARGET_NUCLEO_L053R8/stm32l0xx_hal_pcd.h
--- a/TARGET_NUCLEO_L053R8/stm32l0xx_hal_pcd.h Wed Apr 13 12:19:19 2016 +0100
+++ b/TARGET_NUCLEO_L053R8/stm32l0xx_hal_pcd.h Wed Apr 27 12:10:56 2016 -0500
@@ -2,13 +2,13 @@
******************************************************************************
* @file stm32l0xx_hal_pcd.h
* @author MCD Application Team
- * @version V1.2.0
- * @date 06-February-2015
+ * @version V1.5.0
+ * @date 8-January-2016
* @brief Header file of PCD HAL module.
******************************************************************************
* @attention
*
- * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
@@ -45,7 +45,7 @@
extern "C" {
#endif
-#if !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx)
+#if !defined (STM32L011xx) && !defined (STM32L021xx) && !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx)
/* Includes ------------------------------------------------------------------*/
#include "stm32l0xx_hal_def.h"
@@ -53,10 +53,13 @@
* @{
*/
-/** @addtogroup PCD
+/** @defgroup PCD PCD
* @{
*/
+/** @defgroup PCD_Exported_Types PCD Exported Types
+ * @{
+ */
/* Exported types ------------------------------------------------------------*/
/**
@@ -64,10 +67,11 @@
*/
typedef enum
{
- PCD_READY = 0x00,
- PCD_ERROR = 0x01,
- PCD_BUSY = 0x02,
- PCD_TIMEOUT = 0x03
+ HAL_PCD_STATE_RESET = 0x00,
+ HAL_PCD_STATE_READY = 0x01,
+ HAL_PCD_STATE_ERROR = 0x02,
+ HAL_PCD_STATE_BUSY = 0x03,
+ HAL_PCD_STATE_TIMEOUT = 0x04
} PCD_StateTypeDef;
typedef enum
@@ -86,20 +90,7 @@
PCD_EP_BUF1
}PCD_EP_BUF_NUM;
-#define PCD_ENDP0 ((uint8_t)0)
-#define PCD_ENDP1 ((uint8_t)1)
-#define PCD_ENDP2 ((uint8_t)2)
-#define PCD_ENDP3 ((uint8_t)3)
-#define PCD_ENDP4 ((uint8_t)4)
-#define PCD_ENDP5 ((uint8_t)5)
-#define PCD_ENDP6 ((uint8_t)6)
-#define PCD_ENDP7 ((uint8_t)7)
-/* Endpoint Kind */
-#define PCD_SNG_BUF 0
-#define PCD_DBL_BUF 1
-
-#define IS_PCD_ALL_INSTANCE IS_USB_ALL_INSTANCE
/**
* @brief PCD Initialization Structure definition
*/
@@ -191,14 +182,44 @@
void *pData; /*!< Pointer to upper stack Handler */
} PCD_HandleTypeDef;
-
+
+/**
+ * @}
+ */
+
+
#include "stm32l0xx_hal_pcd_ex.h"
/* Exported constants --------------------------------------------------------*/
-/** @defgroup PCD_Exported_Constants
+/** @defgroup PCD_Exported_Constants PCD Exported Constants
+ * @{
+ */
+
+/** @defgroup PCD_EndPoint PCD End Point
* @{
*/
-/** @defgroup PCD_Speed
+
+#define PCD_ENDP0 ((uint8_t)0)
+#define PCD_ENDP1 ((uint8_t)1)
+#define PCD_ENDP2 ((uint8_t)2)
+#define PCD_ENDP3 ((uint8_t)3)
+#define PCD_ENDP4 ((uint8_t)4)
+#define PCD_ENDP5 ((uint8_t)5)
+#define PCD_ENDP6 ((uint8_t)6)
+#define PCD_ENDP7 ((uint8_t)7)
+
+/* Endpoint Kind */
+#define PCD_SNG_BUF 0
+#define PCD_DBL_BUF 1
+
+#define IS_PCD_ALL_INSTANCE IS_USB_ALL_INSTANCE
+
+/**
+ * @}
+ */
+
+
+/** @defgroup PCD_Speed PCD Speed
* @{
*/
#define PCD_SPEED_HIGH 0 /* Not Supported */
@@ -207,7 +228,7 @@
* @}
*/
- /** @defgroup PCD_USB_Core_PHY
+ /** @defgroup PCD_USB_Core_PHY PCD USB Core PHY
* @{
*/
#define PCD_PHY_EMBEDDED 2
@@ -215,7 +236,7 @@
* @}
*/
- /** @defgroup PCD_USB_EP0_MPS
+ /** @defgroup PCD_USB_EP0_MPS PCD USB EP0 MPS
* @{
*/
#define DEP0CTL_MPS_64 0
@@ -231,7 +252,7 @@
* @}
*/
-/** @defgroup PCD_USB_EP_Type
+/** @defgroup PCD_USB_EP_Type PCD USB EP Type
* @{
*/
#define PCD_EP_TYPE_CTRL 0
@@ -242,20 +263,17 @@
* @}
*/
-/**
- * @}
- */
/* Exported macros -----------------------------------------------------------*/
-/** @defgroup PCD_Interrupt_Clock
+/** @defgroup PCD_Interrupt_Clock PCD Interrupt
* @brief macros to handle interrupts and specific clock configurations
* @{
*/
#define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISTR) & (__INTERRUPT__)) == (__INTERRUPT__))
-#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) = ~(__INTERRUPT__))
+#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) &= (uint16_t) ~(__INTERRUPT__))
-#define USB_WAKEUP_EXTI_LINE ((uint32_t)0x00040000) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */
+#define USB_WAKEUP_EXTI_LINE (EXTI_IMR_IM18) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */
#define __HAL_USB_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_WAKEUP_EXTI_LINE
#define __HAL_USB_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_WAKEUP_EXTI_LINE)
@@ -273,6 +291,7 @@
/**
* @brief sets the type in the endpoint register(bits EP_TYPE[1:0])
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wType: Endpoint Type.
* @retval None
@@ -282,6 +301,7 @@
/**
* @brief gets the type in the endpoint register(bits EP_TYPE[1:0])
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval Endpoint Type
*/
@@ -290,12 +310,13 @@
/**
* @brief free buffer used from the application realizing it to the line
- toggles bit SW_BUF in the double buffered endpoint register
+ * toggles bit SW_BUF in the double buffered endpoint register
+ * @param USBx: USB device.
* @param bEpNum, bDir
* @retval None
*/
#define PCD_FreeUserBuffer(USBx, bEpNum, bDir)\
-{\
+do {\
if (bDir == PCD_EP_DBUF_OUT)\
{ /* OUT double buffered endpoint */\
PCD_TX_DTOG(USBx, bEpNum);\
@@ -304,31 +325,33 @@
{ /* IN double buffered endpoint */\
PCD_RX_DTOG(USBx, bEpNum);\
}\
-}
+} while(0)
/**
* @brief gets direction of the double buffered endpoint
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval EP_DBUF_OUT, EP_DBUF_IN,
* EP_DBUF_ERR if the endpoint counter not yet programmed.
*/
#define PCD_GET_DB_DIR(USBx, bEpNum)\
-{\
+do {\
if ((uint16_t)(*PCD_EP_RX_CNT(USBx, bEpNum) & 0xFC00) != 0)\
return(PCD_EP_DBUF_OUT);\
else if (((uint16_t)(*PCD_EP_TX_CNT(USBx, bEpNum)) & 0x03FF) != 0)\
return(PCD_EP_DBUF_IN);\
else\
return(PCD_EP_DBUF_ERR);\
-}
+} while(0)
/**
* @brief sets the status for tx transfer (bits STAT_TX[1:0]).
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wState: new state
* @retval None
*/
-#define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) {\
+#define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) do {\
register uint16_t _wRegVal; \
\
_wRegVal = PCD_GET_ENDPOINT(USBx, bEpNum) & USB_EPTX_DTOGMASK;\
@@ -339,15 +362,16 @@
if((USB_EPTX_DTOG2 & wState)!= 0) \
_wRegVal ^= USB_EPTX_DTOG2; \
PCD_SET_ENDPOINT(USBx, bEpNum, (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \
- } /* PCD_SET_EP_TX_STATUS */
+ } while(0) /* PCD_SET_EP_TX_STATUS */
/**
* @brief sets the status for rx transfer (bits STAT_TX[1:0])
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wState: new state
* @retval None
*/
-#define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) {\
+#define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) do {\
register uint16_t _wRegVal; \
\
_wRegVal = PCD_GET_ENDPOINT(USBx, bEpNum) & USB_EPRX_DTOGMASK;\
@@ -358,16 +382,17 @@
if((USB_EPRX_DTOG2 & wState)!= 0) \
_wRegVal ^= USB_EPRX_DTOG2; \
PCD_SET_ENDPOINT(USBx, bEpNum, (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \
- } /* PCD_SET_EP_RX_STATUS */
+ } while(0) /* PCD_SET_EP_RX_STATUS */
/**
* @brief sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0])
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wStaterx: new state.
* @param wStatetx: new state.
* @retval None
*/
-#define PCD_SET_EP_TXRX_STATUS(USBx,bEpNum,wStaterx,wStatetx) {\
+#define PCD_SET_EP_TXRX_STATUS(USBx,bEpNum,wStaterx,wStatetx) do {\
register uint32_t _wRegVal; \
\
_wRegVal = PCD_GET_ENDPOINT(USBx, bEpNum) & (USB_EPRX_DTOGMASK |USB_EPTX_STAT) ;\
@@ -384,11 +409,12 @@
if((USB_EPTX_DTOG2 & wStatetx)!= 0) \
_wRegVal ^= USB_EPTX_DTOG2; \
PCD_SET_ENDPOINT(USBx, bEpNum, _wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX); \
- } /* PCD_SET_EP_TXRX_STATUS */
+ } while(0) /* PCD_SET_EP_TXRX_STATUS */
/**
* @brief gets the status for tx/rx transfer (bits STAT_TX[1:0]
* /STAT_RX[1:0])
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval status
*/
@@ -398,6 +424,7 @@
/**
* @brief sets directly the VALID tx/rx-status into the endpoint register
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -407,6 +434,7 @@
/**
* @brief checks stall condition in an endpoint.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval TRUE = endpoint in stall condition.
*/
@@ -417,6 +445,7 @@
/**
* @brief set & clear EP_KIND bit.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -427,6 +456,7 @@
/**
* @brief Sets/clears directly STATUS_OUT bit in the endpoint register.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -435,6 +465,7 @@
/**
* @brief Sets/clears directly EP_KIND bit in the endpoint register.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -443,6 +474,7 @@
/**
* @brief Clears bit CTR_RX / CTR_TX in the endpoint register.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -453,6 +485,7 @@
/**
* @brief Toggles DTOG_RX / DTOG_TX bit in the endpoint register.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -463,6 +496,7 @@
/**
* @brief Clears DTOG_RX / DTOG_TX bit in the endpoint register.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -473,6 +507,7 @@
/**
* @brief Sets address in an endpoint register.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param bAddr: Address.
* @retval None
@@ -482,6 +517,7 @@
/**
* @brief Gets address in an endpoint register.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -493,6 +529,7 @@
/**
* @brief sets address of the tx/rx buffer.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wAddr: address to be set (must be word aligned).
* @retval None
@@ -502,6 +539,7 @@
/**
* @brief Gets address of the tx/rx buffer.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval address of the buffer.
*/
@@ -510,48 +548,51 @@
/**
* @brief Sets counter of rx buffer with no. of blocks.
- * @param bEpNum: Endpoint Number.
+ * @param dwReg: Register.
* @param wCount: Counter.
+ * @param wNBlocks: Nb of block
* @retval None
*/
-#define PCD_CALC_BLK32(dwReg,wCount,wNBlocks) {\
+#define PCD_CALC_BLK32(dwReg,wCount,wNBlocks) do {\
wNBlocks = wCount >> 5;\
if((wCount & 0x1f) == 0)\
wNBlocks--;\
*pdwReg = (uint16_t)((wNBlocks << 10) | 0x8000);\
- }/* PCD_CALC_BLK32 */
+ } while(0) /* PCD_CALC_BLK32 */
-#define PCD_CALC_BLK2(dwReg,wCount,wNBlocks) {\
+#define PCD_CALC_BLK2(dwReg,wCount,wNBlocks) do {\
wNBlocks = wCount >> 1;\
if((wCount & 0x1) != 0)\
wNBlocks++;\
*pdwReg = (uint16_t)(wNBlocks << 10);\
- }/* PCD_CALC_BLK2 */
+ } while(0) /* PCD_CALC_BLK2 */
-#define PCD_SET_EP_CNT_RX_REG(dwReg,wCount) {\
+#define PCD_SET_EP_CNT_RX_REG(dwReg,wCount) do {\
uint16_t wNBlocks;\
if(wCount > 62){PCD_CALC_BLK32(dwReg,wCount,wNBlocks);}\
else {PCD_CALC_BLK2(dwReg,wCount,wNBlocks);}\
- }/* PCD_SET_EP_CNT_RX_REG */
+ } while(0) /* PCD_SET_EP_CNT_RX_REG */
-#define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum,wCount) {\
+#define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum,wCount) do {\
uint16_t *pdwReg = PCD_EP_TX_CNT(USBx, bEpNum); \
PCD_SET_EP_CNT_RX_REG(pdwReg, wCount);\
- }
+ } while(0)
/**
* @brief sets counter for the tx/rx buffer.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wCount: Counter value.
* @retval None
*/
#define PCD_SET_EP_TX_CNT(USBx, bEpNum,wCount) (*PCD_EP_TX_CNT(USBx, bEpNum) = wCount)
-#define PCD_SET_EP_RX_CNT(USBx, bEpNum,wCount) {\
+#define PCD_SET_EP_RX_CNT(USBx, bEpNum,wCount) do {\
uint16_t *pdwReg = PCD_EP_RX_CNT(USBx, bEpNum); \
PCD_SET_EP_CNT_RX_REG(pdwReg, wCount);\
- }
+ } while(0)
/**
* @brief gets counter of the tx buffer.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval Counter value
*/
@@ -560,6 +601,7 @@
/**
* @brief Sets buffer 0/1 address in a double buffer endpoint.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wBuf0Addr: buffer 0 address.
* @retval Counter value
@@ -569,6 +611,7 @@
/**
* @brief Sets addresses in a double buffer endpoint.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @param wBuf0Addr: buffer 0 address.
* @param wBuf1Addr = buffer 1 address.
@@ -581,6 +624,7 @@
/**
* @brief Gets buffer 0/1 address of a double buffer endpoint.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
@@ -589,9 +633,9 @@
/**
* @brief Gets buffer 0/1 address of a double buffer endpoint.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
- * bDir: endpoint dir EP_DBUF_OUT = OUT
- * EP_DBUF_IN = IN
+ * @param bDir: endpoint dir EP_DBUF_OUT = OUT and EP_DBUF_IN = IN
* @param wCount: Counter value
* @retval None
*/
@@ -613,33 +657,51 @@
*PCD_EP_RX_CNT(USBx, bEpNum) = (uint32_t)wCount; \
} /* SetEPDblBuf1Count */
-#define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) {\
+#define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) do {\
PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount); \
PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount); \
- } /* PCD_SET_EP_DBUF_CNT */
+ } while(0) /* PCD_SET_EP_DBUF_CNT */
/**
* @brief Gets buffer 0/1 rx/tx counter for double buffering.
+ * @param USBx: USB device.
* @param bEpNum: Endpoint Number.
* @retval None
*/
#define PCD_GET_EP_DBUF0_CNT(USBx, bEpNum) (PCD_GET_EP_TX_CNT(USBx, bEpNum))
#define PCD_GET_EP_DBUF1_CNT(USBx, bEpNum) (PCD_GET_EP_RX_CNT(USBx, bEpNum))
+/**
+ * @}
+ */
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
+/** @defgroup PCD_Exported_Functions PCD Exported Functions
+ * @{
+ */
+/** @defgroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions
+ * @brief Initialization and Configuration functions
+ * @{
+ */
/* Initialization/de-initialization functions **********************************/
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd);
HAL_StatusTypeDef HAL_PCD_DeInit (PCD_HandleTypeDef *hpcd);
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd);
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd);
+/**
+ * @}
+ */
+/** @defgroup PCD_Exported_Functions_Group2 IO Data transfers functions
+ * @brief Data transfers functions
+ * @{
+ */
-/* I/O operation functions *****************************************************/
+ /* I/O operation functions *****************************************************/
/* Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd);
HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd);
@@ -656,9 +718,14 @@
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum);
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd);
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd);
-
+/**
+ * @}
+ */
-
+/** @defgroup PCD_Exported_Functions_Group3 Peripheral Control functions
+ * @brief management functions
+ * @{
+ */
/* Peripheral Control functions ************************************************/
HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd);
HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd);
@@ -673,18 +740,46 @@
HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr);
HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd);
HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd);
+void PCD_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
+void PCD_ReadPMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
+/**
+ * @}
+ */
+/** @defgroup PCD_Exported_Functions_Group4 Peripheral State functions
+ * @brief Peripheral State functions
+ * @{
+ */
+
/* Peripheral State functions **************************************************/
PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd);
/**
* @}
+ */
+
+/**
+ * @}
+ */
+
+/* Define the private group ***********************************/
+/**************************************************************/
+/** @defgroup PCD_Private PCD Private
+ * @{
+ */
+/**
+ * @}
+ */
+/**************************************************************/
+
+/**
+ * @}
*/
/**
* @}
*/
-#endif /* #if !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx) */
+#endif /* #if !defined (STM32L011xx) && !defined (STM32L021xx) && !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx) */
#ifdef __cplusplus
}


