]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_STM32F100_Atollic/Utilities/STM32_EVAL/STM32_Discovery/STM32vldiscovery.c
Added STM32 discovery board simple demo project.
[freertos] / Demo / CORTEX_STM32F100_Atollic / Utilities / STM32_EVAL / STM32_Discovery / STM32vldiscovery.c
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32vldiscovery.c\r
4   * @author  MCD Team\r
5   * @version V1.0.0\r
6   * @date    15/09/2010\r
7   * @brief   STM32VLDISCOVERY abstraction layer. \r
8   *          This file should be added to the main application to use the provided\r
9   *          functions that manage the Leds LD3 and LD4 and the USER push-button.\r
10   ******************************************************************************\r
11   * @copy\r
12   *\r
13   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
14   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
15   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
16   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
17   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
18   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
19   *\r
20   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
21   */ \r
22   \r
23 /* Includes ------------------------------------------------------------------*/\r
24 #include "STM32vldiscovery.h"\r
25 \r
26 /** @defgroup STM32vldiscovery_Private_TypesDefinitions\r
27   * @{\r
28   */ \r
29 /**\r
30   * @}\r
31   */ \r
32 \r
33 \r
34 /** @defgroup STM32vldiscovery_Private_Defines\r
35   * @{\r
36   */ \r
37 /**\r
38   * @}\r
39   */ \r
40 \r
41 \r
42 /** @defgroup STM32vldiscovery_Private_Macros\r
43   * @{\r
44   */ \r
45 /**\r
46   * @}\r
47   */ \r
48 \r
49 \r
50 /** @defgroup STM32vldiscovery_Private_Variables\r
51   * @{\r
52   */ \r
53 GPIO_TypeDef* GPIO_PORT[LEDn] = {LED3_GPIO_PORT, LED4_GPIO_PORT};\r
54 \r
55 const uint16_t GPIO_PIN[LEDn] = {LED3_PIN, LED4_PIN};\r
56 \r
57 const uint32_t GPIO_CLK[LEDn] = {LED3_GPIO_CLK, LED4_GPIO_CLK};\r
58 \r
59 const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {USER_BUTTON_EXTI_PIN_SOURCE};\r
60 \r
61 const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {USER_BUTTON_EXTI_PORT_SOURCE};\r
62 \r
63 GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {USER_BUTTON_GPIO_PORT}; \r
64 \r
65 const uint16_t BUTTON_PIN[BUTTONn] = {USER_BUTTON_PIN}; \r
66 \r
67 const uint32_t BUTTON_CLK[BUTTONn] = {USER_BUTTON_GPIO_CLK};\r
68 \r
69 const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {USER_BUTTON_EXTI_LINE};\r
70 \r
71 const uint16_t BUTTON_IRQn[BUTTONn] = {USER_BUTTON_EXTI_IRQn};                                   \r
72 \r
73 /** @defgroup STM32vldiscovery_Private_FunctionPrototypes\r
74   * @{\r
75   */ \r
76 /**\r
77   * @}\r
78   */ \r
79 \r
80 \r
81 /** @defgroup STM32vldiscovery_Private_Functions\r
82   * @{\r
83   */ \r
84 \r
85 /**\r
86   * @brief  Configures LED GPIO.\r
87   * @param  Led: Specifies the Led to be configured. \r
88   *   This parameter can be one of following parameters:\r
89   *     @arg LED3\r
90   *     @arg LED4\r
91   * @retval None\r
92   */\r
93 void STM32vldiscovery_LEDInit(Led_TypeDef Led)\r
94 {\r
95   GPIO_InitTypeDef  GPIO_InitStructure;\r
96   \r
97   /* Enable the GPIO_LED Clock */\r
98   RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);\r
99 \r
100   /* Configure the GPIO_LED pin */\r
101   GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];\r
102   \r
103   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\r
104   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
105   GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);\r
106 }\r
107 \r
108 /**\r
109   * @brief  Turns selected LED On.\r
110   * @param  Led: Specifies the Led to be set on. \r
111   *   This parameter can be one of following parameters:\r
112   *     @arg LED3\r
113   *     @arg LED4  \r
114   * @retval None\r
115   */\r
116 void STM32vldiscovery_LEDOn(Led_TypeDef Led)\r
117 {\r
118   GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];   \r
119 }\r
120 \r
121 /**\r
122   * @brief  Turns selected LED Off.\r
123   * @param  Led: Specifies the Led to be set off. \r
124   *   This parameter can be one of following parameters:\r
125   *     @arg LED3\r
126   *     @arg LED4 \r
127   * @retval None\r
128   */\r
129 void STM32vldiscovery_LEDOff(Led_TypeDef Led)\r
130 {\r
131   GPIO_PORT[Led]->BRR = GPIO_PIN[Led];   \r
132 }\r
133 \r
134 /**\r
135   * @brief  Toggles the selected LED.\r
136   * @param  Led: Specifies the Led to be toggled. \r
137   *   This parameter can be one of following parameters:\r
138   *     @arg LED3\r
139   *     @arg LED4  \r
140   * @retval None\r
141   */\r
142 void STM32vldiscovery_LEDToggle(Led_TypeDef Led)\r
143 {\r
144   GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];\r
145 }\r
146 \r
147 /**\r
148   * @brief  Configures Button GPIO and EXTI Line.\r
149   * @param  Button: Specifies the Button to be configured.\r
150   *   This parameter can be one of following parameters:   \r
151   *     @arg BUTTON_USER: USER Push Button \r
152   * @param  Button_Mode: Specifies Button mode.\r
153   *   This parameter can be one of following parameters:   \r
154   *     @arg BUTTON_MODE_GPIO: Button will be used as simple IO \r
155   *     @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt\r
156   *                     generation capability  \r
157   * @retval None\r
158   */\r
159 void STM32vldiscovery_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)\r
160 {\r
161   GPIO_InitTypeDef GPIO_InitStructure;\r
162   EXTI_InitTypeDef EXTI_InitStructure;\r
163   NVIC_InitTypeDef NVIC_InitStructure;\r
164 \r
165   /* Enable the BUTTON Clock */\r
166   RCC_APB2PeriphClockCmd(BUTTON_CLK[Button] | RCC_APB2Periph_AFIO, ENABLE);\r
167 \r
168   /* Configure Button pin as input floating */\r
169   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;\r
170   GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];\r
171   GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);\r
172 \r
173   if (Button_Mode == BUTTON_MODE_EXTI)\r
174   {\r
175     /* Connect Button EXTI Line to Button GPIO Pin */\r
176     GPIO_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);\r
177 \r
178     /* Configure Button EXTI line */\r
179     EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];\r
180     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;\r
181 \r
182     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  \r
183 \r
184     EXTI_InitStructure.EXTI_LineCmd = ENABLE;\r
185     EXTI_Init(&EXTI_InitStructure);\r
186 \r
187     /* Enable and set Button EXTI Interrupt to the lowest priority */\r
188     NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];\r
189     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;\r
190     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;\r
191     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\r
192 \r
193     NVIC_Init(&NVIC_InitStructure); \r
194   }\r
195 }\r
196 \r
197 /**\r
198   * @brief  Returns the selected Button state.\r
199   * @param  Button: Specifies the Button to be checked.\r
200   *   This parameter can be one of following parameters:    \r
201   *     @arg BUTTON_USER: USER Push Button \r
202   * @retval The Button GPIO pin value.\r
203   */\r
204 uint32_t STM32vldiscovery_PBGetState(Button_TypeDef Button)\r
205 {\r
206   return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);\r
207 }\r
208 \r
209 /**\r
210   * @}\r
211   */ \r
212 \r
213 /**\r
214   * @}\r
215   */ \r
216 \r
217 \r
218 /**\r
219   * @}\r
220   */ \r
221 \r
222 /**\r
223   * @}\r
224   */ \r
225 \r
226 /**\r
227   * @}\r
228   */\r
229     \r
230 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r