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