Merge pull request #93 from zyp/master
[fw/stlink] / example / libs_stm / inc / stm32l1xx / stm32l1xx_gpio.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32l1xx_gpio.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0\r
6   * @date    31-December-2010\r
7   * @brief   This file contains all the functions prototypes for the GPIO \r
8   *          firmware library.\r
9   ******************************************************************************\r
10   * @attention\r
11   *\r
12   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
13   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
14   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
15   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
16   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
17   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18   *\r
19   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
20   ******************************************************************************  \r
21   */ \r
22 \r
23 /* Define to prevent recursive inclusion -------------------------------------*/\r
24 #ifndef __STM32L1xx_GPIO_H\r
25 #define __STM32L1xx_GPIO_H\r
26 \r
27 #ifdef __cplusplus\r
28  extern "C" {\r
29 #endif\r
30 \r
31 /* Includes ------------------------------------------------------------------*/\r
32 #include "stm32l1xx.h"\r
33 \r
34 /** @addtogroup STM32L1xx_StdPeriph_Driver\r
35   * @{\r
36   */\r
37 \r
38 /** @addtogroup GPIO\r
39   * @{\r
40   */\r
41 \r
42 /* Exported types ------------------------------------------------------------*/\r
43 \r
44 #define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \\r
45                                     ((PERIPH) == GPIOB) || \\r
46                                     ((PERIPH) == GPIOC) || \\r
47                                     ((PERIPH) == GPIOD) || \\r
48                                     ((PERIPH) == GPIOE) || \\r
49                                     ((PERIPH) == GPIOH))\r
50 \r
51 /** @defgroup Configuration_Mode_enumeration \r
52   * @{\r
53   */ \r
54 typedef enum\r
55\r
56   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */\r
57   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */\r
58   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */\r
59   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */\r
60 }GPIOMode_TypeDef;\r
61 #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN)  || ((MODE) == GPIO_Mode_OUT) || \\r
62                             ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))\r
63 /**\r
64   * @}\r
65   */\r
66 \r
67 /** @defgroup Output_type_enumeration\r
68   * @{\r
69   */ \r
70 typedef enum\r
71 { GPIO_OType_PP = 0x00,\r
72   GPIO_OType_OD = 0x01\r
73 }GPIOOType_TypeDef;\r
74 #define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD))\r
75 \r
76 /**\r
77   * @}\r
78   */\r
79 \r
80 /** @defgroup Output_Maximum_frequency_enumeration \r
81   * @{\r
82   */ \r
83 typedef enum\r
84\r
85   GPIO_Speed_400KHz = 0x00, /*!< Very Low Speed */\r
86   GPIO_Speed_2MHz   = 0x01, /*!< Low Speed */\r
87   GPIO_Speed_10MHz  = 0x02, /*!< Medium Speed */\r
88   GPIO_Speed_40MHz  = 0x03  /*!< High Speed */\r
89 }GPIOSpeed_TypeDef;\r
90 #define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_400KHz) || ((SPEED) == GPIO_Speed_2MHz) || \\r
91                               ((SPEED) == GPIO_Speed_10MHz)||  ((SPEED) == GPIO_Speed_40MHz))\r
92 /**\r
93   * @}\r
94   */\r
95 \r
96 /** @defgroup Configuration_Pull-Up_Pull-Down_enumeration \r
97   * @{\r
98   */ \r
99 typedef enum\r
100 { GPIO_PuPd_NOPULL = 0x00,\r
101   GPIO_PuPd_UP     = 0x01,\r
102   GPIO_PuPd_DOWN   = 0x02\r
103 }GPIOPuPd_TypeDef;\r
104 #define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \\r
105                             ((PUPD) == GPIO_PuPd_DOWN))\r
106 /**\r
107   * @}\r
108   */\r
109 \r
110 /** @defgroup Bit_SET_and_Bit_RESET_enumeration\r
111   * @{\r
112   */\r
113 typedef enum\r
114 { Bit_RESET = 0,\r
115   Bit_SET\r
116 }BitAction;\r
117 #define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))\r
118 \r
119 /**\r
120   * @}\r
121   */\r
122 \r
123 /** \r
124   * @brief  GPIO Init structure definition\r
125   */ \r
126 typedef struct\r
127 {\r
128   uint32_t GPIO_Pin;              /*!< Specifies the GPIO pins to be configured.\r
129                                        This parameter can be any value of @ref GPIO_pins_define */\r
130 \r
131   GPIOMode_TypeDef GPIO_Mode;     /*!< Specifies the operating mode for the selected pins.\r
132                                        This parameter can be a value of @ref GPIOMode_TypeDef */\r
133 \r
134   GPIOSpeed_TypeDef GPIO_Speed;   /*!< Specifies the speed for the selected pins.\r
135                                        This parameter can be a value of @ref GPIOSpeed_TypeDef */\r
136 \r
137   GPIOOType_TypeDef GPIO_OType;   /*!< Specifies the operating output type for the selected pins.\r
138                                        This parameter can be a value of @ref GPIOOType_TypeDef */\r
139 \r
140   GPIOPuPd_TypeDef GPIO_PuPd;     /*!< Specifies the operating Pull-up/Pull down for the selected pins.\r
141                                        This parameter can be a value of @ref GPIOPuPd_TypeDef */\r
142 }GPIO_InitTypeDef;\r
143 \r
144 /* Exported constants --------------------------------------------------------*/\r
145 \r
146 /** @defgroup GPIO_Exported_Constants\r
147   * @{\r
148   */\r
149   \r
150 /** @defgroup GPIO_pins_define \r
151   * @{\r
152   */\r
153 #define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */\r
154 #define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */\r
155 #define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */\r
156 #define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */\r
157 #define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */\r
158 #define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */\r
159 #define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */\r
160 #define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */\r
161 #define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */\r
162 #define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */\r
163 #define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */\r
164 #define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */\r
165 #define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */\r
166 #define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */\r
167 #define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */\r
168 #define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */\r
169 #define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */\r
170 \r
171 #define IS_GPIO_PIN(PIN) ((PIN) != (uint16_t)0x00)\r
172 #define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \\r
173                               ((PIN) == GPIO_Pin_1) || \\r
174                               ((PIN) == GPIO_Pin_2) || \\r
175                               ((PIN) == GPIO_Pin_3) || \\r
176                               ((PIN) == GPIO_Pin_4) || \\r
177                               ((PIN) == GPIO_Pin_5) || \\r
178                               ((PIN) == GPIO_Pin_6) || \\r
179                               ((PIN) == GPIO_Pin_7) || \\r
180                               ((PIN) == GPIO_Pin_8) || \\r
181                               ((PIN) == GPIO_Pin_9) || \\r
182                               ((PIN) == GPIO_Pin_10) || \\r
183                               ((PIN) == GPIO_Pin_11) || \\r
184                               ((PIN) == GPIO_Pin_12) || \\r
185                               ((PIN) == GPIO_Pin_13) || \\r
186                               ((PIN) == GPIO_Pin_14) || \\r
187                               ((PIN) == GPIO_Pin_15))\r
188 /**\r
189   * @}\r
190   */\r
191 \r
192 /** @defgroup GPIO_Pin_sources \r
193   * @{\r
194   */ \r
195 #define GPIO_PinSource0            ((uint8_t)0x00)\r
196 #define GPIO_PinSource1            ((uint8_t)0x01)\r
197 #define GPIO_PinSource2            ((uint8_t)0x02)\r
198 #define GPIO_PinSource3            ((uint8_t)0x03)\r
199 #define GPIO_PinSource4            ((uint8_t)0x04)\r
200 #define GPIO_PinSource5            ((uint8_t)0x05)\r
201 #define GPIO_PinSource6            ((uint8_t)0x06)\r
202 #define GPIO_PinSource7            ((uint8_t)0x07)\r
203 #define GPIO_PinSource8            ((uint8_t)0x08)\r
204 #define GPIO_PinSource9            ((uint8_t)0x09)\r
205 #define GPIO_PinSource10           ((uint8_t)0x0A)\r
206 #define GPIO_PinSource11           ((uint8_t)0x0B)\r
207 #define GPIO_PinSource12           ((uint8_t)0x0C)\r
208 #define GPIO_PinSource13           ((uint8_t)0x0D)\r
209 #define GPIO_PinSource14           ((uint8_t)0x0E)\r
210 #define GPIO_PinSource15           ((uint8_t)0x0F)\r
211 \r
212 #define IS_GPIO_PIN_SOURCE(PINSOURCE) (((PINSOURCE) == GPIO_PinSource0) || \\r
213                                        ((PINSOURCE) == GPIO_PinSource1) || \\r
214                                        ((PINSOURCE) == GPIO_PinSource2) || \\r
215                                        ((PINSOURCE) == GPIO_PinSource3) || \\r
216                                        ((PINSOURCE) == GPIO_PinSource4) || \\r
217                                        ((PINSOURCE) == GPIO_PinSource5) || \\r
218                                        ((PINSOURCE) == GPIO_PinSource6) || \\r
219                                        ((PINSOURCE) == GPIO_PinSource7) || \\r
220                                        ((PINSOURCE) == GPIO_PinSource8) || \\r
221                                        ((PINSOURCE) == GPIO_PinSource9) || \\r
222                                        ((PINSOURCE) == GPIO_PinSource10) || \\r
223                                        ((PINSOURCE) == GPIO_PinSource11) || \\r
224                                        ((PINSOURCE) == GPIO_PinSource12) || \\r
225                                        ((PINSOURCE) == GPIO_PinSource13) || \\r
226                                        ((PINSOURCE) == GPIO_PinSource14) || \\r
227                                        ((PINSOURCE) == GPIO_PinSource15))\r
228 /**\r
229   * @}\r
230   */\r
231 \r
232 /** @defgroup GPIO_Alternat_function_selection_define \r
233   * @{\r
234   */\r
235 \r
236 /** \r
237   * @brief  AF 0 selection  \r
238   */ \r
239 #define GPIO_AF_RTC_50Hz      ((uint8_t)0x00)  /*!< RTC 50/60 Hz Alternate Function mapping */\r
240 #define GPIO_AF_MCO           ((uint8_t)0x00)  /*!< MCO Alternate Function mapping */\r
241 #define GPIO_AF_RTC_AF1       ((uint8_t)0x00)  /*!< RTC_AF1 Alternate Function mapping */\r
242 #define GPIO_AF_WKUP          ((uint8_t)0x00)  /*!< Wakeup (WKUP1, WKUP2 and WKUP3) Alternate Function mapping */\r
243 #define GPIO_AF_SWJ           ((uint8_t)0x00)  /*!< SWJ (SW and JTAG) Alternate Function mapping */\r
244 #define GPIO_AF_TRACE         ((uint8_t)0x00)  /*!< TRACE Alternate Function mapping */\r
245 \r
246 /** \r
247   * @brief  AF 1 selection  \r
248   */ \r
249 #define GPIO_AF_TIM2          ((uint8_t)0x01)  /*!< TIM2 Alternate Function mapping */\r
250 /** \r
251   * @brief  AF 2 selection  \r
252   */ \r
253 #define GPIO_AF_TIM3          ((uint8_t)0x02)  /*!< TIM3 Alternate Function mapping */\r
254 #define GPIO_AF_TIM4          ((uint8_t)0x02)  /*!< TIM4 Alternate Function mapping */\r
255 /** \r
256   * @brief  AF 3 selection  \r
257   */ \r
258 #define GPIO_AF_TIM9           ((uint8_t)0x03)  /*!< TIM9 Alternate Function mapping */\r
259 #define GPIO_AF_TIM10          ((uint8_t)0x03)  /*!< TIM10 Alternate Function mapping */\r
260 #define GPIO_AF_TIM11          ((uint8_t)0x03)  /*!< TIM11 Alternate Function mapping */\r
261 /** \r
262   * @brief  AF 4 selection  \r
263   */ \r
264 #define GPIO_AF_I2C1          ((uint8_t)0x04)  /*!< I2C1 Alternate Function mapping */\r
265 #define GPIO_AF_I2C2          ((uint8_t)0x04)  /*!< I2C2 Alternate Function mapping */\r
266 /** \r
267   * @brief  AF 5 selection  \r
268   */ \r
269 #define GPIO_AF_SPI1          ((uint8_t)0x05)  /*!< SPI1 Alternate Function mapping */\r
270 #define GPIO_AF_SPI2          ((uint8_t)0x05)  /*!< SPI2 Alternate Function mapping */\r
271 /** \r
272   * @brief  AF 7 selection  \r
273   */ \r
274 #define GPIO_AF_USART1        ((uint8_t)0x07)  /*!< USART1 Alternate Function mapping */\r
275 #define GPIO_AF_USART2        ((uint8_t)0x07)  /*!< USART2 Alternate Function mapping */\r
276 #define GPIO_AF_USART3        ((uint8_t)0x07)  /*!< USART3 Alternate Function mapping */\r
277 /** \r
278   * @brief  AF 10 selection  \r
279   */ \r
280 #define GPIO_AF_USB           ((uint8_t)0xA)  /*!< USB Full speed device  Alternate Function mapping */\r
281 /** \r
282   * @brief  AF 11 selection  \r
283   */ \r
284 #define GPIO_AF_LCD           ((uint8_t)0x0B)  /*!< LCD Alternate Function mapping */\r
285 /** \r
286   * @brief  AF 14 selection  \r
287   */ \r
288 #define GPIO_AF_RI            ((uint8_t)0x0E)  /*!< RI Alternate Function mapping */\r
289 \r
290 /** \r
291   * @brief  AF 15 selection  \r
292   */ \r
293 #define GPIO_AF_EVENTOUT      ((uint8_t)0x0F)  /*!< EVENTOUT Alternate Function mapping */\r
294 \r
295 #define IS_GPIO_AF(AF)   (((AF) == GPIO_AF_RTC_50Hz) || ((AF) == GPIO_AF_MCO) || \\r
296                           ((AF) == GPIO_AF_RTC_AF1) || ((AF) == GPIO_AF_WKUP) || \\r
297                           ((AF) == GPIO_AF_SWJ)    || ((AF) == GPIO_AF_TRACE) || \\r
298                           ((AF) == GPIO_AF_TIM2)   || ((AF)== GPIO_AF_TIM3) || \\r
299                           ((AF) == GPIO_AF_TIM4)   || ((AF)== GPIO_AF_TIM9) || \\r
300                           ((AF) == GPIO_AF_TIM10)  || ((AF)== GPIO_AF_TIM11) || \\r
301                           ((AF) == GPIO_AF_I2C1)   || ((AF) == GPIO_AF_I2C2) || \\r
302                           ((AF) == GPIO_AF_SPI1)   || ((AF) == GPIO_AF_SPI2) || \\r
303                           ((AF) == GPIO_AF_USART1) || ((AF) == GPIO_AF_USART2) || \\r
304                           ((AF) == GPIO_AF_USART3) || ((AF) == GPIO_AF_USB) || \\r
305                           ((AF) == GPIO_AF_LCD)    || ((AF) == GPIO_AF_RI) || \\r
306                           ((AF) == GPIO_AF_EVENTOUT))\r
307 \r
308 /**\r
309   * @}\r
310   */\r
311 \r
312 /** @defgroup GPIO_Legacy \r
313   * @{\r
314   */\r
315     \r
316 #define GPIO_Mode_AIN GPIO_Mode_AN\r
317 \r
318 /**\r
319   * @}\r
320   */\r
321 \r
322 /**\r
323   * @}\r
324   */  \r
325   \r
326 /* Exported macro ------------------------------------------------------------*/\r
327 /* Exported functions ------------------------------------------------------- */\r
328 \r
329 /*  Function used to set the GPIO configuration to the default reset state ****/\r
330 void GPIO_DeInit(GPIO_TypeDef* GPIOx);\r
331 \r
332 /* Initialization and Configuration functions *********************************/\r
333 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);\r
334 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);\r
335 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);\r
336 \r
337 /* GPIO Read and Write functions **********************************************/\r
338 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);\r
339 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);\r
340 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);\r
341 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);\r
342 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);\r
343 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);\r
344 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);\r
345 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);\r
346 \r
347 /* GPIO Alternate functions configuration functions ***************************/\r
348 void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);\r
349 \r
350 #ifdef __cplusplus\r
351 }\r
352 #endif\r
353 \r
354 #endif /*__STM32L1xx_GPIO_H */\r
355 \r
356 /**\r
357   * @}\r
358   */\r
359 \r
360 /**\r
361   * @}\r
362   */\r
363 \r
364 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r