2 ******************************************************************************
\r
3 * @file stm32vldiscovery.c
\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
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
20 * <h2><center>© COPYRIGHT 2010 STMicroelectronics</center></h2>
\r
23 /* Includes ------------------------------------------------------------------*/
\r
24 #include "STM32vldiscovery.h"
\r
26 /** @defgroup STM32vldiscovery_Private_TypesDefinitions
\r
34 /** @defgroup STM32vldiscovery_Private_Defines
\r
42 /** @defgroup STM32vldiscovery_Private_Macros
\r
50 /** @defgroup STM32vldiscovery_Private_Variables
\r
53 GPIO_TypeDef* GPIO_PORT[LEDn] = {LED3_GPIO_PORT, LED4_GPIO_PORT};
\r
55 const uint16_t GPIO_PIN[LEDn] = {LED3_PIN, LED4_PIN};
\r
57 const uint32_t GPIO_CLK[LEDn] = {LED3_GPIO_CLK, LED4_GPIO_CLK};
\r
59 const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {USER_BUTTON_EXTI_PIN_SOURCE};
\r
61 const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {USER_BUTTON_EXTI_PORT_SOURCE};
\r
63 GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {USER_BUTTON_GPIO_PORT};
\r
65 const uint16_t BUTTON_PIN[BUTTONn] = {USER_BUTTON_PIN};
\r
67 const uint32_t BUTTON_CLK[BUTTONn] = {USER_BUTTON_GPIO_CLK};
\r
69 const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {USER_BUTTON_EXTI_LINE};
\r
71 const uint16_t BUTTON_IRQn[BUTTONn] = {USER_BUTTON_EXTI_IRQn};
\r
73 /** @defgroup STM32vldiscovery_Private_FunctionPrototypes
\r
81 /** @defgroup STM32vldiscovery_Private_Functions
\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
93 void STM32vldiscovery_LEDInit(Led_TypeDef Led)
\r
95 GPIO_InitTypeDef GPIO_InitStructure;
\r
97 /* Enable the GPIO_LED Clock */
\r
98 RCC_APB2PeriphClockCmd(GPIO_CLK[Led], ENABLE);
\r
100 /* Configure the GPIO_LED pin */
\r
101 GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
\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
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
116 void STM32vldiscovery_LEDOn(Led_TypeDef Led)
\r
118 GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];
\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
129 void STM32vldiscovery_LEDOff(Led_TypeDef Led)
\r
131 GPIO_PORT[Led]->BRR = GPIO_PIN[Led];
\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
142 void STM32vldiscovery_LEDToggle(Led_TypeDef Led)
\r
144 GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];
\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
159 void STM32vldiscovery_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)
\r
161 GPIO_InitTypeDef GPIO_InitStructure;
\r
162 EXTI_InitTypeDef EXTI_InitStructure;
\r
163 NVIC_InitTypeDef NVIC_InitStructure;
\r
165 /* Enable the BUTTON Clock */
\r
166 RCC_APB2PeriphClockCmd(BUTTON_CLK[Button] | RCC_APB2Periph_AFIO, ENABLE);
\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
173 if (Button_Mode == BUTTON_MODE_EXTI)
\r
175 /* Connect Button EXTI Line to Button GPIO Pin */
\r
176 GPIO_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);
\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
182 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
\r
184 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
\r
185 EXTI_Init(&EXTI_InitStructure);
\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
193 NVIC_Init(&NVIC_InitStructure);
\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
204 uint32_t STM32vldiscovery_PBGetState(Button_TypeDef Button)
\r
206 return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);
\r
230 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
\r