stm32f4_discovery.c
257 lines
| 7.0 KiB
| text/x-c
|
CLexer
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r14 | /** | ||
****************************************************************************** | ||||
* @file stm32f4_discovery.c | ||||
* @author MCD Application Team | ||||
* @version V1.0.0 | ||||
* @date 19-September-2011 | ||||
* @brief This file provides set of firmware functions to manage Leds and | ||||
* push-button available on STM32F4-Discovery Kit from STMicroelectronics. | ||||
****************************************************************************** | ||||
* @attention | ||||
* | ||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS | ||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE | ||||
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY | ||||
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING | ||||
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE | ||||
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. | ||||
* | ||||
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2> | ||||
****************************************************************************** | ||||
*/ | ||||
/* Includes ------------------------------------------------------------------*/ | ||||
#include "stm32f4_discovery.h" | ||||
//ADDED BY ME!!!!!!!!!!!!!!!!!!!! | ||||
#include "stm32f4xx_conf.h" | ||||
/** @addtogroup Utilities | ||||
* @{ | ||||
*/ | ||||
/** @addtogroup STM32F4_DISCOVERY | ||||
* @{ | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL | ||||
* @brief This file provides set of firmware functions to manage Leds and push-button | ||||
* available on STM32F4-Discovery Kit from STMicroelectronics. | ||||
* @{ | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions | ||||
* @{ | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_Defines | ||||
* @{ | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_Macros | ||||
* @{ | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_Variables | ||||
* @{ | ||||
*/ | ||||
GPIO_TypeDef* GPIO_PORT[LEDn] = {LED4_GPIO_PORT, LED3_GPIO_PORT, LED5_GPIO_PORT, | ||||
LED6_GPIO_PORT}; | ||||
const uint16_t GPIO_PIN[LEDn] = {LED4_PIN, LED3_PIN, LED5_PIN, | ||||
LED6_PIN}; | ||||
const uint32_t GPIO_CLK[LEDn] = {LED4_GPIO_CLK, LED3_GPIO_CLK, LED5_GPIO_CLK, | ||||
LED6_GPIO_CLK}; | ||||
GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {USER_BUTTON_GPIO_PORT }; | ||||
const uint16_t BUTTON_PIN[BUTTONn] = {USER_BUTTON_PIN }; | ||||
const uint32_t BUTTON_CLK[BUTTONn] = {USER_BUTTON_GPIO_CLK }; | ||||
const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {USER_BUTTON_EXTI_LINE }; | ||||
const uint8_t BUTTON_PORT_SOURCE[BUTTONn] = {USER_BUTTON_EXTI_PORT_SOURCE}; | ||||
const uint8_t BUTTON_PIN_SOURCE[BUTTONn] = {USER_BUTTON_EXTI_PIN_SOURCE }; | ||||
const uint8_t BUTTON_IRQn[BUTTONn] = {USER_BUTTON_EXTI_IRQn }; | ||||
NVIC_InitTypeDef NVIC_InitStructure; | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes | ||||
* @{ | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Private_Functions | ||||
* @{ | ||||
*/ | ||||
/** | ||||
* @brief Configures LED GPIO. | ||||
* @param Led: Specifies the Led to be configured. | ||||
* This parameter can be one of following parameters: | ||||
* @arg LED4 | ||||
* @arg LED3 | ||||
* @arg LED5 | ||||
* @arg LED6 | ||||
* @retval None | ||||
*/ | ||||
void STM_EVAL_LEDInit(Led_TypeDef Led) | ||||
{ | ||||
GPIO_InitTypeDef GPIO_InitStructure; | ||||
/* Enable the GPIO_LED Clock */ | ||||
RCC_AHB1PeriphClockCmd(GPIO_CLK[Led], ENABLE); | ||||
/* Configure the GPIO_LED pin */ | ||||
GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led]; | ||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; | ||||
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; | ||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; | ||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | ||||
GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure); | ||||
} | ||||
/** | ||||
* @brief Turns selected LED On. | ||||
* @param Led: Specifies the Led to be set on. | ||||
* This parameter can be one of following parameters: | ||||
* @arg LED4 | ||||
* @arg LED3 | ||||
* @arg LED5 | ||||
* @arg LED6 | ||||
* @retval None | ||||
*/ | ||||
void STM_EVAL_LEDOn(Led_TypeDef Led) | ||||
{ | ||||
GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led]; | ||||
} | ||||
/** | ||||
* @brief Turns selected LED Off. | ||||
* @param Led: Specifies the Led to be set off. | ||||
* This parameter can be one of following parameters: | ||||
* @arg LED4 | ||||
* @arg LED3 | ||||
* @arg LED5 | ||||
* @arg LED6 | ||||
* @retval None | ||||
*/ | ||||
void STM_EVAL_LEDOff(Led_TypeDef Led) | ||||
{ | ||||
GPIO_PORT[Led]->BSRRH = GPIO_PIN[Led]; | ||||
} | ||||
/** | ||||
* @brief Toggles the selected LED. | ||||
* @param Led: Specifies the Led to be toggled. | ||||
* This parameter can be one of following parameters: | ||||
* @arg LED4 | ||||
* @arg LED3 | ||||
* @arg LED5 | ||||
* @arg LED6 | ||||
* @retval None | ||||
*/ | ||||
void STM_EVAL_LEDToggle(Led_TypeDef Led) | ||||
{ | ||||
GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led]; | ||||
} | ||||
/** | ||||
* @brief Configures Button GPIO and EXTI Line. | ||||
* @param Button: Specifies the Button to be configured. | ||||
* This parameter should be: BUTTON_USER | ||||
* @param Button_Mode: Specifies Button mode. | ||||
* This parameter can be one of following parameters: | ||||
* @arg BUTTON_MODE_GPIO: Button will be used as simple IO | ||||
* @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt | ||||
* generation capability | ||||
* @retval None | ||||
*/ | ||||
void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode) | ||||
{ | ||||
GPIO_InitTypeDef GPIO_InitStructure; | ||||
EXTI_InitTypeDef EXTI_InitStructure; | ||||
NVIC_InitTypeDef NVIC_InitStructure; | ||||
/* Enable the BUTTON Clock */ | ||||
RCC_AHB1PeriphClockCmd(BUTTON_CLK[Button], ENABLE); | ||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); | ||||
/* Configure Button pin as input */ | ||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; | ||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; | ||||
GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button]; | ||||
GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure); | ||||
if (Button_Mode == BUTTON_MODE_EXTI) | ||||
{ | ||||
/* Connect Button EXTI Line to Button GPIO Pin */ | ||||
SYSCFG_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]); | ||||
/* Configure Button EXTI line */ | ||||
/* EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button]; | ||||
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; | ||||
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; | ||||
EXTI_InitStructure.EXTI_LineCmd = ENABLE; | ||||
EXTI_Init(&EXTI_InitStructure);*/ | ||||
/* Enable and set Button EXTI Interrupt to the lowest priority */ | ||||
/* NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button]; | ||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; | ||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; | ||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; | ||||
NVIC_Init(&NVIC_InitStructure); */ | ||||
} | ||||
} | ||||
/** | ||||
* @brief Returns the selected Button state. | ||||
* @param Button: Specifies the Button to be checked. | ||||
* This parameter should be: BUTTON_USER | ||||
* @retval The Button GPIO pin value. | ||||
*/ | ||||
uint32_t STM_EVAL_PBGetState(Button_TypeDef Button) | ||||
{ | ||||
return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]); | ||||
} | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/** | ||||
* @} | ||||
*/ | ||||
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ | ||||