1 /**
2   ******************************************************************************
3   * @file    stm32l0xx_hal_gpio_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of GPIO HAL Extension module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
10   *
11   * Redistribution and use in source and binary forms, with or without modification,
12   * are permitted provided that the following conditions are met:
13   *   1. Redistributions of source code must retain the above copyright notice,
14   *      this list of conditions and the following disclaimer.
15   *   2. Redistributions in binary form must reproduce the above copyright notice,
16   *      this list of conditions and the following disclaimer in the documentation
17   *      and/or other materials provided with the distribution.
18   *   3. Neither the name of STMicroelectronics nor the names of its contributors
19   *      may be used to endorse or promote products derived from this software
20   *      without specific prior written permission.
21   *
22   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32   *
33   ******************************************************************************
34   */
35 
36 /* Define to prevent recursive inclusion -------------------------------------*/
37 #ifndef __STM32L0xx_HAL_GPIO_EX_H
38 #define __STM32L0xx_HAL_GPIO_EX_H
39 
40 #ifdef __cplusplus
41  extern "C" {
42 #endif
43 
44 /* Includes ------------------------------------------------------------------*/
45 #include "stm32l0xx_hal_def.h"
46 
47 /** @addtogroup STM32L0xx_HAL_Driver
48   * @{
49   */
50 
51 /** @defgroup GPIOEx GPIOEx
52   * @{
53   */
54 
55 /* Exported types ------------------------------------------------------------*/
56 
57 /* Exported constants --------------------------------------------------------*/
58 
59 /** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants
60   * @{
61   */
62 
63 
64 /*----------------------------------------------------------------------------*/
65 /*------------------------- STM32L083xx/STM32L073xx---------------------------*/
66 /*----------------------------------------------------------------------------*/
67 
68 #if defined (STM32L083xx) || defined (STM32L073xx)
69 
70 /* The table below gives an overview of the different alternate functions per port.
71  * For more details refer yourself to the product data sheet.
72  *
73  */
74 
75 /*     |   AF0  |   AF1  |   AF2  |   AF3  |   AF4  |   AF5  |   AF6  |   AF7  |
76  *______________________________________________________________________________
77  * PA0 |        |        |TIM2_C1 |TSC     |USART2  |TIM2_TR |USART4  |COMP1   |
78  * PA1 |EVENTOUT|LCD     |TIM2_C2 |TSC     |USART2  |TIM21_TR|USART4  |        |
79  * PA2 |TIM21_C1|LCD     |TIM2_C3 |TSC     |USART2  |        |LPUART1 |COMP2   |
80  * PA3 |TIM21_C2|LCD     |TIM2_C4 |TSC     |USART2  |        |LPUART1 |        |
81  * PA4 |SPI1    |        |        |TSC     |USART2  |TIM22_TR|        |        |
82  * PA5 |SPI1    |        |TIM2_TR |TSC     |        |TIM2_C1 |        |        |
83  * PA6 |SPI1    |LCD     |TIM3_C1 |TSC     |LPUART1 |TIM22_C1|EVENTOUT|COMP1   |
84  * PA7 |SPI1    |LCD     |TIM3_C2 |TSC     |        |TIM22_C2|EVENTOUT|COMP2   |
85  * PA8 |MCO     |LCD     |USB     |EVENTOUT|USART1  |        |        |I2C3    |
86  * PA9 |MCO     |LCD     |        |TSC     |USART1  |        |I2C1    |I2C3    |
87  * PA10|        |LCD     |        |TSC     |USART1  |        |I2C1    |        |
88  * PA11|SPI1    |        |EVENTOUT|TSC     |USART1  |        |I2C2    |COMP1   |
89  * PA12|SPI1    |        |EVENTOUT|TSC     |USART1  |        |I2C2    |COMP2   |
90  * PA13|SWDIO   |        |USB     |        |        |        |LPUART1 |        |
91  * PA14|SWCLK   |        |        |        |USART2  |        |LPUART1 |        |
92  * PA15|SPI1    |LCD     |TIM2_TR |EVENTOUT|USART2  |TIM2_C1 |USART4  |        |
93  *______________________________________________________________________________
94  * PB0 |EVENTOUT|LCD     |TIM3_C3 |TSC     |        |        |        |        |
95  * PB1 |        |LCD     |TIM3_C4 |TSC     |LPUART1 |        |        |        |
96  * PB2 |        |        |LPTIM1_O|TSC     |        |        |        |I2C3    |
97  * PB3 |SPI1    |LCD     |TIM2_C2 |TSC     |EVENTOUT|USART1  |USART5  |        |
98  * PB4 |SPI1    |LCD     |TIM3_C1 |TSC     |TIM22_C1|USART1  |USART5  |I2C3    |
99  * PB5 |SPI1    |LCD     |LPTIM1_I|I2C1    |TIM3_C2 |USART1  |USART5  |        |
100  *     |        |        |        |        |TIM22_C2|        |        |        |
101  * PB6 |USART1  |I2C1    |LPTIM1_T|TSC     |        |        |        |        |
102  * PB7 |USART1  |I2C1    |LPTIM1_I|TSC     |        |        |USART4  |        |
103  * PB8 |        |LCD     |        |TSC     |I2C1    |        |        |        |
104  * PB9 |        |LCD     |EVENTOUT|        |I2C1    |SPI2    |        |        |
105  * PB10|        |LCD     |TIM2_C3 |TSC     |LPUART1 |SPI2    |I2C2    |LPUART1 |
106  * PB11|EVENTOUT|LCD     |TIM2_C4 |TSC     |LPUART1 |        |I2C2    |LPUART1 |
107  * PB12|SPI2    |LCD     |LPUART1 |TSC     |        |I2C2    |EVENTOUT|        |
108  * PB13|SPI2    |LCD     |MCO     |TSC     |LPUART1 |I2C2    |TIM21_C1|        |
109  * PB14|SPI2    |LCD     |RTC     |TSC     |LPUART1 |I2C2    |TIM21_C2|        |
110  * PB15|SPI2    |LCD     |RTC     |        |        |        |        |        |
111  *______________________________________________________________________________
112  * PC0 |LPTIM1_I|LCD     |EVENTOUT|TSC     |        |        |LPUART1 |I2C3    |
113  * PC1 |LPTIM1_O|LCD     |EVENTOUT|TSC     |        |        |LPUART1 |I2C3    |
114  * PC2 |LPTIM1_I|LCD     |SPI2    |TSC     |        |        |        |        |
115  * PC3 |LPTIM1_T|LCD     |SPI2    |TSC     |        |        |        |        |
116  * PC4 |EVENTOUT|LCD     |LPUART1 |        |        |        |        |        |
117  * PC5 |        |LCD     |LPUART1 |TSC     |        |        |        |        |
118  * PC6 |TIM22_C1|LCD     |TIM3_C1 |TSC     |        |        |        |        |
119  * PC7 |TIM22_C2|LCD     |TIM3_C2 |TSC     |        |        |        |        |
120  * PC8 |TIM22_TR|LCD     |TIM3_C3 |TSC     |        |        |        |        |
121  * PC9 |TIM21_TR|LCD     |USB     |TSC     |        |        |        |I2C3    |
122  *     |        |        |TIM3_C4 |        |        |        |        |        |
123  * PC10|LPUART1 |LCD     |        |        |        |        |USART4  |        |
124  * PC11|LPUART1 |LCD     |        |        |        |        |USART4  |        |
125  * PC12|        |LCD     |USART5  |        |        |        |USART4  |        |
126  * PC13|        |        |        |        |        |        |        |        |
127  * PC14|        |        |        |        |        |        |        |        |
128  * PC15|        |        |        |        |        |        |        |        |
129  *______________________________________________________________________________
130  * PD0 |TIM21_C1|SPI2    |        |        |        |        |        |        |
131  * PD1 |        |SPI2    |        |        |        |        |        |        |
132  * PD2 |LPUART1 |LCD     |TIM3_TR |        |        |        |USART5  |        |
133  * PD3 |USART2  |LCD     |SPI2    |        |        |        |        |        |
134  * PD4 |USART2  |SPI2    |        |        |        |        |        |        |
135  * PD5 |USART2  |        |        |        |        |        |        |        |
136  * PD6 |USART2  |        |        |        |        |        |        |        |
137  * PD7 |USART2  |TIM21_C2|        |        |        |        |        |        |
138  * PD8 |LPUART1 |LCD     |        |        |        |        |        |        |
139  * PD9 |LPUART1 |LCD     |        |        |        |        |        |        |
140  * PD10|        |LCD     |        |        |        |        |        |        |
141  * PD11|LPUART1 |LCD     |        |        |        |        |        |        |
142  * PD12|LPUART1 |LCD     |        |        |        |        |        |        |
143  * PD13|        |LCD     |        |        |        |        |        |        |
144  * PD14|        |LCD     |        |        |        |        |        |        |
145  * PD15|USB     |LCD     |        |        |        |        |        |        |
146  *______________________________________________________________________________
147  * PE0 |        |LCD     |EVENTOUT|        |        |        |        |        |
148  * PE1 |        |LCD     |EVENTOUT|        |        |        |        |        |
149  * PE2 |        |LCD     |TIM3_TR |        |        |        |        |        |
150  * PE3 |TIM22_C1|LCD     |TIM3_C1 |        |        |        |        |        |
151  * PE4 |TIM22_C2|        |TIM3_C2 |        |        |        |        |        |
152  * PE5 |TIM21_C1|        |TIM3_C3 |        |        |        |        |        |
153  * PE6 |TIM21_C2|        |TIM3_C4 |        |        |        |        |        |
154  * PE7 |        |LCD     |        |        |        |        |USART5  |        |
155  * PE8 |        |LCD     |        |        |        |        |USART4  |        |
156  * PE9 |TIM2_C1 |LCD     |TIM2_TR |        |        |        |USART4  |        |
157  * PE10|TIM2_C2 |LCD     |        |        |        |        |USART5  |        |
158  * PE11|TIM2_C3 |        |        |        |        |        |USART5  |        |
159  * PE12|TIM2_C4 |        |SPI1    |        |        |        |        |        |
160  * PE13|        |LCD     |SPI1    |        |        |        |        |        |
161  * PE14|        |LCD     |SPI1    |        |        |        |        |        |
162  * PE15|        |LCD     |SPI1    |        |        |        |        |        |
163  *______________________________________________________________________________
164  * PH0 |USB     |        |        |        |        |        |        |        |
165  * PH1 |        |        |        |        |        |        |        |        |
166  * PH9 |        |        |        |        |        |        |        |        |
167  * PH10|        |        |        |        |        |        |        |        |
168  *
169  */
170 
171 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
172  * @{
173  */
174 
175 /*
176  * Alternate function AF0
177  */
178 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
179 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
180 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
181 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
182 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
183 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
184 #define GPIO_AF0_USART1        ((uint8_t)0x00U)  /* USART1 Alternate Function mapping   */
185 #define GPIO_AF0_SPI2          ((uint8_t)0x00U)  /* SPI2 Alternate Function mapping     */
186 #define GPIO_AF0_LPTIM1        ((uint8_t)0x00U)  /* LPTIM1 Alternate Function mapping   */
187 #define GPIO_AF0_TIM22         ((uint8_t)0x00U)  /* TIM22 Alternate Function mapping    */
188 #define GPIO_AF0_LPUART1       ((uint8_t)0x00U)  /* LPUART1 Alternate Function mapping  */
189 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
190 #define GPIO_AF0_TIM2          ((uint8_t)0x00U)  /* TIM2 Alternate Function mapping     */
191 #define GPIO_AF0_USB           ((uint8_t)0x00U)  /* USB Alternate Function mapping      */
192 /**
193  *
194  */
195 
196 /*
197  * Alternate function AF1
198  */
199 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping     */
200 #define GPIO_AF1_SPI2          ((uint8_t)0x01U)  /* SPI2 Alternate Function mapping     */
201 #define GPIO_AF1_TIM21         ((uint8_t)0x01U)  /* TIM21 Alternate Function mapping    */
202 #define GPIO_AF1_LCD           ((uint8_t)0x01U)  /* LCD Alternate Function mapping      */
203 /**
204  *
205  */
206 
207 /*
208  * Alternate function AF2
209  */
210 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping     */
211 #define GPIO_AF2_TIM3          ((uint8_t)0x02U)  /* TIM3 Alternate Function mapping     */
212 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping */
213 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping   */
214 #define GPIO_AF2_LPUART1       ((uint8_t)0x02U)  /* LPUART1 Alternate Function mapping  */
215 #define GPIO_AF2_MCO           ((uint8_t)0x02U)  /* MCO Alternate Function mapping      */
216 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping      */
217 #define GPIO_AF2_SPI2          ((uint8_t)0x02U)  /* SPI2 Alternate Function mapping     */
218 #define GPIO_AF2_USART5        ((uint8_t)0x02U)  /* USART5 Alternate Function mapping   */
219 #define GPIO_AF2_SPI1          ((uint8_t)0x02U)  /* SPI1 Alternate Function mapping     */
220 #define GPIO_AF2_USB           ((uint8_t)0x00U)  /* USB Alternate Function mapping      */
221 /**
222  *
223  */
224 
225 /*
226  * Alternate function AF3
227  */
228 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping */
229 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping     */
230 #define GPIO_AF3_TSC           ((uint8_t)0x03U)  /* TSC  Alternate Function mapping     */
231 /**
232  *
233  */
234 
235 /*
236  * Alternate function AF4
237  */
238 #define GPIO_AF4_USART2          ((uint8_t)0x04U)  /* USART2 Alternate Function mapping  */
239 #define GPIO_AF4_LPUART1         ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping */
240 #define GPIO_AF4_USART1          ((uint8_t)0x04U)  /* USART1 Alternate Function mapping  */
241 #define GPIO_AF4_EVENTOUT        ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping*/
242 #define GPIO_AF4_TIM22           ((uint8_t)0x04U)  /* TIM22 Alternate Function mapping   */
243 #define GPIO_AF4_TIM3            ((uint8_t)0x04U)  /* TIM3 Alternate Function mapping    */
244 #define GPIO_AF4_I2C1            ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping    */
245 /**
246  *
247  */
248 
249 /*
250  * Alternate function AF5
251  */
252 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
253 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
254 #define GPIO_AF5_TIM22         ((uint8_t)0x05U)  /* TIM22 Alternate Function mapping    */
255 #define GPIO_AF5_USART1        ((uint8_t)0x05U)  /* USART1 Alternate Function mapping   */
256 #define GPIO_AF5_SPI2          ((uint8_t)0x05U)  /* SPI2 Alternate Function mapping     */
257 #define GPIO_AF5_I2C2          ((uint8_t)0x05U)  /* I2C2 Alternate Function mapping     */
258 /**
259  *
260  */
261 
262 /*
263  * Alternate function AF6
264  */
265 
266 #define GPIO_AF6_USART4        ((uint8_t)0x06U)  /* USART4 Alternate Function mapping   */
267 #define GPIO_AF6_LPUART1       ((uint8_t)0x06U)  /* LPUART1 Alternate Function mapping  */
268 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping */
269 #define GPIO_AF6_I2C1          ((uint8_t)0x06U)  /* I2C1 Alternate Function mapping     */
270 #define GPIO_AF6_I2C2          ((uint8_t)0x06U)  /* I2C2 Alternate Function mapping     */
271 #define GPIO_AF6_USART5        ((uint8_t)0x06U)  /* USART5 Alternate Function mapping   */
272 #define GPIO_AF6_TIM21         ((uint8_t)0x06U)  /* TIM21 Alternate Function mapping    */
273 /**
274  *
275  */
276 
277 /*
278  * Alternate function AF7
279  */
280 #define GPIO_AF7_COMP1        ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
281 #define GPIO_AF7_COMP2        ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
282 #define GPIO_AF7_I2C3         ((uint8_t)0x07U)  /* I2C3 Alternate Function mapping      */
283 #define GPIO_AF7_LPUART1      ((uint8_t)0x07U)  /* LPUART1 Alternate Function mapping   */
284 /**
285   *
286   */
287 
288 /**
289   * @}
290   */
291 
292 /**
293   * @}
294   */
295 
296 /** @defgroup GPIOEx_Private  GPIOEx Private
297  * @{
298  */
299 /**
300  *  IS_GPIO_AF macro definition
301  */
302 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_EVENTOUT) || ((__AF__) == GPIO_AF1_LCD)      || \
303                             ((__AF__) == GPIO_AF0_SPI1)     || ((__AF__) == GPIO_AF1_I2C1)     || \
304                             ((__AF__) == GPIO_AF0_TIM21)    || ((__AF__) == GPIO_AF1_SPI2)     || \
305                             ((__AF__) == GPIO_AF0_MCO)      || ((__AF__) == GPIO_AF1_TIM21)    || \
306                             ((__AF__) == GPIO_AF0_SWDIO)    || ((__AF__) == GPIO_AF2_TIM2)     || \
307                             ((__AF__) == GPIO_AF0_SWCLK)    || ((__AF__) == GPIO_AF2_TIM3)     || \
308                             ((__AF__) == GPIO_AF0_USART1)   || ((__AF__) == GPIO_AF2_USB)      || \
309                             ((__AF__) == GPIO_AF0_SPI2)     || ((__AF__) == GPIO_AF2_EVENTOUT) || \
310                             ((__AF__) == GPIO_AF0_LPTIM1)   || ((__AF__) == GPIO_AF2_LPTIM1)   || \
311                             ((__AF__) == GPIO_AF0_TIM2)     || ((__AF__) == GPIO_AF2_LPUART1)  || \
312                             ((__AF__) == GPIO_AF0_LPUART1)  || ((__AF__) == GPIO_AF2_MCO)      || \
313                             ((__AF__) == GPIO_AF0_USART2)   || ((__AF__) == GPIO_AF2_RTC)      || \
314                             ((__AF__) == GPIO_AF0_USB)      || ((__AF__) == GPIO_AF2_SPI2)     || \
315                             ((__AF__) == GPIO_AF0_TIM2)     || ((__AF__) == GPIO_AF2_USART5)   || \
316                             ((__AF__) == GPIO_AF3_TSC)      || ((__AF__) == GPIO_AF2_SPI1)     || \
317                             ((__AF__) == GPIO_AF3_EVENTOUT) || ((__AF__) == GPIO_AF4_USART2)   || \
318                             ((__AF__) == GPIO_AF3_I2C1)     || ((__AF__) == GPIO_AF4_LPUART1)  || \
319                             ((__AF__) == GPIO_AF5_TIM21)    || ((__AF__) == GPIO_AF4_EVENTOUT) || \
320                             ((__AF__) == GPIO_AF5_TIM2)     || ((__AF__) == GPIO_AF4_USART1)   || \
321                             ((__AF__) == GPIO_AF5_USART1)   || ((__AF__) == GPIO_AF4_TIM22)    || \
322                             ((__AF__) == GPIO_AF5_TIM22)    || ((__AF__) == GPIO_AF4_TIM3)     || \
323                             ((__AF__) == GPIO_AF5_SPI2)     || ((__AF__) == GPIO_AF4_I2C1)     || \
324                             ((__AF__) == GPIO_AF5_I2C2)     || ((__AF__) == GPIO_AF6_USART4)   || \
325                             ((__AF__) == GPIO_AF7_COMP2)    || ((__AF__) == GPIO_AF6_LPUART1)  || \
326                             ((__AF__) == GPIO_AF7_COMP1)    || ((__AF__) == GPIO_AF6_I2C1)     || \
327                             ((__AF__) == GPIO_AF7_I2C3)     || ((__AF__) == GPIO_AF6_EVENTOUT) || \
328                             ((__AF__) == GPIO_AF7_LPUART1)  || ((__AF__) == GPIO_AF6_I2C2)     || \
329                             ((__AF__) == GPIO_AF6_USART5)   || ((__AF__) == GPIO_AF6_TIM21))
330 
331 
332 #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
333         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
334                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
335                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
336                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
337                                         ((__AF__) ==  GPIO_AF4_USART2)    ||   \
338                                         ((__AF__) ==  GPIO_AF5_TIM22)     ||   \
339                                         ((__AF__) ==  GPIO_AF6_USART4)    ||   \
340                                         ((__AF__) ==  GPIO_AF7_I2C3)))    ||   \
341          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
342                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
343                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
344                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
345                                         ((__AF__) ==  GPIO_AF4_TIM3)      ||   \
346                                         ((__AF__) ==  GPIO_AF5_I2C2)      ||   \
347                                         ((__AF__) ==  GPIO_AF6_USART4)    ||   \
348                                         ((__AF__) ==  GPIO_AF7_LPUART1))) ||   \
349          (((__INSTANCE__) == GPIOC) && (((__AF__) ==  GPIO_AF0_LPTIM1)    ||   \
350                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
351                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
352                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
353                                         ((__AF__) ==  GPIO_AF6_USART4)    ||   \
354                                         ((__AF__) ==  GPIO_AF7_I2C3)))    ||   \
355          (((__INSTANCE__) == GPIOD) && (((__AF__) ==  GPIO_AF0_LPUART1)   ||   \
356                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
357                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
358                                         ((__AF__) ==  GPIO_AF6_USART5)))  ||   \
359          (((__INSTANCE__) == GPIOE) && (((__AF__) ==  GPIO_AF0_TIM22)     ||   \
360                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
361                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
362                                         ((__AF__) ==  GPIO_AF6_USART4)))  ||   \
363          (((__INSTANCE__) == GPIOH) && (((__AF__) ==  GPIO_AF0_USB))))
364 
365  /**
366   * @}
367   */
368 #endif /* (STM32L083xx) || (STM32L073xx) */
369 
370 /*----------------------------------------------------------------------------*/
371 /*------------------------- STM32L082xx and STM32L072xx-----------------------*/
372 /*----------------------------------------------------------------------------*/
373 #if defined (STM32L082xx) || defined (STM32L072xx)
374 
375 /* The table below gives an overview of the different alternate functions per port.
376  * For more details refer yourself to the product data sheet.
377  */
378 
379 
380 /*     |   AF0  |   AF1  |   AF2  |   AF3  |   AF4  |   AF5  |   AF6  |   AF7  |
381  *______________________________________________________________________________
382  * PA0 |        |        |TIM2_C1 |TSC     |USART2  |TIM2_TR |USART4  |COMP1   |
383  * PA1 |EVENTOUT|        |TIM2_C2 |TSC     |USART2  |TIM21_TR|USART4  |        |
384  * PA2 |TIM21_C1|        |TIM2_C3 |TSC     |USART2  |        |LPUART1 |COMP2   |
385  * PA3 |TIM21_C2|        |TIM2_C4 |TSC     |USART2  |        |LPUART1 |        |
386  * PA4 |SPI1    |        |        |TSC     |USART2  |TIM22_TR|        |        |
387  * PA5 |SPI1    |        |TIM2_TR |TSC     |        |TIM2_C1 |        |        |
388  * PA6 |SPI1    |        |TIM3_C1 |TSC     |LPUART1 |TIM22_C1|EVENTOUT|COMP1   |
389  * PA7 |SPI1    |        |TIM3_C2 |TSC     |        |TIM22_C2|EVENTOUT|COMP2   |
390  * PA8 |MCO     |        |USB     |EVENTOUT|USART1  |        |        |I2C3    |
391  * PA9 |MCO     |        |        |TSC     |USART1  |        |I2C1    |I2C3    |
392  * PA10|        |        |        |TSC     |USART1  |        |I2C1    |        |
393  * PA11|SPI1    |        |EVENTOUT|TSC     |USART1  |        |I2C2    |COMP1   |
394  * PA12|SPI1    |        |EVENTOUT|TSC     |USART1  |        |I2C2    |COMP2   |
395  * PA13|SWDIO   |        |USB     |        |        |        |LPUART1 |        |
396  * PA14|SWCLK   |        |        |        |USART2  |        |LPUART1 |        |
397  * PA15|SPI1    |        |TIM2_TR |EVENTOUT|USART2  |TIM2_C1 |USART4  |        |
398  *______________________________________________________________________________
399  * PB0 |EVENTOUT|        |TIM3_C3 |TSC     |        |        |        |        |
400  * PB1 |        |        |TIM3_C4 |TSC     |LPUART1 |        |        |        |
401  * PB2 |        |        |LPTIM1_O|TSC     |        |        |        |I2C3    |
402  * PB3 |SPI1    |        |TIM2_C2 |TSC     |EVENTOUT|USART1  |USART5  |        |
403  * PB4 |SPI1    |        |TIM3_C1 |TSC     |TIM22_C1|USART1  |USART5  |I2C3    |
404  * PB5 |SPI1    |        |LPTIM1_I|I2C1    |TIM3_C2 |USART1  |USART5  |        |
405  *     |        |        |        |        |TIM22_C2|        |        |        |
406  * PB6 |USART1  |I2C1    |LPTIM1_T|TSC     |        |        |        |        |
407  * PB7 |USART1  |I2C1    |LPTIM1_I|TSC     |        |        |USART4  |        |
408  * PB8 |        |        |        |TSC     |I2C1    |        |        |        |
409  * PB9 |        |        |EVENTOUT|        |I2C1    |SPI2    |        |        |
410  * PB10|        |        |TIM2_C3 |TSC     |LPUART1 |SPI2    |I2C2    |LPUART1 |
411  * PB11|EVENTOUT|        |TIM2_C4 |TSC     |LPUART1 |        |I2C2    |LPUART1 |
412  * PB12|SPI2    |        |LPUART1 |TSC     |        |I2C2    |EVENTOUT|        |
413  * PB13|SPI2    |        |MCO     |TSC     |LPUART1 |I2C2    |TIM21_C1|        |
414  * PB14|SPI2    |        |RTC     |TSC     |LPUART1 |I2C2    |TIM21_C2|        |
415  * PB15|SPI2    |        |RTC     |        |        |        |        |        |
416  *______________________________________________________________________________
417  * PC0 |LPTIM1_I|        |EVENTOUT|TSC     |        |        |LPUART1 |I2C3    |
418  * PC1 |LPTIM1_O|        |EVENTOUT|TSC     |        |        |LPUART1 |I2C3    |
419  * PC2 |LPTIM1_I|        |SPI2    |TSC     |        |        |        |        |
420  * PC3 |LPTIM1_T|        |SPI2    |TSC     |        |        |        |        |
421  * PC4 |EVENTOUT|        |LPUART1 |        |        |        |        |        |
422  * PC5 |        |        |LPUART1 |TSC     |        |        |        |        |
423  * PC6 |TIM22_C1|        |TIM3_C1 |TSC     |        |        |        |        |
424  * PC7 |TIM22_C2|        |TIM3_C2 |TSC     |        |        |        |        |
425  * PC8 |TIM22_TR|        |TIM3_C3 |TSC     |        |        |        |        |
426  * PC9 |TIM21_TR|        |USB     |TSC     |        |        |        |I2C3    |
427  *     |        |        |TIM3_C4 |        |        |        |        |        |
428  * PC10|LPUART1 |        |        |        |        |        |USART4  |        |
429  * PC11|LPUART1 |        |        |        |        |        |USART4  |        |
430  * PC12|        |        |USART5  |        |        |        |USART4  |        |
431  * PC13|        |        |        |        |        |        |        |        |
432  * PC14|        |        |        |        |        |        |        |        |
433  * PC15|        |        |        |        |        |        |        |        |
434  *______________________________________________________________________________
435  * PD0 |TIM21_C1|SPI2    |        |        |        |        |        |        |
436  * PD1 |        |SPI2    |        |        |        |        |        |        |
437  * PD2 |LPUART1 |        |TIM3_TR |        |        |        |USART5  |        |
438  * PD3 |USART2  |        |SPI2    |        |        |        |        |        |
439  * PD4 |USART2  |SPI2    |        |        |        |        |        |        |
440  * PD5 |USART2  |        |        |        |        |        |        |        |
441  * PD6 |USART2  |        |        |        |        |        |        |        |
442  * PD7 |USART2  |TIM21_C2|        |        |        |        |        |        |
443  * PD8 |LPUART1 |        |        |        |        |        |        |        |
444  * PD9 |LPUART1 |        |        |        |        |        |        |        |
445  * PD10|        |        |        |        |        |        |        |        |
446  * PD11|LPUART1 |        |        |        |        |        |        |        |
447  * PD12|LPUART1 |        |        |        |        |        |        |        |
448  * PD13|        |        |        |        |        |        |        |        |
449  * PD14|        |        |        |        |        |        |        |        |
450  * PD15|USB     |        |        |        |        |        |        |        |
451  *______________________________________________________________________________
452  * PE0 |        |        |EVENTOUT|        |        |        |        |        |
453  * PE1 |        |        |EVENTOUT|        |        |        |        |        |
454  * PE2 |        |        |TIM3_TR |        |        |        |        |        |
455  * PE3 |TIM22_C1|        |TIM3_C1 |        |        |        |        |        |
456  * PE4 |TIM22_C2|        |TIM3_C2 |        |        |        |        |        |
457  * PE5 |TIM21_C1|        |TIM3_C3 |        |        |        |        |        |
458  * PE6 |TIM21_C2|        |TIM3_C4 |        |        |        |        |        |
459  * PE7 |        |        |        |        |        |        |USART5  |        |
460  * PE8 |        |        |        |        |        |        |USART4  |        |
461  * PE9 |TIM2_C1 |        |TIM2_TR |        |        |        |USART4  |        |
462  * PE10|TIM2_C2 |        |        |        |        |        |USART5  |        |
463  * PE11|TIM2_C3 |        |        |        |        |        |USART5  |        |
464  * PE12|TIM2_C4 |        |SPI1    |        |        |        |        |        |
465  * PE13|        |        |SPI1    |        |        |        |        |        |
466  * PE14|        |        |SPI1    |        |        |        |        |        |
467  * PE15|        |        |SPI1    |        |        |        |        |        |
468  *______________________________________________________________________________
469  * PH0 |USB     |        |        |        |        |        |        |        |
470  * PH1 |        |        |        |        |        |        |        |        |
471  * PH9 |        |        |        |        |        |        |        |        |
472  * PH10|        |        |        |        |        |        |        |        |
473  *
474  */
475 
476 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
477  * @{
478  */
479 
480 /*
481  * Alternate function AF0
482  */
483 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
484 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
485 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
486 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
487 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
488 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
489 #define GPIO_AF0_USART1        ((uint8_t)0x00U)  /* USART1 Alternate Function mapping   */
490 #define GPIO_AF0_SPI2          ((uint8_t)0x00U)  /* SPI2 Alternate Function mapping     */
491 #define GPIO_AF0_LPTIM1        ((uint8_t)0x00U)  /* LPTIM1 Alternate Function mapping   */
492 #define GPIO_AF0_TIM22         ((uint8_t)0x00U)  /* TIM22 Alternate Function mapping    */
493 #define GPIO_AF0_LPUART1       ((uint8_t)0x00U)  /* LPUART1 Alternate Function mapping  */
494 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
495 #define GPIO_AF0_TIM2          ((uint8_t)0x00U)  /* TIM2 Alternate Function mapping     */
496 #define GPIO_AF0_USB           ((uint8_t)0x00U)  /* USB Alternate Function mapping      */
497 /**
498   *
499   */
500 
501 /*
502  * Alternate function AF1
503  */
504 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping  */
505 #define GPIO_AF1_SPI2          ((uint8_t)0x01U)  /* SPI2 Alternate Function mapping  */
506 #define GPIO_AF1_TIM21         ((uint8_t)0x01U)  /* TIM21 Alternate Function mapping */
507 /**
508   *
509   */
510 
511 /*
512  * Alternate function AF2
513  */
514 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping       */
515 #define GPIO_AF2_TIM3          ((uint8_t)0x02U)  /* TIM3 Alternate Function mapping       */
516 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping   */
517 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping     */
518 #define GPIO_AF2_LPUART1       ((uint8_t)0x02U)  /* LPUART1 Alternate Function mapping    */
519 #define GPIO_AF2_MCO           ((uint8_t)0x02U)  /* MCO Alternate Function mapping        */
520 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping        */
521 #define GPIO_AF2_SPI2          ((uint8_t)0x02U)  /* SPI2 Alternate Function mapping       */
522 #define GPIO_AF2_USART5        ((uint8_t)0x02U)  /* USART5 Alternate Function mapping     */
523 #define GPIO_AF2_SPI1          ((uint8_t)0x02U)  /* SPI1 Alternate Function mapping       */
524 #define GPIO_AF2_USB           ((uint8_t)0x00U)  /* USB Alternate Function mapping        */
525 /**
526   *
527   */
528 
529 /*
530  * Alternate function AF3
531  */
532 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping   */
533 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping       */
534 #define GPIO_AF3_TSC           ((uint8_t)0x03U)  /* TSC  Alternate Function mapping       */
535 /**
536   *
537   */
538 
539 /*
540  * Alternate function AF4
541  */
542 #define GPIO_AF4_USART2          ((uint8_t)0x04U)  /* USART2 Alternate Function mapping   */
543 #define GPIO_AF4_LPUART1         ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping  */
544 #define GPIO_AF4_USART1          ((uint8_t)0x04U)  /* USART1 Alternate Function mapping   */
545 #define GPIO_AF4_EVENTOUT        ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping */
546 #define GPIO_AF4_TIM22           ((uint8_t)0x04U)  /* TIM22 Alternate Function mapping    */
547 #define GPIO_AF4_TIM3            ((uint8_t)0x04U)  /* TIM3 Alternate Function mapping     */
548 #define GPIO_AF4_I2C1            ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping     */
549 /**
550   *
551   */
552 
553 /*
554  * Alternate function AF5
555  */
556 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
557 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
558 #define GPIO_AF5_TIM22         ((uint8_t)0x05U)  /* TIM22 Alternate Function mapping    */
559 #define GPIO_AF5_USART1        ((uint8_t)0x05U)  /* USART1 Alternate Function mapping   */
560 #define GPIO_AF5_SPI2          ((uint8_t)0x05U)  /* SPI2 Alternate Function mapping      */
561 #define GPIO_AF5_I2C2          ((uint8_t)0x05U)  /* I2C2 Alternate Function mapping      */
562 /**
563   *
564   */
565 
566 /*
567   * Alternate function AF6
568  */
569 #define GPIO_AF6_USART4        ((uint8_t)0x06U)  /* USART4 Alternate Function mapping    */
570 #define GPIO_AF6_LPUART1       ((uint8_t)0x06U)  /* LPUART1 Alternate Function mapping   */
571 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping  */
572 #define GPIO_AF6_I2C1          ((uint8_t)0x06U)  /* I2C1 Alternate Function mapping      */
573 #define GPIO_AF6_I2C2          ((uint8_t)0x06U)  /* I2C2 Alternate Function mapping      */
574 #define GPIO_AF6_USART5        ((uint8_t)0x06U)  /* USART5 Alternate Function mapping    */
575 #define GPIO_AF6_TIM21         ((uint8_t)0x06U)  /* TIM21 Alternate Function mapping     */
576 /**
577   *
578   */
579 
580  /*
581   * Alternate function AF7
582  */
583 #define GPIO_AF7_COMP1        ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
584 #define GPIO_AF7_COMP2        ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
585 #define GPIO_AF7_I2C3         ((uint8_t)0x07U)  /* I2C3 Alternate Function mapping      */
586 #define GPIO_AF7_LPUART1      ((uint8_t)0x07U)  /* LPUART1 Alternate Function mapping   */
587 /**
588   *
589   */
590 
591  /**
592   * @}
593   */
594 
595 /**
596   * @}
597   */
598 
599 /** @defgroup GPIOEx_Private  GPIOEx Private
600  * @{
601  */
602 /**
603  * @brief IS_GPIO_AF macro definition
604  */
605 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_EVENTOUT)  || ((__AF__) == GPIO_AF6_TIM21)    || \
606                             ((__AF__) == GPIO_AF0_SPI1)      || ((__AF__) == GPIO_AF1_I2C1)     || \
607                             ((__AF__) == GPIO_AF0_TIM21)     || ((__AF__) == GPIO_AF1_SPI2)     || \
608                             ((__AF__) == GPIO_AF0_MCO)       || ((__AF__) == GPIO_AF1_TIM21)    || \
609                             ((__AF__) == GPIO_AF0_SWDIO)     || ((__AF__) == GPIO_AF2_TIM2)     || \
610                             ((__AF__) == GPIO_AF0_SWCLK)     || ((__AF__) == GPIO_AF2_TIM3)     || \
611                             ((__AF__) == GPIO_AF0_USART1)    || ((__AF__) == GPIO_AF2_USB)      || \
612                             ((__AF__) == GPIO_AF0_SPI2)      || ((__AF__) == GPIO_AF2_EVENTOUT) || \
613                             ((__AF__) == GPIO_AF0_LPTIM1)    || ((__AF__) == GPIO_AF2_LPTIM1)   || \
614                             ((__AF__) == GPIO_AF0_TIM2)      || ((__AF__) == GPIO_AF2_LPUART1)  || \
615                             ((__AF__) == GPIO_AF0_LPUART1)   || ((__AF__) == GPIO_AF2_MCO)      || \
616                             ((__AF__) == GPIO_AF0_USART2)    || ((__AF__) == GPIO_AF2_RTC)      || \
617                             ((__AF__) == GPIO_AF0_USB)       || ((__AF__) == GPIO_AF2_SPI2)     || \
618                             ((__AF__) == GPIO_AF0_TIM2)      || ((__AF__) == GPIO_AF2_USART5)   || \
619                             ((__AF__) == GPIO_AF3_TSC)       || ((__AF__) == GPIO_AF2_SPI1)     || \
620                             ((__AF__) == GPIO_AF3_EVENTOUT)  || ((__AF__) == GPIO_AF4_USART2)   || \
621                             ((__AF__) == GPIO_AF3_I2C1)      || ((__AF__) == GPIO_AF4_LPUART1)  || \
622                             ((__AF__) == GPIO_AF5_TIM21)     || ((__AF__) == GPIO_AF4_EVENTOUT) || \
623                             ((__AF__) == GPIO_AF5_TIM2)      || ((__AF__) == GPIO_AF4_USART1)   || \
624                             ((__AF__) == GPIO_AF5_USART1)    || ((__AF__) == GPIO_AF4_TIM22)    || \
625                             ((__AF__) == GPIO_AF5_TIM22)     || ((__AF__) == GPIO_AF4_TIM3)     || \
626                             ((__AF__) == GPIO_AF5_SPI2)      || ((__AF__) == GPIO_AF4_I2C1)     || \
627                             ((__AF__) == GPIO_AF5_I2C2)      || ((__AF__) == GPIO_AF6_USART4)   || \
628                             ((__AF__) == GPIO_AF7_COMP2)     || ((__AF__) == GPIO_AF6_LPUART1)  || \
629                             ((__AF__) == GPIO_AF7_COMP1)     || ((__AF__) == GPIO_AF6_I2C1)     || \
630                             ((__AF__) == GPIO_AF7_I2C3)      || ((__AF__) == GPIO_AF6_EVENTOUT) || \
631                             ((__AF__) == GPIO_AF7_LPUART1)   || ((__AF__) == GPIO_AF6_I2C2)     || \
632                             ((__AF__) == GPIO_AF6_USART5))
633 
634 #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
635         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
636                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
637                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
638                                         ((__AF__) ==  GPIO_AF4_USART2)    ||   \
639                                         ((__AF__) ==  GPIO_AF5_TIM22)     ||   \
640                                         ((__AF__) ==  GPIO_AF6_EVENTOUT)  ||   \
641                                         ((__AF__) ==  GPIO_AF7_COMP1)))   ||   \
642          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
643                                         ((__AF__) ==  GPIO_AF1_I2C1)      ||   \
644                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
645                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
646                                         ((__AF__) ==  GPIO_AF4_TIM22)     ||   \
647                                         ((__AF__) ==  GPIO_AF5_I2C2)      ||   \
648                                         ((__AF__) ==  GPIO_AF6_USART4)    ||   \
649                                         ((__AF__) ==  GPIO_AF7_LPUART1))) ||   \
650          (((__INSTANCE__) == GPIOC) && (((__AF__) ==  GPIO_AF0_TIM22)     ||   \
651                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
652                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
653                                         ((__AF__) ==  GPIO_AF6_USART4)    ||   \
654                                         ((__AF__) ==  GPIO_AF7_I2C3)))    ||   \
655          (((__INSTANCE__) == GPIOD) && (((__AF__) ==  GPIO_AF0_TIM21)     ||   \
656                                         ((__AF__) ==  GPIO_AF1_TIM21)     ||   \
657                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
658                                         ((__AF__) ==  GPIO_AF6_USART5)))  ||   \
659          (((__INSTANCE__) == GPIOE) && (((__AF__) ==  GPIO_AF0_TIM22)     ||   \
660                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
661                                         ((__AF__) ==  GPIO_AF6_USART4)))  ||   \
662          (((__INSTANCE__) == GPIOH) && (((__AF__) ==  GPIO_AF0_USB))))
663 
664  /**
665   * @}
666   */
667 #endif /* (STM32L082xx) || (STM32L072xx) */
668 
669 
670 /*----------------------------------------------------------------------------*/
671 /*------------------------- STM32L081xx and STM32L071xx-----------------------*/
672 /*----------------------------------------------------------------------------*/
673 #if defined (STM32L081xx) || defined (STM32L071xx)
674 
675 /* The table below gives an overview of the different alternate functions per port.
676  * For more details refer yourself to the product data sheet.
677  *
678  */
679 
680 
681 /*     |   AF0  |   AF1  |   AF2  |   AF3  |   AF4  |   AF5  |   AF6  |   AF7  |
682  *______________________________________________________________________________
683  * PA0 |        |        |TIM2_C1 |        |USART2  |TIM2_TR |USART4  |COMP1   |
684  * PA1 |EVENTOUT|        |TIM2_C2 |        |USART2  |TIM21_TR|USART4  |        |
685  * PA2 |TIM21_C1|        |TIM2_C3 |        |USART2  |        |LPUART1 |COMP2   |
686  * PA3 |TIM21_C2|        |TIM2_C4 |        |USART2  |        |LPUART1 |        |
687  * PA4 |SPI1    |        |        |        |USART2  |TIM22_TR|        |        |
688  * PA5 |SPI1    |        |TIM2_TR |        |        |TIM2_C1 |        |        |
689  * PA6 |SPI1    |        |TIM3_C1 |        |LPUART1 |TIM22_C1|EVENTOUT|COMP1   |
690  * PA7 |SPI1    |        |TIM3_C2 |        |        |TIM22_C2|EVENTOUT|COMP2   |
691  * PA8 |MCO     |        |        |EVENTOUT|USART1  |        |        |I2C3    |
692  * PA9 |MCO     |        |        |        |USART1  |        |I2C1    |I2C3    |
693  * PA10|        |        |        |        |USART1  |        |I2C1    |        |
694  * PA11|SPI1    |        |EVENTOUT|        |USART1  |        |I2C2    |COMP1   |
695  * PA12|SPI1    |        |EVENTOUT|        |USART1  |        |I2C2    |COMP2   |
696  * PA13|SWDIO   |        |        |        |        |        |LPUART1 |        |
697  * PA14|SWCLK   |        |        |        |USART2  |        |LPUART1 |        |
698  * PA15|SPI1    |        |TIM2_TR |EVENTOUT|USART2  |TIM2_C1 |USART4  |        |
699  *______________________________________________________________________________
700  * PB0 |EVENTOUT|        |TIM3_C3 |        |        |        |        |        |
701  * PB1 |        |        |TIM3_C4 |        |LPUART1 |        |        |        |
702  * PB2 |        |        |LPTIM1_O|        |        |        |        |I2C3    |
703  * PB3 |SPI1    |        |TIM2_C2 |        |EVENTOUT|USART1  |USART5  |        |
704  * PB4 |SPI1    |        |TIM3_C1 |        |TIM22_C1|USART1  |USART5  |I2C3    |
705  * PB5 |SPI1    |        |LPTIM1_I|I2C1    |TIM3_C2 |USART1  |USART5  |        |
706  *     |        |        |        |        |TIM22_C2|        |        |        |
707  * PB6 |USART1  |I2C1    |LPTIM1_T|        |        |        |        |        |
708  * PB7 |USART1  |I2C1    |LPTIM1_I|        |        |        |USART4  |        |
709  * PB8 |        |        |        |        |I2C1    |        |        |        |
710  * PB9 |        |        |EVENTOUT|        |I2C1    |SPI2    |        |        |
711  * PB10|        |        |TIM2_C3 |        |LPUART1 |SPI2    |I2C2    |LPUART1 |
712  * PB11|EVENTOUT|        |TIM2_C4 |        |LPUART1 |        |I2C2    |LPUART1 |
713  * PB12|SPI2    |        |LPUART1 |        |        |I2C2    |EVENTOUT|        |
714  * PB13|SPI2    |        |MCO     |        |LPUART1 |I2C2    |TIM21_C1|        |
715  * PB14|SPI2    |        |RTC     |        |LPUART1 |I2C2    |TIM21_C2|        |
716  * PB15|SPI2    |        |RTC     |        |        |        |        |        |
717  *______________________________________________________________________________
718  * PC0 |LPTIM1_I|        |EVENTOUT|        |        |        |LPUART1 |I2C3    |
719  * PC1 |LPTIM1_O|        |EVENTOUT|        |        |        |LPUART1 |I2C3    |
720  * PC2 |LPTIM1_I|        |SPI2    |        |        |        |        |        |
721  * PC3 |LPTIM1_T|        |SPI2    |        |        |        |        |        |
722  * PC4 |EVENTOUT|        |LPUART1 |        |        |        |        |        |
723  * PC5 |        |        |LPUART1 |        |        |        |        |        |
724  * PC6 |TIM22_C1|        |TIM3_C1 |        |        |        |        |        |
725  * PC7 |TIM22_C2|        |TIM3_C2 |        |        |        |        |        |
726  * PC8 |TIM22_TR|        |TIM3_C3 |        |        |        |        |        |
727  * PC9 |TIM21_TR|        |        |        |        |        |        |I2C3    |
728  *     |        |        |TIM3_C4 |        |        |        |        |        |
729  * PC10|LPUART1 |        |        |        |        |        |USART4  |        |
730  * PC11|LPUART1 |        |        |        |        |        |USART4  |        |
731  * PC12|        |        |USART5  |        |        |        |USART4  |        |
732  * PC13|        |        |        |        |        |        |        |        |
733  * PC14|        |        |        |        |        |        |        |        |
734  * PC15|        |        |        |        |        |        |        |        |
735  *______________________________________________________________________________
736  * PD0 |TIM21_C1|SPI2    |        |        |        |        |        |        |
737  * PD1 |        |SPI2    |        |        |        |        |        |        |
738  * PD2 |LPUART1 |        |TIM3_TR |        |        |        |USART5  |        |
739  * PD3 |USART2  |        |SPI2    |        |        |        |        |        |
740  * PD4 |USART2  |SPI2    |        |        |        |        |        |        |
741  * PD5 |USART2  |        |        |        |        |        |        |        |
742  * PD6 |USART2  |        |        |        |        |        |        |        |
743  * PD7 |USART2  |TIM21_C2|        |        |        |        |        |        |
744  * PD8 |LPUART1 |        |        |        |        |        |        |        |
745  * PD9 |LPUART1 |        |        |        |        |        |        |        |
746  * PD10|        |        |        |        |        |        |        |        |
747  * PD11|LPUART1 |        |        |        |        |        |        |        |
748  * PD12|LPUART1 |        |        |        |        |        |        |        |
749  * PD13|        |        |        |        |        |        |        |        |
750  * PD14|        |        |        |        |        |        |        |        |
751  * PD15|        |        |        |        |        |        |        |        |
752  *______________________________________________________________________________
753  * PE0 |        |        |EVENTOUT|        |        |        |        |        |
754  * PE1 |        |        |EVENTOUT|        |        |        |        |        |
755  * PE2 |        |        |TIM3_TR |        |        |        |        |        |
756  * PE3 |TIM22_C1|        |TIM3_C1 |        |        |        |        |        |
757  * PE4 |TIM22_C2|        |TIM3_C2 |        |        |        |        |        |
758  * PE5 |TIM21_C1|        |TIM3_C3 |        |        |        |        |        |
759  * PE6 |TIM21_C2|        |TIM3_C4 |        |        |        |        |        |
760  * PE7 |        |        |        |        |        |        |USART5  |        |
761  * PE8 |        |        |        |        |        |        |USART4  |        |
762  * PE9 |TIM2_C1 |        |TIM2_TR |        |        |        |USART4  |        |
763  * PE10|TIM2_C2 |        |        |        |        |        |USART5  |        |
764  * PE11|TIM2_C3 |        |        |        |        |        |USART5  |        |
765  * PE12|TIM2_C4 |        |SPI1    |        |        |        |        |        |
766  * PE13|        |        |SPI1    |        |        |        |        |        |
767  * PE14|        |        |SPI1    |        |        |        |        |        |
768  * PE15|        |        |SPI1    |        |        |        |        |        |
769  *______________________________________________________________________________
770  * PH0 |        |        |        |        |        |        |        |        |
771  * PH1 |        |        |        |        |        |        |        |        |
772  * PH9 |        |        |        |        |        |        |        |        |
773  * PH10|        |        |        |        |        |        |        |        |
774  *
775  */
776 
777 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
778  * @{
779  */
780 
781 /*
782  * Alternate function AF0
783  *
784  */
785 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
786 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
787 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
788 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
789 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
790 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
791 #define GPIO_AF0_USART1        ((uint8_t)0x00U)  /* USART1 Alternate Function mapping   */
792 #define GPIO_AF0_SPI2          ((uint8_t)0x00U)  /* SPI2 Alternate Function mapping     */
793 #define GPIO_AF0_LPTIM1        ((uint8_t)0x00U)  /* LPTIM1 Alternate Function mapping   */
794 #define GPIO_AF0_TIM22         ((uint8_t)0x00U)  /* TIM22 Alternate Function mapping    */
795 #define GPIO_AF0_LPUART1       ((uint8_t)0x00U)  /* LPUART1 Alternate Function mapping  */
796 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
797 #define GPIO_AF0_TIM2          ((uint8_t)0x00U)  /* TIM2 Alternate Function mapping     */
798 /**
799   *
800   */
801 
802 /*
803  * Alternate function AF1
804  *
805  */
806 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping  */
807 #define GPIO_AF1_SPI2          ((uint8_t)0x01U)  /* SPI2 Alternate Function mapping  */
808 #define GPIO_AF1_TIM21         ((uint8_t)0x01U)  /* TIM21 Alternate Function mapping */
809 /**
810   *
811   */
812 
813 /*
814  * Alternate function AF2
815  *
816  */
817 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping     */
818 #define GPIO_AF2_TIM3          ((uint8_t)0x02U)  /* TIM3 Alternate Function mapping     */
819 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping */
820 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping   */
821 #define GPIO_AF2_LPUART1       ((uint8_t)0x02U)  /* LPUART1 Alternate Function mapping  */
822 #define GPIO_AF2_MCO           ((uint8_t)0x02U)  /* MCO Alternate Function mapping      */
823 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping      */
824 #define GPIO_AF2_SPI2          ((uint8_t)0x02U)  /* SPI2 Alternate Function mapping     */
825 #define GPIO_AF2_USART5        ((uint8_t)0x02U)  /* USART5 Alternate Function mapping   */
826 #define GPIO_AF2_SPI1          ((uint8_t)0x02U)  /* SPI1 Alternate Function mapping     */
827 /**
828   *
829   */
830 
831 /*
832  * Alternate function AF3
833  * @{
834  */
835 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping */
836 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping     */
837 /**
838   *
839   */
840 
841 /*
842  * Alternate function AF4
843  *
844  */
845 #define GPIO_AF4_USART2          ((uint8_t)0x04U)  /* USART2 Alternate Function mapping   */
846 #define GPIO_AF4_LPUART1         ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping  */
847 #define GPIO_AF4_USART1          ((uint8_t)0x04U)  /* USART1 Alternate Function mapping   */
848 #define GPIO_AF4_EVENTOUT        ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping */
849 #define GPIO_AF4_TIM22           ((uint8_t)0x04U)  /* TIM22 Alternate Function mapping    */
850 #define GPIO_AF4_TIM3            ((uint8_t)0x04U)  /* TIM3 Alternate Function mapping    */
851 #define GPIO_AF4_I2C1            ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping    */
852 /**
853   *
854   */
855 
856 /*
857  * Alternate function AF5
858  *
859  */
860 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
861 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
862 #define GPIO_AF5_TIM22         ((uint8_t)0x05U)  /* TIM22 Alternate Function mapping    */
863 #define GPIO_AF5_USART1        ((uint8_t)0x05U)  /* USART1 Alternate Function mapping   */
864 #define GPIO_AF5_SPI2          ((uint8_t)0x05U)  /* SPI2 Alternate Function mapping       */
865 #define GPIO_AF5_I2C2          ((uint8_t)0x05U)  /* I2C2 Alternate Function mapping       */
866 /**
867   *
868   */
869 
870 /*
871  * Alternate function AF6
872  *
873  */
874 #define GPIO_AF6_USART4        ((uint8_t)0x06U)  /* USART4 Alternate Function mapping   */
875 #define GPIO_AF6_LPUART1       ((uint8_t)0x06U)  /* LPUART1 Alternate Function mapping  */
876 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping  */
877 #define GPIO_AF6_I2C1          ((uint8_t)0x06U)  /* I2C1 Alternate Function mapping  */
878 #define GPIO_AF6_I2C2          ((uint8_t)0x06U)  /* I2C2 Alternate Function mapping  */
879 #define GPIO_AF6_USART5        ((uint8_t)0x06U)  /* USART5 Alternate Function mapping   */
880 #define GPIO_AF6_TIM21         ((uint8_t)0x06U)  /* TIM21 Alternate Function mapping    */
881 /**
882   *
883   */
884 
885 /*
886  * Alternate function AF7
887  *
888  */
889 #define GPIO_AF7_COMP1        ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
890 #define GPIO_AF7_COMP2        ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
891 #define GPIO_AF7_I2C3         ((uint8_t)0x07U)  /* I2C3 Alternate Function mapping     */
892 #define GPIO_AF7_LPUART1      ((uint8_t)0x07U)  /* LPUART1 Alternate Function mapping     */
893 /**
894   *
895   */
896 
897 /**
898   * @}
899   */
900 
901 /**
902   * @}
903   */
904 
905 /** @defgroup GPIOEx_Private  GPIOEx Private
906  * @{
907  */
908 
909  /**
910  * IS_GPIO_AF macro definition
911  */
912 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_EVENTOUT) || ((__AF__) == GPIO_AF7_LPUART1)  || \
913                             ((__AF__) == GPIO_AF0_SPI1)     || ((__AF__) == GPIO_AF1_I2C1)     || \
914                             ((__AF__) == GPIO_AF0_TIM21)    || ((__AF__) == GPIO_AF1_SPI2)     || \
915                             ((__AF__) == GPIO_AF0_MCO)      || ((__AF__) == GPIO_AF1_TIM21)    || \
916                             ((__AF__) == GPIO_AF0_SWDIO)    || ((__AF__) == GPIO_AF2_TIM2)     || \
917                             ((__AF__) == GPIO_AF0_SWCLK)    || ((__AF__) == GPIO_AF2_TIM3)     || \
918                             ((__AF__) == GPIO_AF0_USART1)   || ((__AF__) == GPIO_AF6_TIM21)    || \
919                             ((__AF__) == GPIO_AF0_SPI2)     || ((__AF__) == GPIO_AF2_EVENTOUT) || \
920                             ((__AF__) == GPIO_AF0_LPTIM1)   || ((__AF__) == GPIO_AF2_LPTIM1)   || \
921                             ((__AF__) == GPIO_AF0_TIM2)     || ((__AF__) == GPIO_AF2_LPUART1)  || \
922                             ((__AF__) == GPIO_AF0_LPUART1)  || ((__AF__) == GPIO_AF2_MCO)      || \
923                             ((__AF__) == GPIO_AF0_USART2)   || ((__AF__) == GPIO_AF2_RTC)      || \
924                             ((__AF__) == GPIO_AF2_SPI2)     || ((__AF__) == GPIO_AF6_USART5)   || \
925                             ((__AF__) == GPIO_AF0_TIM2)     || ((__AF__) == GPIO_AF2_USART5)   || \
926                             ((__AF__) == GPIO_AF2_SPI1)     || ((__AF__) == GPIO_AF6_I2C2)     || \
927                             ((__AF__) == GPIO_AF3_EVENTOUT) || ((__AF__) == GPIO_AF4_USART2)   || \
928                             ((__AF__) == GPIO_AF3_I2C1)     || ((__AF__) == GPIO_AF4_LPUART1)  || \
929                             ((__AF__) == GPIO_AF5_TIM21)    || ((__AF__) == GPIO_AF4_EVENTOUT) || \
930                             ((__AF__) == GPIO_AF5_TIM2)     || ((__AF__) == GPIO_AF4_USART1)   || \
931                             ((__AF__) == GPIO_AF5_USART1)   || ((__AF__) == GPIO_AF4_TIM22)    || \
932                             ((__AF__) == GPIO_AF5_TIM22)    || ((__AF__) == GPIO_AF4_TIM3)     || \
933                             ((__AF__) == GPIO_AF5_SPI2)     || ((__AF__) == GPIO_AF4_I2C1)     || \
934                             ((__AF__) == GPIO_AF5_I2C2)     || ((__AF__) == GPIO_AF6_USART4)   || \
935                             ((__AF__) == GPIO_AF7_COMP2)    || ((__AF__) == GPIO_AF6_LPUART1)  || \
936                             ((__AF__) == GPIO_AF7_COMP1)    || ((__AF__) == GPIO_AF6_I2C1)     || \
937                             ((__AF__) == GPIO_AF7_I2C3)     || ((__AF__) == GPIO_AF6_EVENTOUT))
938 
939 
940 #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
941         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
942                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
943                                         ((__AF__) ==  GPIO_AF3_EVENTOUT)  ||   \
944                                         ((__AF__) ==  GPIO_AF4_USART2)    ||   \
945                                         ((__AF__) ==  GPIO_AF5_TIM22)     ||   \
946                                         ((__AF__) ==  GPIO_AF6_USART4)    ||   \
947                                         ((__AF__) ==  GPIO_AF7_COMP1)))   ||   \
948          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
949                                         ((__AF__) ==  GPIO_AF1_I2C1)      ||   \
950                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
951                                         ((__AF__) ==  GPIO_AF3_I2C1)      ||   \
952                                         ((__AF__) ==  GPIO_AF4_I2C1)      ||   \
953                                         ((__AF__) ==  GPIO_AF5_I2C2)      ||   \
954                                         ((__AF__) ==  GPIO_AF6_USART4)    ||   \
955                                         ((__AF__) ==  GPIO_AF7_LPUART1))) ||   \
956          (((__INSTANCE__) == GPIOC) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
957                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
958                                         ((__AF__) ==  GPIO_AF6_LPUART1)   ||   \
959                                         ((__AF__) ==  GPIO_AF7_I2C3)))    ||   \
960          (((__INSTANCE__) == GPIOD) && (((__AF__) ==  GPIO_AF0_LPUART1)   ||   \
961                                         ((__AF__) ==  GPIO_AF1_SPI2)      ||   \
962                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
963                                         ((__AF__) ==  GPIO_AF6_USART5)))  ||   \
964          (((__INSTANCE__) == GPIOE) && (((__AF__) ==  GPIO_AF0_TIM22)     ||   \
965                                         ((__AF__) ==  GPIO_AF2_TIM3)      ||   \
966                                         ((__AF__) ==  GPIO_AF6_USART4))))
967 
968  /**
969   * @}
970   */
971 #endif /* (STM32L081xx) || (STM32L071xx) */
972 
973 /*----------------------------------------------------------------------------*/
974 /*------------------------- STM32L053xx/STM32L063xx---------------------------*/
975 /*----------------------------------------------------------------------------*/
976 #if defined (STM32L053xx) || defined (STM32L063xx)
977 
978 /* The table below gives an overview of the different alternate functions per port.
979  * For more details refer yourself to the product data sheet.
980  *
981  */
982 /*     |   AF0  |   AF1  |   AF2  |   AF3  |   AF4  |   AF5  |   AF6  |   AF7  |
983  *______________________________________________________________________________
984  * PA0 |        |        |TIM2_C1 |TSC     |USART2  |TIM2_TR |        |COMP1   |
985  * PA1 |EVENTOUT|LCD     |TIM2_C2 |TSC     |USART2  |TIM21_TR|        |        |
986  * PA2 |TIM21_C1|LCD     |TIM2_C3 |TSC     |USART2  |        |        |COMP2   |
987  * PA3 |TIM21_C2|LCD     |TIM2_C4 |TSC     |USART2  |        |        |        |
988  * PA4 |SPI1    |        |        |TSC     |USART2  |TIM22_TR|        |        |
989  * PA5 |SPI1    |        |TIM2_TR |TSC     |        |TIM2_C1 |        |        |
990  * PA6 |SPI1    |LCD     |        |TSC     |LPUART  |TIM22_C1|EVENTOUT|COMP1   |
991  * PA7 |SPI1    |LCD     |        |TSC     |        |TIM22_C2|EVENTOUT|COMP2   |
992  * PA8 |MCO     |LCD     |USB     |EVENTOUT|USART1  |        |        |        |
993  * PA9 |MCO     |LCD     |        |TSC     |USART1  |        |        |        |
994  * PA10|        |LCD     |        |TSC     |USART1  |        |        |        |
995  * PA11|SPI1    |        |EVENTOUT|TSC     |USART1  |        |        |COMP1   |
996  * PA12|SPI1    |        |EVENTOUT|TSC     |USART1  |        |        |COMP2   |
997  * PA13|SWDIO   |        |USB     |        |        |        |        |        |
998  * PA14|SWCLK   |        |        |        |USART2  |        |        |        |
999  * PA15|SPI1    |LCD     |TIM2_TR |EVENTOUT|USART2  |TIM2_C1 |        |        |
1000  *______________________________________________________________________________
1001  * PB0 |EVENTOUT|LCD     |        |TSC     |        |        |        |        |
1002  * PB1 |        |LCD     |        |TSC     |LPUART1 |        |        |        |
1003  * PB2 |        |        |LPTIM1_O|TSC     |        |        |        |        |
1004  * PB3 |SPI1    |LCD     |TIM2_C2 |TSC     |EVENTOUT|        |        |        |
1005  * PB4 |SPI1    |LCD     |EVENTOUT|TSC     |TIM22_C1|        |        |        |
1006  * PB5 |SPI1    |LCD     |LPTIM1_I|I2C1    |TIM22_C2|        |        |        |
1007  * PB6 |USART1  |I2C1    |LPTIM1_T|TSC     |        |        |        |        |
1008  * PB7 |USART1  |I2C1    |LPTIM1_I|TSC     |        |        |        |        |
1009  * PB8 |        |LCD     |        |TSC     |I2C1    |        |        |        |
1010  * PB9 |        |LCD     |EVENTOUT|        |I2C1    |SPI2    |        |        |
1011  * PB10|        |LCD     |TIM2_C3 |TSC     |LPUART1 |SPI2    |I2C2    |        |
1012  * PB11|EVENTOUT|LCD     |TIM2_C4 |TSC     |LPUART1 |        |I2C2    |        |
1013  * PB12|SPI2    |LCD     |LPUART1 |TSC     |        |I2C2    |EVENTOUT|        |
1014  * PB13|SPI2    |LCD     |        |TSC     |LPUART1 |I2C2    |TIM21_C1|        |
1015  * PB14|SPI2    |LCD     |RTC     |TSC     |LPUART1 |I2C2    |TIM21_C2|        |
1016  * PB15|SPI2    |LCD     |RTC     |        |        |        |        |        |
1017  *______________________________________________________________________________
1018  * PC0 |LPTIM1_I|LCD     |EVENTOUT|TSC     |        |        |        |        |
1019  * PC1 |LPTIM1_O|LCD     |EVENTOUT|TSC     |        |        |        |        |
1020  * PC2 |LPTIM1_I|LCD     |SPI2    |TSC     |        |        |        |        |
1021  * PC3 |LPTIM1_T|LCD     |SPI2    |TSC     |        |        |        |        |
1022  * PC4 |EVENTOUT|LCD     |LPUART  |        |        |        |        |        |
1023  * PC5 |        |LCD     |LPUART  |TSC     |        |        |        |        |
1024  * PC6 |TIM22_C1|LCD     |        |TSC     |        |        |        |        |
1025  * PC7 |TIM22_C2|LCD     |        |TSC     |        |        |        |        |
1026  * PC8 |TIM22_TR|LCD     |        |TSC     |        |        |        |        |
1027  * PC9 |TIM21_TR|LCD     |USB     |TSC     |        |        |        |        |
1028  * PC10|LPUART  |LCD     |        |        |        |        |        |        |
1029  * PC11|LPUART  |LCD     |        |        |        |        |        |        |
1030  * PC12|        |LCD     |        |        |        |        |        |        |
1031  * PC13|        |        |        |        |        |        |        |        |
1032  * PC14|        |        |        |        |        |        |        |        |
1033  * PC15|        |        |        |        |        |        |        |        |
1034  *______________________________________________________________________________
1035  * PD2 |LPUART  |LCD     |        |        |        |        |        |        |
1036  *______________________________________________________________________________
1037  * PH0 |USB     |        |        |        |        |        |        |        |
1038  * PH1 |        |        |        |        |        |        |        |        |
1039  *  *
1040  */
1041 
1042 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
1043  * @{
1044  */
1045 
1046 /*
1047  * Alternate function AF0
1048  */
1049 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
1050 #define GPIO_AF0_SPI2          ((uint8_t)0x00U)  /* SPI2 Alternate Function mapping     */
1051 #define GPIO_AF0_USART1        ((uint8_t)0x00U)  /* USART1 Alternate Function mapping   */
1052 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
1053 #define GPIO_AF0_LPUART1       ((uint8_t)0x00U)  /* LPUART1 Alternate Function mapping  */
1054 #define GPIO_AF0_USB           ((uint8_t)0x00U)  /* USB Alternate Function mapping      */
1055 #define GPIO_AF0_LPTIM1        ((uint8_t)0x00U)  /* LPTIM1 Alternate Function mapping   */
1056 #define GPIO_AF0_TSC           ((uint8_t)0x00U)  /* TSC Alternate Function mapping      */
1057 #define GPIO_AF0_TIM2          ((uint8_t)0x00U)  /* TIM2 Alternate Function mapping     */
1058 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
1059 #define GPIO_AF0_TIM22         ((uint8_t)0x00U)  /* TIM22 Alternate Function mapping    */
1060 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
1061 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
1062 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
1063 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
1064 /**
1065   *
1066   */
1067 
1068  /*
1069   * Alternate function AF1
1070  */
1071 #define GPIO_AF1_SPI1          ((uint8_t)0x01U)  /* SPI1 Alternate Function mapping  */
1072 #define GPIO_AF1_SPI2          ((uint8_t)0x01U)  /* SPI2 Alternate Function mapping  */
1073 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping  */
1074 #define GPIO_AF1_LCD           ((uint8_t)0x01U)  /* LCD Alternate Function mapping   */
1075 /**
1076   *
1077   */
1078 
1079 /*
1080  * Alternate function AF2
1081  */
1082 #define GPIO_AF2_SPI2          ((uint8_t)0x02U)  /* SPI2 Alternate Function mapping       */
1083 #define GPIO_AF2_LPUART1       ((uint8_t)0x02U)  /* LPUART1 Alternate Function mapping    */
1084 #define GPIO_AF2_USB           ((uint8_t)0x02U)  /* USB Alternate Function mapping        */
1085 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping     */
1086 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping       */
1087 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping   */
1088 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping        */
1089 /**
1090   *
1091   */
1092 
1093 /*
1094  * Alternate function AF3
1095  */
1096 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping     */
1097 #define GPIO_AF3_TSC           ((uint8_t)0x03U)  /* TSC  Alternate Function mapping     */
1098 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping */
1099 /**
1100   *
1101   */
1102 
1103 /*
1104  * Alternate function AF4
1105  */
1106 #define GPIO_AF4_I2C1            ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping     */
1107 #define GPIO_AF4_USART1          ((uint8_t)0x04U)  /* USART1 Alternate Function mapping   */
1108 #define GPIO_AF4_USART2          ((uint8_t)0x04U)  /* USART2 Alternate Function mapping   */
1109 #define GPIO_AF4_LPUART1         ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping  */
1110 #define GPIO_AF4_TIM22           ((uint8_t)0x04U)  /* TIM22 Alternate Function mapping    */
1111 #define GPIO_AF4_EVENTOUT        ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping */
1112 /**
1113   *
1114   */
1115 
1116  /*
1117  * Alternate function AF5
1118  */
1119 #define GPIO_AF5_SPI2          ((uint8_t)0x05U)  /* SPI2 Alternate Function mapping     */
1120 #define GPIO_AF5_I2C2          ((uint8_t)0x05U)  /* I2C2 Alternate Function mapping     */
1121 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
1122 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
1123 #define GPIO_AF5_TIM22         ((uint8_t)0x05U)  /* TIM22 Alternate Function mapping    */
1124 /**
1125   *
1126   */
1127 
1128 /*
1129  * Alternate function AF6
1130  */
1131 #define GPIO_AF6_I2C2          ((uint8_t)0x06U)  /* I2C2 Alternate Function mapping      */
1132 #define GPIO_AF6_TIM21         ((uint8_t)0x06U)  /* TIM21 Alternate Function mapping     */
1133 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping  */
1134 /**
1135   *
1136   */
1137 
1138 /*
1139  * Alternate function AF7
1140  */
1141 #define GPIO_AF7_COMP1        ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
1142 #define GPIO_AF7_COMP2        ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
1143 /**
1144   *
1145   */
1146 
1147 /**
1148   * @}
1149   */
1150 
1151 /**
1152   * @}
1153   */
1154 
1155 /** @defgroup GPIOEx_Private  GPIOEx Private
1156  * @{
1157  */
1158 /**
1159  * @brief  IS_GPIO_AF macro definition
1160  */
1161 
1162 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_SPI1)     || ((__AF__) == GPIO_AF2_SPI2)     || \
1163                             ((__AF__) == GPIO_AF0_SPI2)     || ((__AF__) == GPIO_AF2_LPUART1)  || \
1164                             ((__AF__) == GPIO_AF0_USART1)   || ((__AF__) == GPIO_AF2_USB)      || \
1165                             ((__AF__) == GPIO_AF0_USART2)   || ((__AF__) == GPIO_AF2_LPTIM1)   || \
1166                             ((__AF__) == GPIO_AF0_LPUART1)  || ((__AF__) == GPIO_AF2_TIM2)     || \
1167                             ((__AF__) == GPIO_AF0_USB)      || ((__AF__) == GPIO_AF3_TSC)      || \
1168                             ((__AF__) == GPIO_AF0_LPTIM1)   || ((__AF__) == GPIO_AF2_EVENTOUT) || \
1169                             ((__AF__) == GPIO_AF0_TSC)      || ((__AF__) == GPIO_AF2_RTC) || \
1170                             ((__AF__) == GPIO_AF3_I2C1)     || ((__AF__) == GPIO_AF7_COMP2)    || \
1171                             ((__AF__) == GPIO_AF0_TIM22)    || ((__AF__) == GPIO_AF3_EVENTOUT) || \
1172                             ((__AF__) == GPIO_AF0_EVENTOUT) || ((__AF__) == GPIO_AF4_I2C1)     || \
1173                             ((__AF__) == GPIO_AF0_MCO)      || ((__AF__) == GPIO_AF4_USART1)   || \
1174                             ((__AF__) == GPIO_AF0_SWDIO)    || ((__AF__) == GPIO_AF0_SWCLK)    || \
1175                             ((__AF__) == GPIO_AF1_SPI1)     || ((__AF__) == GPIO_AF4_USART2)   || \
1176                             ((__AF__) == GPIO_AF1_SPI2)     || ((__AF__) == GPIO_AF4_LPUART1)  || \
1177                             ((__AF__) == GPIO_AF7_COMP2)    || ((__AF__) == GPIO_AF4_TIM22)    || \
1178                             ((__AF__) == GPIO_AF1_I2C1)     || ((__AF__) == GPIO_AF4_EVENTOUT) || \
1179                             ((__AF__) == GPIO_AF1_LCD)      || ((__AF__) == GPIO_AF5_SPI2)     || \
1180                             ((__AF__) == GPIO_AF5_I2C2)     || ((__AF__) == GPIO_AF5_TIM2)     || \
1181                             ((__AF__) == GPIO_AF5_TIM21)    || ((__AF__) == GPIO_AF5_TIM22)    || \
1182                             ((__AF__) == GPIO_AF6_I2C2)     || ((__AF__) == GPIO_AF6_TIM21)    || \
1183                             ((__AF__) == GPIO_AF6_EVENTOUT) || ((__AF__) == GPIO_AF7_COMP1))
1184 
1185 
1186 
1187 #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
1188         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
1189                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
1190                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
1191                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
1192                                         ((__AF__) ==  GPIO_AF4_USART2)    ||   \
1193                                         ((__AF__) ==  GPIO_AF5_TIM22)     ||   \
1194                                         ((__AF__) ==  GPIO_AF6_EVENTOUT)  ||   \
1195                                         ((__AF__) ==  GPIO_AF7_COMP1)))   ||   \
1196          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
1197                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
1198                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
1199                                         ((__AF__) ==  GPIO_AF3_TSC)       ||   \
1200                                         ((__AF__) ==  GPIO_AF4_EVENTOUT)  ||   \
1201                                         ((__AF__) ==  GPIO_AF5_I2C2)      ||   \
1202                                         ((__AF__) ==  GPIO_AF6_TIM21)))   ||   \
1203          (((__INSTANCE__) == GPIOC) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
1204                                         ((__AF__) ==  GPIO_AF1_LCD)       ||   \
1205                                         ((__AF__) ==  GPIO_AF2_EVENTOUT)  ||   \
1206                                         ((__AF__) ==  GPIO_AF3_TSC)))     ||   \
1207          (((__INSTANCE__) == GPIOD) && (((__AF__) ==  GPIO_AF0_LPUART1)   ||   \
1208                                         ((__AF__) ==  GPIO_AF1_LCD)))     ||   \
1209          (((__INSTANCE__) == GPIOH) && (((__AF__) ==  GPIO_AF0_USB))))
1210 
1211 /**
1212   * @}
1213   */
1214 
1215 #endif /* STM32L053xx || STM32L063xx */
1216 /*------------------------------------------------------------------------------------------*/
1217 
1218 /*----------------------------------------------------------------------------*/
1219 /*------------------------- STM32L052xx/STM32L062xx---------------------------*/
1220 /*----------------------------------------------------------------------------*/
1221 #if defined (STM32L052xx) || defined (STM32L062xx)
1222 
1223 /* The table below gives an overview of the different alternate functions per port.
1224  * For more details refer yourself to the product data sheet.
1225  *
1226  */
1227 /*     |   AF0  |   AF1  |   AF2  |   AF3  |   AF4  |   AF5  |   AF6  |   AF7  |
1228  *______________________________________________________________________________
1229  * PA0 |        |        |TIM2_C1 |TSC     |USART2  |TIM2_TR |        |COMP1   |
1230  * PA1 |EVENTOUT|        |TIM2_C2 |TSC     |USART2  |TIM21_TR|        |        |
1231  * PA2 |TIM21_C1|        |TIM2_C3 |TSC     |USART2  |        |        |COMP2   |
1232  * PA3 |TIM21_C2|        |TIM2_C4 |TSC     |USART2  |        |        |        |
1233  * PA4 |SPI1    |        |        |TSC     |USART2  |TIM22_TR|        |        |
1234  * PA5 |SPI1    |        |TIM2_TR |TSC     |        |TIM2_C1 |        |        |
1235  * PA6 |SPI1    |        |        |TSC     |LPUART  |TIM22_C1|EVENTOUT|COMP1   |
1236  * PA7 |SPI1    |        |        |TSC     |        |TIM22_C2|EVENTOUT|COMP2   |
1237  * PA8 |MCO     |        |USB     |EVENTOUT|USART1  |        |        |        |
1238  * PA9 |MCO     |        |        |TSC     |USART1  |        |        |        |
1239  * PA10|        |        |        |TSC     |USART1  |        |        |        |
1240  * PA11|SPI1    |        |EVENTOUT|TSC     |USART1  |        |        |COMP1   |
1241  * PA12|SPI1    |        |EVENTOUT|TSC     |USART1  |        |        |COMP2   |
1242  * PA13|SWDIO   |        |USB     |        |        |        |        |        |
1243  * PA14|SWCLK   |        |        |        |USART2  |        |        |        |
1244  * PA15|SPI1    |        |TIM2_TR |EVENTOUT|USART2  |TIM2_C1 |        |        |
1245  *______________________________________________________________________________
1246  * PB0 |EVENTOUT|        |        |TSC     |        |        |        |        |
1247  * PB1 |        |        |        |TSC     |LPUART1 |        |        |        |
1248  * PB2 |        |        |LPTIM1_O|TSC     |        |        |        |        |
1249  * PB3 |SPI1    |        |TIM2_C2 |TSC     |EVENTOUT|        |        |        |
1250  * PB4 |SPI1    |        |EVENTOUT|TSC     |TIM22_C1|        |        |        |
1251  * PB5 |SPI1    |        |LPTIM1_I|I2C1    |TIM22_C2|        |        |        |
1252  * PB6 |USART1  |I2C1    |LPTIM1_T|TSC     |        |        |        |        |
1253  * PB7 |USART1  |I2C1    |LPTIM1_I|TSC     |        |        |        |        |
1254  * PB8 |        |        |        |TSC     |I2C1    |        |        |        |
1255  * PB9 |        |        |EVENTOUT|        |I2C1    |SPI2    |        |        |
1256  * PB10|        |        |TIM2_C3 |TSC     |LPUART1 |SPI2    |I2C2    |        |
1257  * PB11|EVENTOUT|        |TIM2_C4 |TSC     |LPUART1 |        |I2C2    |        |
1258  * PB12|SPI2    |        |LPUART1 |TSC     |        |I2C2    |EVENTOUT|        |
1259  * PB13|SPI2    |        |        |TSC     |LPUART1 |I2C2    |TIM21_C1|        |
1260  * PB14|SPI2    |        |RTC     |TSC     |LPUART1 |I2C2    |TIM21_C2|        |
1261  * PB15|SPI2    |        |RTC     |        |        |        |        |        |
1262  *______________________________________________________________________________
1263  * PC0 |LPTIM1_I|        |EVENTOUT|TSC     |        |        |        |        |
1264  * PC1 |LPTIM1_O|        |EVENTOUT|TSC     |        |        |        |        |
1265  * PC2 |LPTIM1_I|        |SPI2    |TSC     |        |        |        |        |
1266  * PC3 |LPTIM1_T|        |SPI2    |TSC     |        |        |        |        |
1267  * PC4 |EVENTOUT|        |LPUART  |        |        |        |        |        |
1268  * PC5 |        |        |LPUART  |TSC     |        |        |        |        |
1269  * PC6 |TIM22_C1|        |        |TSC     |        |        |        |        |
1270  * PC7 |TIM22_C2|        |        |TSC     |        |        |        |        |
1271  * PC8 |TIM22_TR|        |        |TSC     |        |        |        |        |
1272  * PC9 |TIM21_TR|        |USB     |TSC     |        |        |        |        |
1273  * PC10|LPUART  |        |        |        |        |        |        |        |
1274  * PC11|LPUART  |        |        |        |        |        |        |        |
1275  * PC12|        |        |        |        |        |        |        |        |
1276  * PC13|        |        |        |        |        |        |        |        |
1277  * PC14|        |        |        |        |        |        |        |        |
1278  * PC15|        |        |        |        |        |        |        |        |
1279  *______________________________________________________________________________
1280  * PD2 |LPUART  |        |        |        |        |        |        |        |
1281  *______________________________________________________________________________
1282  * PH0 |USB     |        |        |        |        |        |        |        |
1283  * PH1 |        |        |        |        |        |        |        |        |
1284  *  *
1285  */
1286 
1287 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
1288  * @{
1289  */
1290 
1291 /*
1292  * Alternate function AF0
1293  */
1294 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
1295 #define GPIO_AF0_SPI2          ((uint8_t)0x00U)  /* SPI2 Alternate Function mapping     */
1296 #define GPIO_AF0_USART1        ((uint8_t)0x00U)  /* USART1 Alternate Function mapping   */
1297 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
1298 #define GPIO_AF0_LPUART1       ((uint8_t)0x00U)  /* LPUART1 Alternate Function mapping  */
1299 #define GPIO_AF0_USB           ((uint8_t)0x00U)  /* USB Alternate Function mapping      */
1300 #define GPIO_AF0_LPTIM1        ((uint8_t)0x00U)  /* LPTIM1 Alternate Function mapping   */
1301 #define GPIO_AF0_TSC           ((uint8_t)0x00U)  /* TSC Alternate Function mapping      */
1302 #define GPIO_AF0_TIM2          ((uint8_t)0x00U)  /* TIM2 Alternate Function mapping     */
1303 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
1304 #define GPIO_AF0_TIM22         ((uint8_t)0x00U)  /* TIM22 Alternate Function mapping    */
1305 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
1306 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
1307 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
1308 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
1309 /**
1310   *
1311   */
1312 
1313 /*
1314  * Alternate function AF1
1315  */
1316 #define GPIO_AF1_SPI1          ((uint8_t)0x01U)  /* SPI1 Alternate Function mapping  */
1317 #define GPIO_AF1_SPI2          ((uint8_t)0x01U)  /* SPI2 Alternate Function mapping  */
1318 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping  */
1319 /**
1320   *
1321   */
1322 
1323 /**
1324  * Alternate function AF2
1325  */
1326 #define GPIO_AF2_SPI2          ((uint8_t)0x02U)  /* SPI2 Alternate Function mapping       */
1327 #define GPIO_AF2_LPUART1       ((uint8_t)0x02U)  /* LPUART1 Alternate Function mapping    */
1328 #define GPIO_AF2_USB           ((uint8_t)0x02U)  /* USB Alternate Function mapping        */
1329 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping     */
1330 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping       */
1331 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping   */
1332 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping        */
1333 /**
1334   *
1335   */
1336 
1337 /*
1338  * Alternate function AF3
1339  */
1340 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping     */
1341 #define GPIO_AF3_TSC           ((uint8_t)0x03U)  /* TSC  Alternate Function mapping     */
1342 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping */
1343 /**
1344   *
1345   */
1346 
1347 /*
1348  * Alternate function AF4
1349  */
1350 #define GPIO_AF4_I2C1            ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping     */
1351 #define GPIO_AF4_USART1          ((uint8_t)0x04U)  /* USART1 Alternate Function mapping   */
1352 #define GPIO_AF4_USART2          ((uint8_t)0x04U)  /* USART2 Alternate Function mapping   */
1353 #define GPIO_AF4_LPUART1         ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping  */
1354 #define GPIO_AF4_TIM22           ((uint8_t)0x04U)  /* TIM22 Alternate Function mapping    */
1355 #define GPIO_AF4_EVENTOUT        ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping */
1356 /**
1357   *
1358   */
1359 
1360 /*
1361  * Alternate function AF5
1362  */
1363 #define GPIO_AF5_SPI2          ((uint8_t)0x05U)  /* SPI2 Alternate Function mapping     */
1364 #define GPIO_AF5_I2C2          ((uint8_t)0x05U)  /* I2C2 Alternate Function mapping     */
1365 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
1366 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
1367 #define GPIO_AF5_TIM22         ((uint8_t)0x05U)  /* TIM22 Alternate Function mapping    */
1368 /**
1369   *
1370   */
1371 
1372 /*
1373  * Alternate function AF6
1374  */
1375 #define GPIO_AF6_I2C2          ((uint8_t)0x06U)  /* I2C2 Alternate Function mapping      */
1376 #define GPIO_AF6_TIM21         ((uint8_t)0x06U)  /* TIM21 Alternate Function mapping     */
1377 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping  */
1378 /**
1379   *
1380   */
1381 
1382 /*
1383  * Alternate function AF7
1384  */
1385 #define GPIO_AF7_COMP1        ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
1386 #define GPIO_AF7_COMP2        ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
1387 /**
1388   *
1389   */
1390 
1391 /**
1392   * @}
1393   */
1394 
1395 /**
1396   * @}
1397   */
1398 
1399 /** @defgroup GPIOEx_Private  GPIOEx Private
1400  * @{
1401  */
1402 /**
1403  * @brief  IS_GPIO_AF macro definition
1404  */
1405 
1406 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_SPI1)     || ((__AF__) == GPIO_AF2_SPI2)        || \
1407                             ((__AF__) == GPIO_AF0_SPI2)     || ((__AF__) == GPIO_AF2_LPUART1)     || \
1408                             ((__AF__) == GPIO_AF0_USART1)   || ((__AF__) == GPIO_AF2_USB)         || \
1409                             ((__AF__) == GPIO_AF0_USART2)   || ((__AF__) == GPIO_AF2_LPTIM1)      || \
1410                             ((__AF__) == GPIO_AF0_LPUART1)  || ((__AF__) == GPIO_AF2_TIM2)        || \
1411                             ((__AF__) == GPIO_AF0_USB)      || ((__AF__) == GPIO_AF4_TIM22)       || \
1412                             ((__AF__) == GPIO_AF0_LPTIM1)   || ((__AF__) == GPIO_AF2_EVENTOUT)    || \
1413                             ((__AF__) == GPIO_AF0_TSC)      || ((__AF__) == GPIO_AF2_RTC)    || \
1414                             ((__AF__) == GPIO_AF0_TIM2)     || ((__AF__) == GPIO_AF3_I2C1)        || \
1415                             ((__AF__) == GPIO_AF0_TIM21)    || ((__AF__) == GPIO_AF3_TSC)         || \
1416                             ((__AF__) == GPIO_AF0_TIM22)    || ((__AF__) == GPIO_AF3_EVENTOUT)    || \
1417                             ((__AF__) == GPIO_AF0_EVENTOUT) || ((__AF__) == GPIO_AF4_I2C1)        || \
1418                             ((__AF__) == GPIO_AF0_MCO)      || ((__AF__) == GPIO_AF4_USART1)      || \
1419                             ((__AF__) == GPIO_AF0_SWDIO)    || ((__AF__) == GPIO_AF0_SWCLK)       || \
1420                             ((__AF__) == GPIO_AF1_SPI1)     || ((__AF__) == GPIO_AF4_USART2)      || \
1421                             ((__AF__) == GPIO_AF1_SPI2)     || ((__AF__) == GPIO_AF4_LPUART1)     || \
1422                             ((__AF__) == GPIO_AF1_I2C1)     || ((__AF__) == GPIO_AF4_EVENTOUT)    || \
1423                             ((__AF__) == GPIO_AF6_EVENTOUT) || ((__AF__) == GPIO_AF5_SPI2)        || \
1424                             ((__AF__) == GPIO_AF5_I2C2)     || ((__AF__) == GPIO_AF5_TIM2)        || \
1425                             ((__AF__) == GPIO_AF5_TIM21)    || ((__AF__) == GPIO_AF5_TIM22)       || \
1426                             ((__AF__) == GPIO_AF6_I2C2)     || ((__AF__) == GPIO_AF6_TIM21)       || \
1427                             ((__AF__) == GPIO_AF7_COMP2)    || ((__AF__) == GPIO_AF7_COMP1))
1428 
1429 
1430 #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
1431         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)   ||   \
1432                                         ((__AF__) ==  GPIO_AF2_TIM2)       ||   \
1433                                         ((__AF__) ==  GPIO_AF3_TSC)        ||   \
1434                                         ((__AF__) ==  GPIO_AF4_USART2)     ||   \
1435                                         ((__AF__) ==  GPIO_AF5_TIM22)      ||   \
1436                                         ((__AF__) ==  GPIO_AF6_EVENTOUT)   ||   \
1437                                         ((__AF__) ==  GPIO_AF7_COMP1)))    ||   \
1438          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)   ||   \
1439                                         ((__AF__) ==  GPIO_AF1_I2C1)       ||   \
1440                                         ((__AF__) ==  GPIO_AF2_TIM2)       ||   \
1441                                         ((__AF__) ==  GPIO_AF3_TSC)        ||   \
1442                                         ((__AF__) ==  GPIO_AF4_LPUART1)    ||   \
1443                                         ((__AF__) ==  GPIO_AF5_I2C2)       ||   \
1444                                         ((__AF__) ==  GPIO_AF6_EVENTOUT))) ||   \
1445          (((__INSTANCE__) == GPIOC) && (((__AF__) ==  GPIO_AF0_EVENTOUT)   ||   \
1446                                         ((__AF__) ==  GPIO_AF2_EVENTOUT)   ||   \
1447                                         ((__AF__) ==  GPIO_AF3_TSC)))      ||   \
1448          (((__INSTANCE__) == GPIOD) && (((__AF__) ==  GPIO_AF0_LPUART1)))  ||   \
1449          (((__INSTANCE__) == GPIOH) && (((__AF__) ==  GPIO_AF0_USB))))
1450 
1451  /**
1452   * @}
1453   */
1454 #endif /* STM32L052xx || STM32L062xx */
1455 /*------------------------------------------------------------------------------------------*/
1456 
1457 /*----------------------------------------------------------------------------*/
1458 /*------------------------- STM32L051xx/STM32L061xx---------------------------*/
1459 /*----------------------------------------------------------------------------*/
1460 #if defined (STM32L051xx)|| defined (STM32L061xx)
1461 /* The table below gives an overview of the different alternate functions per port.
1462  * For more details refer yourself to the product data sheet.
1463  *
1464  */
1465 /*     |   AF0  |   AF1  |   AF2  |   AF3  |   AF4  |   AF5  |   AF6  |   AF7  |
1466  *______________________________________________________________________________
1467  * PA0 |        |        |TIM2_C1 |        |USART2  |TIM2_TR |        |COMP1   |
1468  * PA1 |EVENTOUT|        |TIM2_C2 |        |USART2  |TIM21_TR|        |        |
1469  * PA2 |TIM21_C1|        |TIM2_C3 |        |USART2  |        |        |COMP2   |
1470  * PA3 |TIM21_C2|        |TIM2_C4 |        |USART2  |        |        |        |
1471  * PA4 |SPI1    |        |        |        |USART2  |TIM22_TR|        |        |
1472  * PA5 |SPI1    |        |TIM2_TR |        |        |TIM2_C1 |        |        |
1473  * PA6 |SPI1    |        |        |        |LPUART  |TIM22_C1|EVENTOUT|COMP1   |
1474  * PA7 |SPI1    |        |        |        |        |TIM22_C2|EVENTOUT|COMP2   |
1475  * PA8 |MCO     |        |        |EVENTOUT|USART1  |        |        |        |
1476  * PA9 |MCO     |        |        |        |USART1  |        |        |        |
1477  * PA10|        |        |        |        |USART1  |        |        |        |
1478  * PA11|SPI1    |        |EVENTOUT|        |USART1  |        |        |COMP1   |
1479  * PA12|SPI1    |        |EVENTOUT|        |USART1  |        |        |COMP2   |
1480  * PA13|SWDIO   |        |        |        |        |        |        |        |
1481  * PA14|SWCLK   |        |        |        |USART2  |        |        |        |
1482  * PA15|SPI1    |        |TIM2_TR |EVENTOUT|USART2  |TIM2_C1 |        |        |
1483  *______________________________________________________________________________
1484  * PB0 |EVENTOUT|        |        |        |        |        |        |        |
1485  * PB1 |        |        |        |        |LPUART1 |        |        |        |
1486  * PB2 |        |        |LPTIM1_O|        |        |        |        |        |
1487  * PB3 |SPI1    |        |TIM2_C2 |        |EVENTOUT|        |        |        |
1488  * PB4 |SPI1    |        |EVENTOUT|        |TIM22_C1|        |        |        |
1489  * PB5 |SPI1    |        |LPTIM1_I|I2C1    |TIM22_C2|        |        |        |
1490  * PB6 |USART1  |I2C1    |LPTIM1_T|        |        |        |        |        |
1491  * PB7 |USART1  |I2C1    |LPTIM1_I|        |        |        |        |        |
1492  * PB8 |        |        |        |        |I2C1    |        |        |        |
1493  * PB9 |        |        |EVENTOUT|        |I2C1    |SPI2    |        |        |
1494  * PB10|        |        |TIM2_C3 |        |LPUART1 |SPI2    |I2C2    |        |
1495  * PB11|EVENTOUT|        |TIM2_C4 |        |LPUART1 |        |I2C2    |        |
1496  * PB12|SPI2    |        |LPUART1 |        |        |I2C2    |EVENTOUT|        |
1497  * PB13|SPI2    |        |        |        |LPUART1 |I2C2    |TIM21_C1|        |
1498  * PB14|SPI2    |        |RTC     |        |LPUART1 |I2C2    |TIM21_C2|        |
1499  * PB15|SPI2    |        |RTC     |        |        |        |        |        |
1500  *______________________________________________________________________________
1501  * PC0 |LPTIM1_I|        |EVENTOUT|        |        |        |        |        |
1502  * PC1 |LPTIM1_O|        |EVENTOUT|        |        |        |        |        |
1503  * PC2 |LPTIM1_I|        |SPI2    |        |        |        |        |        |
1504  * PC3 |LPTIM1_T|        |SPI2    |        |        |        |        |        |
1505  * PC4 |EVENTOUT|        |LPUART  |        |        |        |        |        |
1506  * PC5 |        |        |LPUART  |        |        |        |        |        |
1507  * PC6 |TIM22_C1|        |        |        |        |        |        |        |
1508  * PC7 |TIM22_C2|        |        |        |        |        |        |        |
1509  * PC8 |TIM22_TR|        |        |        |        |        |        |        |
1510  * PC9 |TIM21_TR|        |        |        |        |        |        |        |
1511  * PC10|LPUART  |        |        |        |        |        |        |        |
1512  * PC11|LPUART  |        |        |        |        |        |        |        |
1513  * PC12|        |        |        |        |        |        |        |        |
1514  * PC13|        |        |        |        |        |        |        |        |
1515  * PC14|        |        |        |        |        |        |        |        |
1516  * PC15|        |        |        |        |        |        |        |        |
1517  *______________________________________________________________________________
1518  * PD2 |LPUART  |        |        |        |        |        |        |        |
1519  *______________________________________________________________________________
1520  * PH0 |        |        |        |        |        |        |        |        |
1521  * PH1 |        |        |        |        |        |        |        |        |
1522  *  *
1523  */
1524 
1525 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
1526  * @{
1527  */
1528 
1529 /*
1530  * Alternate function AF0
1531  */
1532 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
1533 #define GPIO_AF0_SPI2          ((uint8_t)0x00U)  /* SPI2 Alternate Function mapping     */
1534 #define GPIO_AF0_USART1        ((uint8_t)0x00U)  /* USART1 Alternate Function mapping   */
1535 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
1536 #define GPIO_AF0_LPUART1       ((uint8_t)0x00U)  /* LPUART1 Alternate Function mapping  */
1537 #define GPIO_AF0_LPTIM1        ((uint8_t)0x00U)  /* LPTIM1 Alternate Function mapping   */
1538 #define GPIO_AF0_TIM2          ((uint8_t)0x00U)  /* TIM2 Alternate Function mapping     */
1539 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
1540 #define GPIO_AF0_TIM22         ((uint8_t)0x00U)  /* TIM22 Alternate Function mapping    */
1541 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
1542 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
1543 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
1544 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
1545 /**
1546   *
1547   */
1548 
1549 /*
1550  * Alternate function AF1
1551  */
1552 #define GPIO_AF1_SPI1          ((uint8_t)0x01U)  /* SPI1 Alternate Function mapping  */
1553 #define GPIO_AF1_SPI2          ((uint8_t)0x01U)  /* SPI2 Alternate Function mapping  */
1554 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping  */
1555 /**
1556   *
1557   */
1558 
1559  /*
1560   * Alternate function AF2
1561  */
1562 #define GPIO_AF2_SPI2          ((uint8_t)0x02U)  /* SPI2 Alternate Function mapping       */
1563 #define GPIO_AF2_LPUART1       ((uint8_t)0x02U)  /* LPUART1 Alternate Function mapping    */
1564 #define GPIO_AF2_USB           ((uint8_t)0x02U)  /* USB Alternate Function mapping        */
1565 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping     */
1566 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping       */
1567 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping   */
1568 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping        */
1569 /**
1570   *
1571   */
1572 
1573 /*
1574  * Alternate function AF3
1575  */
1576 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping     */
1577 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping */
1578 /**
1579   *
1580   */
1581 
1582 /*
1583  * Alternate function AF4
1584  */
1585 #define GPIO_AF4_I2C1            ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping     */
1586 #define GPIO_AF4_USART1          ((uint8_t)0x04U)  /* USART1 Alternate Function mapping   */
1587 #define GPIO_AF4_USART2          ((uint8_t)0x04U)  /* USART2 Alternate Function mapping   */
1588 #define GPIO_AF4_LPUART1         ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping  */
1589 #define GPIO_AF4_TIM22           ((uint8_t)0x04U)  /* TIM22 Alternate Function mapping    */
1590 #define GPIO_AF4_EVENTOUT        ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping */
1591 /**
1592   *
1593   */
1594 
1595 /*
1596  * Alternate function AF5
1597  */
1598 #define GPIO_AF5_SPI2          ((uint8_t)0x05U)  /* SPI2 Alternate Function mapping     */
1599 #define GPIO_AF5_I2C2          ((uint8_t)0x05U)  /* I2C2 Alternate Function mapping     */
1600 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
1601 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
1602 #define GPIO_AF5_TIM22         ((uint8_t)0x05U)  /* TIM22 Alternate Function mapping    */
1603 /**
1604   *
1605   */
1606 
1607 /*
1608  * Alternate function AF6
1609  */
1610 #define GPIO_AF6_I2C2          ((uint8_t)0x06U)  /* I2C2 Alternate Function mapping      */
1611 #define GPIO_AF6_TIM21         ((uint8_t)0x06U)  /* TIM21 Alternate Function mapping     */
1612 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping  */
1613 /**
1614   *
1615   */
1616 
1617 /*
1618  * Alternate function AF7
1619  */
1620 #define GPIO_AF7_COMP1        ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
1621 #define GPIO_AF7_COMP2        ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
1622 /**
1623   *
1624   */
1625 
1626 /**
1627   * @}
1628   */
1629 
1630 /**
1631   * @}
1632   */
1633 
1634 /** @defgroup GPIOEx_Private  GPIOEx Private
1635  * @{
1636  */
1637 
1638 /**
1639  * @brief  IS_GPIO_AF macro definition
1640  */
1641 #define IS_GPIO_AF(__AF__) (((__AF__) == GPIO_AF0_SPI1)     || ((__AF__) == GPIO_AF2_SPI2)     || \
1642                             ((__AF__) == GPIO_AF0_SPI2)     || ((__AF__) == GPIO_AF2_LPUART1)  || \
1643                             ((__AF__) == GPIO_AF0_USART1)   || ((__AF__) == GPIO_AF7_COMP1)    || \
1644                             ((__AF__) == GPIO_AF0_USART2)   || ((__AF__) == GPIO_AF2_LPTIM1)   || \
1645                             ((__AF__) == GPIO_AF0_LPUART1)  || ((__AF__) == GPIO_AF2_TIM2)     || \
1646                             ((__AF__) == GPIO_AF0_LPTIM1)   || ((__AF__) == GPIO_AF2_EVENTOUT) || \
1647                             ((__AF__) == GPIO_AF2_RTC) || ((__AF__) == GPIO_AF4_TIM22)    || \
1648                             ((__AF__) == GPIO_AF0_TIM2)     || ((__AF__) == GPIO_AF3_I2C1)     || \
1649                             ((__AF__) == GPIO_AF0_TIM21)    || ((__AF__) == GPIO_AF7_COMP2)    || \
1650                             ((__AF__) == GPIO_AF0_TIM22)    || ((__AF__) == GPIO_AF3_EVENTOUT) || \
1651                             ((__AF__) == GPIO_AF0_EVENTOUT) || ((__AF__) == GPIO_AF4_I2C1)     || \
1652                             ((__AF__) == GPIO_AF0_MCO)      || ((__AF__) == GPIO_AF4_USART1)   || \
1653                             ((__AF__) == GPIO_AF0_SWDIO)    || ((__AF__) == GPIO_AF0_SWCLK)    || \
1654                             ((__AF__) == GPIO_AF1_SPI1)     || ((__AF__) == GPIO_AF4_USART2)   || \
1655                             ((__AF__) == GPIO_AF1_SPI2)     || ((__AF__) == GPIO_AF4_LPUART1)  || \
1656                             ((__AF__) == GPIO_AF1_I2C1)     || ((__AF__) == GPIO_AF4_EVENTOUT) || \
1657                             ((__AF__) == GPIO_AF6_EVENTOUT) || ((__AF__) == GPIO_AF5_SPI2)     || \
1658                             ((__AF__) == GPIO_AF5_I2C2)     || ((__AF__) == GPIO_AF5_TIM2)     || \
1659                             ((__AF__) == GPIO_AF5_TIM21)    || ((__AF__) == GPIO_AF5_TIM22)    || \
1660                             ((__AF__) == GPIO_AF6_I2C2)     || ((__AF__) == GPIO_AF6_TIM21))
1661 
1662 
1663 
1664    #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
1665         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
1666                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
1667                                         ((__AF__) ==  GPIO_AF3_EVENTOUT)  ||   \
1668                                         ((__AF__) ==  GPIO_AF4_USART2)    ||   \
1669                                         ((__AF__) ==  GPIO_AF5_TIM22)     ||   \
1670                                         ((__AF__) ==  GPIO_AF6_EVENTOUT)  ||   \
1671                                         ((__AF__) ==  GPIO_AF7_COMP2)))   ||   \
1672          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
1673                                         ((__AF__) ==  GPIO_AF1_I2C1)      ||   \
1674                                         ((__AF__) ==  GPIO_AF2_TIM2)      ||   \
1675                                         ((__AF__) ==  GPIO_AF3_I2C1)      ||   \
1676                                         ((__AF__) ==  GPIO_AF4_LPUART1)   ||   \
1677                                         ((__AF__) ==  GPIO_AF5_I2C2)      ||   \
1678                                         ((__AF__) ==  GPIO_AF6_TIM21)))   ||   \
1679          (((__INSTANCE__) == GPIOC) && (((__AF__) ==  GPIO_AF0_EVENTOUT)  ||   \
1680                                         ((__AF__) ==  GPIO_AF2_LPUART1))) ||   \
1681          (((__INSTANCE__) == GPIOD) && (((__AF__) ==  GPIO_AF0_LPUART1))))
1682 
1683  /**
1684   * @}
1685   */
1686 #endif /* STM32L051xx/STM32L061xx*/
1687 /*------------------------------------------------------------------------------------------*/
1688 
1689 /*----------------------------------------------------------------------------*/
1690 /*------------------------- STM32L031xx/STM32L041xx---------------------------*/
1691 /*----------------------------------------------------------------------------*/
1692 #if defined (STM32L031xx)|| defined (STM32L041xx)
1693 /* The table below gives an overview of the different alternate functions per port.
1694  * For more details refer yourself to the product data sheet.
1695  *
1696  */
1697 /*     |   AF0  |   AF1  |   AF2  |   AF3  |   AF4  |   AF5  |   AF6  |   AF7  |
1698  *______________________________________________________________________________
1699  * PA0 |        |LPTIM1  |TIM2_C1 |        |USART2  |TIM2_TR |        |COMP1   |
1700  * PA1 |EVENTOUT|LPTIM1  |TIM2_C2 |I2C1    |USART2  |TIM21_TR|        |        |
1701  * PA2 |TIM21_C1|        |TIM2_C3 |        |USART2  |        |LPUART1 |COMP2   |
1702  * PA3 |TIM21_C2|        |TIM2_C4 |        |USART2  |        |LPUART1 |        |
1703  * PA4 |SPI1    |LPTIM1  |        |        |USART2  |TIM22_TR|        |        |
1704  * PA5 |SPI1    |LPTIM1  |TIM2_TR |        |        |TIM2_C1 |        |        |
1705  * PA6 |SPI1    |LPTIM1  |        |        |LPUART  |TIM22_C1|EVENTOUT|COMP1   |
1706  * PA7 |SPI1    |LPTIM1  |        |        |USART2  |TIM22_C2|EVENTOUT|COMP2   |
1707  * PA8 |MCO     |        |LPTIM1  |EVENTOUT|USART2  |TIM2_C1 |        |        |
1708  * PA9 |MCO     |I2C1    |        |        |USART2  |TIM22_C1|        |        |
1709  * PA10|        |I2C1    |        |        |USART2  |TIM22_C2|        |        |
1710  * PA11|SPI1    |        |EVENTOUT|        |USART2  |TIM21_C2|        |COMP1   |
1711  * PA12|SPI1    |        |EVENTOUT|        |USART2  |        |        |COMP2   |
1712  * PA13|SWDIO   |LPTIM1  |        |        |        |        |LPUART1 |        |
1713  * PA14|SWCLK   |LPTIM1  |        |I2C1    |USART2  |        |LPUART1 |        |
1714  * PA15|SPI1    |        |TIM2_TR |EVENTOUT|USART2  |TIM2_C1 |        |        |
1715  *_____________________________________________________________________________|
1716  * PB0 |EVENTOUT|SPI1    |        |        |USART2  |TIM2_C3 |        |        |
1717  * PB1 |USART2  |SPI1    |        |        |LPUART1 |TIM2_C4 |        |        |
1718  * PB2 |        |        |LPTIM1_O|        |        |        |        |        |
1719  * PB3 |SPI1    |        |TIM2_C2 |        |EVENTOUT|        |        |        |
1720  * PB4 |SPI1    |        |EVENTOUT|        |TIM22_C1|        |        |        |
1721  * PB5 |SPI1    |        |LPTIM1_I|I2C1    |TIM22_C2|        |        |        |
1722  * PB6 |USART2  |I2C1    |LPTIM1_T|        |        |TIM21_C1|        |        |
1723  * PB7 |USART2  |I2C1    |LPTIM1_I|        |        |        |        |        |
1724  * PB8 |        |        |        |        |I2C1    |        |        |        |
1725  * PB9 |        |        |EVENTOUT|        |I2C1    |        |        |        |
1726  * PB10|        |        |TIM2_C3 |        |        |        |LPUART1 |        |
1727  * PB11|EVENTOUT|        |TIM2_C4 |        |        |        |LPUART1 |        |
1728  * PB12|SPI2    |        |        |        |        |        |EVENTOUT|        |
1729  * PB13|SPI2    |        |MCO     |        |        |TIM21_C1|LPUART1 |        |
1730  * PB14|SPI2    |        |RTC     |        |        |TIM21_C2|LPUART1 |        |
1731  * PB15|SPI2    |        |RTC     |        |        |        |        |        |
1732  *_____________________________________________________________________________|
1733  * PC0 |LPTIM1_I|        |EVENTOUT|        |        |        |LPUART1 |        |
1734  * PC13|        |        |        |        |        |        |        |        |
1735  * PC14|        |        |        |        |        |        |        |        |
1736  * PC15|        |        |        |        |        |        |        |        |
1737  *_____________________________________________________________________________|
1738  * PH0 |        |        |        |        |        |        |        |        |
1739  * PH1 |        |        |        |        |        |        |        |        |
1740  *_____________________________________________________________________________|
1741  */
1742 
1743 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
1744  * @{
1745  */
1746 
1747 /*
1748  * Alternate function AF0
1749  */
1750 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
1751 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
1752 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
1753 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
1754 #define GPIO_AF0_LPTIM1        ((uint8_t)0x00U)  /* LPTIM1 Alternate Function mapping   */
1755 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
1756 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
1757 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
1758 /**
1759   *
1760   */
1761 
1762 /*
1763  * Alternate function AF1
1764  */
1765 #define GPIO_AF1_SPI1          ((uint8_t)0x01U)  /* SPI1 Alternate Function mapping   */
1766 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping   */
1767 #define GPIO_AF1_LPTIM1        ((uint8_t)0x01U)  /* LPTIM1 Alternate Function mapping */
1768 /**
1769   *
1770   */
1771 
1772 /*
1773  * Alternate function AF2
1774  */
1775 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping     */
1776 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping       */
1777 #define GPIO_AF2_MCO           ((uint8_t)0x02U)  /* MCO Alternate Function mapping        */
1778 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping   */
1779 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping        */
1780 /**
1781   *
1782   */
1783 
1784 /*
1785  * Alternate function AF3
1786  */
1787 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping     */
1788 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping  */
1789 /**
1790   *
1791   */
1792 
1793 /*
1794  * Alternate function AF4
1795  */
1796 #define GPIO_AF4_I2C1          ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping     */
1797 #define GPIO_AF4_USART2        ((uint8_t)0x04U)  /* USART2 Alternate Function mapping   */
1798 #define GPIO_AF4_LPUART1       ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping  */
1799 #define GPIO_AF4_TIM22         ((uint8_t)0x04U)  /* TIM22 Alternate Function mapping    */
1800 #define GPIO_AF4_EVENTOUT      ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping  */
1801 /**
1802   *
1803   */
1804 
1805 /*
1806  * Alternate function AF5
1807  */
1808 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
1809 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
1810 #define GPIO_AF5_TIM22         ((uint8_t)0x05U)  /* TIM22 Alternate Function mapping    */
1811 /**
1812   *
1813   */
1814 
1815 /*
1816  * Alternate function AF6
1817  */
1818 #define GPIO_AF6_LPUART1       ((uint8_t)0x06U)  /* LPUART1 Alternate Function mapping  */
1819 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping  */
1820 /**
1821   *
1822   */
1823 
1824 /*
1825  * Alternate function AF7
1826  */
1827 #define GPIO_AF7_COMP1         ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
1828 #define GPIO_AF7_COMP2         ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
1829 /**
1830   *
1831   */
1832 
1833 /**
1834   * @}
1835   */
1836 
1837 /**
1838   * @}
1839   */
1840 
1841 /** @defgroup GPIOEx_Private  GPIOEx Private
1842  * @{
1843  */
1844 /**
1845  * @brief  IS_GPIO_AF macro definition
1846  */
1847 
1848 #define IS_GPIO_AF(__AF__)   (((__AF__) == GPIO_AF0_EVENTOUT  ) || \
1849                               ((__AF__) == GPIO_AF0_TIM21     ) || \
1850                               ((__AF__) == GPIO_AF0_SPI1      ) || \
1851                               ((__AF__) == GPIO_AF0_USART2    ) || \
1852                               ((__AF__) == GPIO_AF0_LPTIM1    ) || \
1853                               ((__AF__) == GPIO_AF0_MCO       ) || \
1854                               ((__AF__) == GPIO_AF0_SWDIO     ) || \
1855                               ((__AF__) == GPIO_AF0_SWCLK     ) || \
1856                               ((__AF__) == GPIO_AF1_SPI1      ) || \
1857                               ((__AF__) == GPIO_AF1_I2C1      ) || \
1858                               ((__AF__) == GPIO_AF1_LPTIM1    ) || \
1859                               ((__AF__) == GPIO_AF2_LPTIM1    ) || \
1860                               ((__AF__) == GPIO_AF2_TIM2      ) || \
1861                               ((__AF__) == GPIO_AF2_MCO       ) || \
1862                               ((__AF__) == GPIO_AF2_EVENTOUT  ) || \
1863                               ((__AF__) == GPIO_AF2_RTC       ) || \
1864                               ((__AF__) == GPIO_AF3_I2C1      ) || \
1865                               ((__AF__) == GPIO_AF3_EVENTOUT  ) || \
1866                               ((__AF__) == GPIO_AF4_I2C1      ) || \
1867                               ((__AF__) == GPIO_AF4_USART2    ) || \
1868                               ((__AF__) == GPIO_AF4_LPUART1   ) || \
1869                               ((__AF__) == GPIO_AF4_TIM22     ) || \
1870                               ((__AF__) == GPIO_AF4_EVENTOUT  ) || \
1871                               ((__AF__) == GPIO_AF5_TIM2      ) || \
1872                               ((__AF__) == GPIO_AF5_TIM21     ) || \
1873                               ((__AF__) == GPIO_AF5_TIM22     ) || \
1874                               ((__AF__) == GPIO_AF6_LPUART1   ) || \
1875                               ((__AF__) == GPIO_AF6_EVENTOUT  ) || \
1876                               ((__AF__) == GPIO_AF7_COMP1     ) || \
1877                               ((__AF__) == GPIO_AF7_COMP2     ))
1878 
1879 
1880  #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
1881         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)   ||   \
1882                                         ((__AF__) ==  GPIO_AF1_LPTIM1)     ||   \
1883                                         ((__AF__) ==  GPIO_AF2_TIM2)       ||   \
1884                                         ((__AF__) ==  GPIO_AF3_I2C1)       ||   \
1885                                         ((__AF__) ==  GPIO_AF4_USART2)     ||   \
1886                                         ((__AF__) ==  GPIO_AF5_TIM22)      ||   \
1887                                         ((__AF__) ==  GPIO_AF6_LPUART1)    ||   \
1888                                         ((__AF__) ==  GPIO_AF7_COMP2)))    ||   \
1889          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)   ||   \
1890                                         ((__AF__) ==  GPIO_AF1_SPI1)       ||   \
1891                                         ((__AF__) ==  GPIO_AF2_LPTIM1)     ||   \
1892                                         ((__AF__) ==  GPIO_AF3_I2C1)       ||   \
1893                                         ((__AF__) ==  GPIO_AF4_LPUART1)    ||   \
1894                                         ((__AF__) ==  GPIO_AF5_TIM2)       ||   \
1895                                         ((__AF__) ==  GPIO_AF6_EVENTOUT))) ||   \
1896          (((__INSTANCE__) == GPIOC) && (((__AF__) ==  GPIO_AF0_LPTIM1)     ||   \
1897                                         ((__AF__) ==  GPIO_AF2_EVENTOUT)   ||   \
1898                                         ((__AF__) ==  GPIO_AF6_LPUART1))))
1899 
1900 /**
1901   * @}
1902   */
1903 
1904 #endif /* STM32L031xx/STM32L041xx*/
1905 /*------------------------------------------------------------------------------------------*/
1906 
1907 /*----------------------------------------------------------------------------*/
1908 /*------------------------- STM32L011xx/STM32L021xx---------------------------*/
1909 /*----------------------------------------------------------------------------*/
1910 #if defined (STM32L011xx)|| defined (STM32L021xx)
1911 /* The table below gives an overview of the different alternate functions per port.
1912  * For more details refer yourself to the product data sheet.
1913  *
1914  */
1915 /*     |   AF0   |   AF1    |   AF2  |   AF3   |   AF4    |   AF5  |   AF6     |   AF7   |
1916  *______________________________________________________________________________________
1917  * PA0 |USART2_RX|LPTIM1_IN1|TIM2_C1  |        |USART2_CTS|TIM2_ETR|LPUART1_RX |COMP1_OUT|
1918  * PA1 |EVENTOUT |LPTIM1_IN2|TIM2_C2  |I2C1    |USART2_RTS|TIM21_TR|LPUART1_TX |         |
1919  * PA2 |TIM21_C1 |          |TIM2_C3  |        |USART2_TX |        |LPUART1_TX |COMP2_OUT|
1920  * PA3 |TIM21_C2 |          |TIM2_C4  |        |USART2_RX |        |LPUART1_RX |         |
1921  * PA4 |SPI1     |LPTIM1_IN1|LPTIM1_TR|I2C1_SCL|USART2_CK |TIM2_TR |LPUART1_TX |COMP2_OUT|
1922  * PA5 |SPI1     |LPTIM1_IN2|TIM2_TR  |        |          |TIM2_C1 |           |         |
1923  * PA6 |SPI1     |LPTIM1_ETR|         |        |LPUART1_CT|        |EVENTOUT   |COMP1_OUT|
1924  * PA7 |SPI1     |LPTIM1_OUT|         |        |USART2_CTS|TIM21_T |EVENTOUT   |COMP2_OUT|
1925  * PA8 |MCO      |          |LPTIM1_I1|EVENTOUT|USART2_CK |TIM2_C1 |           |         |
1926  * PA9 |MCO      |I2C1_SCL  |LPTIM1_O |        |USART2_TX |TIM21_C2|           |COMP1_OUT|
1927  * PA10|TIM21_C1 |I2C1_SDA  |RTC_REFIN|        |USART2_RX |TIM2_C3 |           |COMP1_OUT|
1928  * PA11|SPI1     |LPTIM1_OUT|EVENTOUT |        |USART2_CTS|TIM21_C2|           |COMP1_OUT|
1929  * PA12|SPI1     |          |EVENTOUT |        |USART2_RTS|        |           |COMP2_OUT|
1930  * PA13|SWDIO    |LPTIM1_T  |         |I2C1_SDA|          |SPI1    |LPUART1_RX |COMP1_OUT|
1931  * PA14|SWCLK    |LPTIM1_O  |         |I2C1_SMB|USART2_TX |SPI1    |LPUART1_TX |COMP2_OUT|
1932  * PA15|SPI1     |          |TIM2_TR  |EVENTOUT|USART2_RX |TIM2_C1 |           |         |
1933  *______________________________________________________________________________________ |
1934  * PB0 |EVENTOUT |SPI1      |TIM2_C2  |        |USART2_RTS|TIM2_C3 |           |         |
1935  * PB1 |USART2_CK|SPI1      |LPTIM1_I1|        |LPUART1_RT|TIM2_C4 |           |         |
1936  * PB2 |         |          |LPTIM1_O |        |          |        |           |         |
1937  * PB3 |SPI1     |          |TIM2_C2  |        |EVENTOUT  |        |           |         |
1938  * PB4 |SPI1     |          |EVENTOUT |        |          |        |           |         |
1939  * PB5 |SPI1     |          |LPTIM1_I1|I2C1    |          |TIM21_C1|           |         |
1940  * PB6 |USART2_TX|I2C1_SCL  |LPTIM1_T |        |          |TIM2_C3 |LPUART1_TX |         |
1941  * PB7 |USART2_RX|I2C1      |LPTIM1_I2|        |          |TIM2_C4 |LPUART1_RX |         |
1942  * PB8 |USART2_TX|          |EVENTOUT |        |I2C1      |SPI1    |           |         |
1943  * PB9 |         |          |         |        |          |        |           |         |
1944  *______________________________________________________________________________________ |
1945  * PC14|         |          |         |        |          |        |           |         |
1946  * PC15|         |          |         |        |          |        |           |         |
1947  *______________________________________________________________________________________ |
1948  */
1949 
1950 /** @defgroup GPIOEx_Alternate_function_selection Alternate function selection
1951  * @{
1952  */
1953 
1954 /*
1955  * Alternate function AF0
1956  */
1957 #define GPIO_AF0_EVENTOUT      ((uint8_t)0x00U)  /* EVENTOUT Alternate Function mapping */
1958 #define GPIO_AF0_TIM21         ((uint8_t)0x00U)  /* TIM21 Alternate Function mapping    */
1959 #define GPIO_AF0_SPI1          ((uint8_t)0x00U)  /* SPI1 Alternate Function mapping     */
1960 #define GPIO_AF0_USART2        ((uint8_t)0x00U)  /* USART2 Alternate Function mapping   */
1961 #define GPIO_AF0_MCO           ((uint8_t)0x00U)  /* MCO Alternate Function mapping      */
1962 #define GPIO_AF0_SWDIO         ((uint8_t)0x00U)  /* SWDIO Alternate Function mapping    */
1963 #define GPIO_AF0_SWCLK         ((uint8_t)0x00U)  /* SWCLK Alternate Function mapping    */
1964 /**
1965   *
1966   */
1967 
1968 /*
1969  *  Alternate function AF1
1970  */
1971 #define GPIO_AF1_SPI1          ((uint8_t)0x01U)  /* SPI1 Alternate Function mapping   */
1972 #define GPIO_AF1_I2C1          ((uint8_t)0x01U)  /* I2C1 Alternate Function mapping   */
1973 #define GPIO_AF1_LPTIM1        ((uint8_t)0x01U)  /* LPTIM1 Alternate Function mapping */
1974 /**
1975   *
1976   */
1977 
1978 /*  Alternate function AF2
1979  *
1980  */
1981 #define GPIO_AF2_LPTIM1        ((uint8_t)0x02U)  /* LPTIM1 Alternate Function mapping     */
1982 #define GPIO_AF2_TIM2          ((uint8_t)0x02U)  /* TIM2 Alternate Function mapping       */
1983 #define GPIO_AF2_RTC           ((uint8_t)0x02U)  /* RTC Alternate Function mapping        */
1984 #define GPIO_AF2_EVENTOUT      ((uint8_t)0x02U)  /* EVENTOUT Alternate Function mapping   */
1985 /**
1986   *
1987   */
1988 
1989 /*
1990  * Alternate function AF3
1991  */
1992 #define GPIO_AF3_I2C1          ((uint8_t)0x03U)  /* I2C1 Alternate Function mapping     */
1993 #define GPIO_AF3_EVENTOUT      ((uint8_t)0x03U)  /* EVENTOUT Alternate Function mapping  */
1994 /**
1995   *
1996   */
1997 
1998 /*
1999  * Alternate function AF4
2000  */
2001 #define GPIO_AF4_I2C1          ((uint8_t)0x04U)  /* I2C1 Alternate Function mapping     */
2002 #define GPIO_AF4_USART2        ((uint8_t)0x04U)  /* USART2 Alternate Function mapping   */
2003 #define GPIO_AF4_LPUART1       ((uint8_t)0x04U)  /* LPUART1 Alternate Function mapping  */
2004 #define GPIO_AF4_EVENTOUT      ((uint8_t)0x04U)  /* EVENTOUT Alternate Function mapping  */
2005 /**
2006   *
2007   */
2008 
2009 /*
2010  * Alternate function AF5
2011  */
2012 #define GPIO_AF5_TIM2          ((uint8_t)0x05U)  /* TIM2 Alternate Function mapping     */
2013 #define GPIO_AF5_TIM21         ((uint8_t)0x05U)  /* TIM21 Alternate Function mapping    */
2014 #define GPIO_AF5_SPI1          ((uint8_t)0x05U)  /* SPI1 Alternate Function mapping    */
2015 /**
2016   *
2017   */
2018 
2019 /*
2020  * Alternate function AF6
2021  */
2022 #define GPIO_AF6_LPUART1       ((uint8_t)0x06U)  /* LPUART1 Alternate Function mapping  */
2023 #define GPIO_AF6_EVENTOUT      ((uint8_t)0x06U)  /* EVENTOUT Alternate Function mapping  */
2024 /**
2025   *
2026   */
2027 
2028 /*
2029  * Alternate function AF7
2030  */
2031 #define GPIO_AF7_COMP1         ((uint8_t)0x07U)  /* COMP1 Alternate Function mapping     */
2032 #define GPIO_AF7_COMP2         ((uint8_t)0x07U)  /* COMP2 Alternate Function mapping     */
2033 /**
2034   *
2035   */
2036 
2037 /**
2038   * @}
2039   */
2040 
2041 /**
2042   * @}
2043   */
2044 
2045 /** @defgroup GPIOEx_Private  GPIOEx Private
2046  * @{
2047  */
2048 /**
2049  *  IS_GPIO_AF macro definition
2050  */
2051 
2052 #define IS_GPIO_AF(__AF__)   (((__AF__) == GPIO_AF0_EVENTOUT  ) || \
2053                               ((__AF__) == GPIO_AF0_TIM21     ) || \
2054                               ((__AF__) == GPIO_AF0_SPI1      ) || \
2055                               ((__AF__) == GPIO_AF0_USART2    ) || \
2056                               ((__AF__) == GPIO_AF0_MCO       ) || \
2057                               ((__AF__) == GPIO_AF0_SWDIO     ) || \
2058                               ((__AF__) == GPIO_AF0_SWCLK     ) || \
2059                               ((__AF__) == GPIO_AF1_SPI1      ) || \
2060                               ((__AF__) == GPIO_AF1_I2C1      ) || \
2061                               ((__AF__) == GPIO_AF1_LPTIM1    ) || \
2062                               ((__AF__) == GPIO_AF2_LPTIM1    ) || \
2063                               ((__AF__) == GPIO_AF2_TIM2      ) || \
2064                               ((__AF__) == GPIO_AF2_EVENTOUT  ) || \
2065                               ((__AF__) == GPIO_AF2_RTC       ) || \
2066                               ((__AF__) == GPIO_AF3_I2C1      ) || \
2067                               ((__AF__) == GPIO_AF3_EVENTOUT  ) || \
2068                               ((__AF__) == GPIO_AF4_I2C1      ) || \
2069                               ((__AF__) == GPIO_AF4_USART2    ) || \
2070                               ((__AF__) == GPIO_AF4_LPUART1   ) || \
2071                               ((__AF__) == GPIO_AF4_EVENTOUT  ) || \
2072                               ((__AF__) == GPIO_AF5_TIM2      ) || \
2073                               ((__AF__) == GPIO_AF5_TIM21     ) || \
2074                               ((__AF__) == GPIO_AF5_SPI1      ) || \
2075                               ((__AF__) == GPIO_AF6_LPUART1   ) || \
2076                               ((__AF__) == GPIO_AF6_EVENTOUT  ) || \
2077                               ((__AF__) == GPIO_AF7_COMP1     ) || \
2078                               ((__AF__) == GPIO_AF7_COMP2     ))
2079 
2080 
2081  #define IS_GPIO_AF_AVAILABLE(__INSTANCE__,__AF__)  \
2082         ((((__INSTANCE__) == GPIOA) && (((__AF__) ==  GPIO_AF0_EVENTOUT)   ||   \
2083                                         ((__AF__) ==  GPIO_AF1_LPTIM1)     ||   \
2084                                         ((__AF__) ==  GPIO_AF2_TIM2)       ||   \
2085                                         ((__AF__) ==  GPIO_AF3_I2C1)       ||   \
2086                                         ((__AF__) ==  GPIO_AF4_USART2)     ||   \
2087                                         ((__AF__) ==  GPIO_AF5_TIM2)       ||   \
2088                                         ((__AF__) ==  GPIO_AF6_LPUART1)    ||   \
2089                                         ((__AF__) ==  GPIO_AF7_COMP2)))    ||   \
2090          (((__INSTANCE__) == GPIOB) && (((__AF__) ==  GPIO_AF0_EVENTOUT)   ||   \
2091                                         ((__AF__) ==  GPIO_AF1_SPI1)       ||   \
2092                                         ((__AF__) ==  GPIO_AF2_LPTIM1)     ||   \
2093                                         ((__AF__) ==  GPIO_AF3_I2C1)       ||   \
2094                                         ((__AF__) ==  GPIO_AF4_LPUART1)    ||   \
2095                                         ((__AF__) ==  GPIO_AF5_TIM2)       ||   \
2096                                         ((__AF__) ==  GPIO_AF6_EVENTOUT))))
2097 
2098  /**
2099   * @}
2100   */
2101 
2102 #endif /* STM32L011xx/STM32L021xx*/
2103 /*------------------------------------------------------------------------------------------*/
2104 
2105 
2106 
2107 #if defined (STM32L083xx) || defined (STM32L082xx) || defined (STM32L081xx) || \
2108     defined (STM32L073xx) || defined (STM32L072xx) || defined (STM32L071xx)
2109 
2110  /** @addtogroup GPIOEx_Exported_Constants
2111  * @{
2112  */
2113  /** @defgroup GPIOEx_Pin_Available Pin available
2114  * @{
2115  */
2116 #define GPIOA_PIN_AVAILABLE  GPIO_PIN_All
2117 #define GPIOB_PIN_AVAILABLE  GPIO_PIN_All
2118 #define GPIOC_PIN_AVAILABLE  GPIO_PIN_All
2119 #define GPIOD_PIN_AVAILABLE  GPIO_PIN_All
2120 #define GPIOE_PIN_AVAILABLE  GPIO_PIN_All
2121 #define GPIOH_PIN_AVAILABLE  (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_9 | GPIO_PIN_10)
2122 /**
2123   * @}
2124   */
2125 /**
2126   * @}
2127   */
2128 
2129  /** @addtogroup GPIOEx_Private
2130  * @{
2131  */
2132 #define GPIO_GET_INDEX(__GPIOx__)    (((__GPIOx__) == (GPIOA))? 0U :\
2133                                       ((__GPIOx__) == (GPIOB))? 1U :\
2134                                       ((__GPIOx__) == (GPIOC))? 2U :\
2135                                       ((__GPIOx__) == (GPIOD))? 3U :\
2136                                       ((__GPIOx__) == (GPIOE))? 4U :\
2137                                       ((__GPIOx__) == (GPIOH))? 5U : 6U)
2138 
2139 #define IS_GPIO_PIN_AVAILABLE(__INSTANCE__,__PIN__)  \
2140            ((((__INSTANCE__) == GPIOA) && (((__PIN__) & (GPIOA_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOA_PIN_AVAILABLE)) == (GPIOA_PIN_AVAILABLE))) || \
2141             (((__INSTANCE__) == GPIOB) && (((__PIN__) & (GPIOB_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOB_PIN_AVAILABLE)) == (GPIOB_PIN_AVAILABLE))) || \
2142             (((__INSTANCE__) == GPIOC) && (((__PIN__) & (GPIOC_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOC_PIN_AVAILABLE)) == (GPIOC_PIN_AVAILABLE))) || \
2143             (((__INSTANCE__) == GPIOD) && (((__PIN__) & (GPIOD_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOD_PIN_AVAILABLE)) == (GPIOD_PIN_AVAILABLE))) || \
2144             (((__INSTANCE__) == GPIOE) && (((__PIN__) & (GPIOE_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOE_PIN_AVAILABLE)) == (GPIOE_PIN_AVAILABLE))) || \
2145             (((__INSTANCE__) == GPIOH) && (((__PIN__) & (GPIOH_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOH_PIN_AVAILABLE)) == (GPIOH_PIN_AVAILABLE))))
2146 /**
2147   * @}
2148   */
2149 #elif defined (STM32L031xx) || defined (STM32L041xx)
2150 
2151 /** @addtogroup GPIOEx_Exported_Constants
2152  * @{
2153  */
2154 /** @defgroup GPIOEx_Pin_Available Pin available
2155  * @{
2156  */
2157 
2158 #define GPIOA_PIN_AVAILABLE  GPIO_PIN_All
2159 #define GPIOB_PIN_AVAILABLE  GPIO_PIN_All
2160 #define GPIOC_PIN_AVAILABLE  (GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15)
2161 #define GPIOH_PIN_AVAILABLE  (GPIO_PIN_0 | GPIO_PIN_1)
2162 /**
2163   * @}
2164   */
2165 /**
2166   * @}
2167   */
2168 
2169 /** @addtogroup GPIOEx_Private
2170  * @{
2171  */
2172 #define GPIO_GET_INDEX(__GPIOx__)    (((__GPIOx__) == (GPIOA))? 0U :\
2173                                       ((__GPIOx__) == (GPIOB))? 1U :\
2174                                       ((__GPIOx__) == (GPIOC))? 2U :\
2175                                       ((__GPIOx__) == (GPIOH))? 5U : 6U)
2176 
2177 
2178 #define IS_GPIO_PIN_AVAILABLE(__INSTANCE__,__PIN__)  \
2179            ((((__INSTANCE__) == GPIOA) && (((__PIN__) & (GPIOA_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOA_PIN_AVAILABLE)) == (GPIOA_PIN_AVAILABLE))) || \
2180             (((__INSTANCE__) == GPIOB) && (((__PIN__) & (GPIOB_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOB_PIN_AVAILABLE)) == (GPIOB_PIN_AVAILABLE))) || \
2181             (((__INSTANCE__) == GPIOC) && (((__PIN__) & (GPIOC_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOC_PIN_AVAILABLE)) == (GPIOC_PIN_AVAILABLE))) || \
2182             (((__INSTANCE__) == GPIOH) && (((__PIN__) & (GPIOH_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOH_PIN_AVAILABLE)) == (GPIOH_PIN_AVAILABLE))))
2183 
2184 /**
2185   * @}
2186   */
2187 
2188 #elif defined (STM32L011xx) || defined (STM32L021xx)
2189 
2190 /** @addtogroup GPIOEx_Exported_Constants
2191  * @{
2192  */
2193 /** @defgroup GPIOEx_Pin_Available Pin available
2194  * @{
2195  */
2196 
2197 #define GPIOA_PIN_AVAILABLE  GPIO_PIN_All
2198 #define GPIOB_PIN_AVAILABLE  (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | \
2199                               GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 )
2200 #define GPIOC_PIN_AVAILABLE  (GPIO_PIN_14 | GPIO_PIN_15)
2201 
2202 /**
2203   * @}
2204   */
2205 /**
2206   * @}
2207   */
2208 
2209 /** @addtogroup GPIOEx_Private
2210  * @{
2211  */
2212 #define GPIO_GET_INDEX(__GPIOx__)    (((__GPIOx__) == (GPIOA))? 0U :\
2213                                       ((__GPIOx__) == (GPIOB))? 1U :\
2214                                       ((__GPIOx__) == (GPIOC))? 2U : 6U)
2215 
2216 
2217 #define IS_GPIO_PIN_AVAILABLE(__INSTANCE__,__PIN__)  \
2218            ((((__INSTANCE__) == GPIOA) && (((__PIN__) & (GPIOA_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOA_PIN_AVAILABLE)) == (GPIOA_PIN_AVAILABLE))) || \
2219             (((__INSTANCE__) == GPIOB) && (((__PIN__) & (GPIOB_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOB_PIN_AVAILABLE)) == (GPIOB_PIN_AVAILABLE))) || \
2220             (((__INSTANCE__) == GPIOC) && (((__PIN__) & (GPIOC_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOC_PIN_AVAILABLE)) == (GPIOC_PIN_AVAILABLE))))
2221 /**
2222   * @}
2223   */
2224 
2225 #elif defined (STM32L063xx) || defined (STM32L062xx) || defined (STM32L061xx) || \
2226       defined (STM32L053xx) || defined (STM32L052xx) || defined (STM32L051xx)
2227 
2228 /** @addtogroup GPIOEx_Exported_Constants
2229  * @{
2230  */
2231 /** @defgroup GPIOEx_Pin_Available Pin available
2232  * @{
2233  */
2234 #define GPIOA_PIN_AVAILABLE  GPIO_PIN_All
2235 #define GPIOB_PIN_AVAILABLE  GPIO_PIN_All
2236 #define GPIOC_PIN_AVAILABLE  GPIO_PIN_All
2237 #define GPIOD_PIN_AVAILABLE  GPIO_PIN_2
2238 #define GPIOH_PIN_AVAILABLE  GPIO_PIN_0 | GPIO_PIN_1
2239 /**
2240   * @}
2241   */
2242 /**
2243   * @}
2244   */
2245 
2246 /** @addtogroup GPIOEx_Private
2247  * @{
2248  */
2249 #define GPIO_GET_INDEX(__GPIOx__)    (((__GPIOx__) == (GPIOA))? 0U :\
2250                                       ((__GPIOx__) == (GPIOB))? 1U :\
2251                                       ((__GPIOx__) == (GPIOC))? 2U :\
2252                                       ((__GPIOx__) == (GPIOD))? 3U :\
2253                                       ((__GPIOx__) == (GPIOH))? 5U : 6U)
2254 
2255 #define IS_GPIO_PIN_AVAILABLE(__INSTANCE__,__PIN__)  \
2256                 ((((__INSTANCE__) == GPIOA) && (((__PIN__) & (GPIOA_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOA_PIN_AVAILABLE)) == (GPIOA_PIN_AVAILABLE))) || \
2257                  (((__INSTANCE__) == GPIOB) && (((__PIN__) & (GPIOB_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOB_PIN_AVAILABLE)) == (GPIOB_PIN_AVAILABLE))) || \
2258                  (((__INSTANCE__) == GPIOC) && (((__PIN__) & (GPIOC_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOC_PIN_AVAILABLE)) == (GPIOC_PIN_AVAILABLE))) || \
2259                  (((__INSTANCE__) == GPIOD) && (((__PIN__) & (GPIOD_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOD_PIN_AVAILABLE)) == (GPIOD_PIN_AVAILABLE))) || \
2260                  (((__INSTANCE__) == GPIOH) && (((__PIN__) & (GPIOH_PIN_AVAILABLE)) != 0U) && (((__PIN__) | (GPIOH_PIN_AVAILABLE)) == (GPIOH_PIN_AVAILABLE))))
2261 /**
2262   * @}
2263   */
2264 
2265 #endif /* STM32L083xx || STM32L082xx || STM32L081xx || STM32L073xx || STM32L072xx || STM32L071xx*/
2266 
2267 
2268 /**
2269  * @}
2270  */
2271 
2272 /**
2273  * @}
2274  */
2275 #ifdef __cplusplus
2276 }
2277 #endif
2278 
2279 #endif /* __STM32L0xx_HAL_GPIO_EX_H */
2280 
2281 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
2282 
2283