Environmental Shield API
Diff: BSP/Nucleo-F401RE/nucleo-f401re.h
- Revision:
- 0:9e645e6ed2ce
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BSP/Nucleo-F401RE/nucleo-f401re.h Tue Aug 19 07:13:15 2014 +0000 @@ -0,0 +1,324 @@ +/** + ****************************************************************************** + * @file nucleo-f401re.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-April-2014 + * @brief This file contains definitions for: + * - LEDs and push-button available on NUCLEO-F401RE Kit + * from STMicroelectronics + * - LCD, joystick and microSD available on Adafruit 1.8" TFT LCD + * shield (reference ID 802) + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __NUCLEO_F401RE_H +#define __NUCLEO_F401RE_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_hal.h" + + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup NUCLEO_F401RE + * @{ + */ + +/** @addtogroup NUCLEO_F401RE_LOW_LEVEL + * @{ + */ + +/** @defgroup NUCLEO_F401RE_LOW_LEVEL_Exported_Types + * @{ + */ + + +typedef enum +{ + BUTTON_KEY = 0 +} Button_TypeDef; + +typedef enum +{ + BUTTON_MODE_GPIO = 0, + BUTTON_MODE_EXTI = 1 +} ButtonMode_TypeDef; + +typedef enum +{ + JOY_NONE = 0, + JOY_SEL = 1, + JOY_DOWN = 2, + JOY_LEFT = 3, + JOY_RIGHT = 4, + JOY_UP = 5 +} JOYState_TypeDef; + +/** + * @} + */ + +/** @defgroup NUCLEO_F401RE_LOW_LEVEL_Exported_Constants + * @{ + */ + +/** +* @brief Define for NUCLEO_F401RE board + */ +#if !defined (USE_NUCLEO_F401RE) + #define USE_NUCLEO_F401RE +#endif + +/** + * @} + */ + +/** @addtogroup NUCLEO_F401RE_LOW_LEVEL_LED + * @{ + */ +#define LEDn 1 + +#define LED2_PIN GPIO_PIN_5 +#define LED2_GPIO_PORT GPIOA +#define LED2_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() +#define LED2_GPIO_CLK_DISABLE() __GPIOA_CLK_DISABLE() + +#define LEDx_GPIO_CLK_ENABLE(__INDEX__) (((__INDEX__) == 0) ? LED2_GPIO_CLK_ENABLE() : 0) +#define LEDx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? LED2_GPIO_CLK_DISABLE() : 0) +/** + * @} + */ + +/** @addtogroup NUCLEO_F401RE_LOW_LEVEL_BUTTON + * @{ + */ +#define BUTTONn 1 + +/** + * @brief Key push-button + */ +#define KEY_BUTTON_PIN GPIO_PIN_13 +#define KEY_BUTTON_GPIO_PORT GPIOC +#define KEY_BUTTON_GPIO_CLK_ENABLE() __GPIOC_CLK_ENABLE() +#define KEY_BUTTON_GPIO_CLK_DISABLE() __GPIOC_CLK_DISABLE() +#define KEY_BUTTON_EXTI_LINE GPIO_PIN_13 +#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn +//EXTI4_15_IRQn + +#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) (((__INDEX__) == 0) ? KEY_BUTTON_GPIO_CLK_ENABLE() : 0) +#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? KEY_BUTTON_GPIO_CLK_DISABLE() : 0) +/** + * @} + */ + +/** @addtogroup NUCLEO_F401RE_LOW_LEVEL_BUS + * @{ + */ +/*###################### SPI1 ###################################*/ +//#define NUCLEO_SPIx SPI1 +//#define NUCLEO_SPIx_CLK_ENABLE() __SPI1_CLK_ENABLE() +// +//#define NUCLEO_SPIx_SCK_AF GPIO_AF0_SPI1 +//#define NUCLEO_SPIx_SCK_GPIO_PORT GPIOA +//#define NUCLEO_SPIx_SCK_PIN GPIO_PIN_5 +//#define NUCLEO_SPIx_SCK_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() +//#define NUCLEO_SPIx_SCK_GPIO_CLK_DISABLE() __GPIOA_CLK_DISABLE() +// +//#define NUCLEO_SPIx_MISO_MOSI_AF GPIO_AF0_SPI1 +//#define NUCLEO_SPIx_MISO_MOSI_GPIO_PORT GPIOA +//#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() +//#define NUCLEO_SPIx_MISO_MOSI_GPIO_CLK_DISABLE() __GPIOA_CLK_DISABLE() +//#define NUCLEO_SPIx_MISO_PIN GPIO_PIN_6 +//#define NUCLEO_SPIx_MOSI_PIN GPIO_PIN_7 +///* Maximum Timeout values for flags waiting loops. These timeouts are not based +// on accurate values, they just guarantee that the application will not remain +// stuck if the SPI communication is corrupted. +// You may modify these timeout values depending on CPU frequency and application +// conditions (interrupts routines ...). */ +//#define NUCLEO_SPIx_TIMEOUT_MAX 1000 + + +/** + * @brief Definition for I2C_ONBOARD_SENSORS port, connected to I2C3 + */ + +/* I2C clock speed configuration (in Hz) */ +#ifndef NUCLEO_I2C_SHIELDS_SPEED + #define NUCLEO_I2C_SHIELDS_SPEED 100000 +#endif /* I2C_ONBOARD_SENSORS_SPEED */ + +/* I2C peripheral configuration defines (control interface of the audio codec) */ +#define NUCLEO_I2C_SHIELDS I2C1 +#define NUCLEO_I2C_SHIELDS_CLK_ENABLE() __I2C1_CLK_ENABLE() +#define NUCLEO_I2C_SHIELDS_SCL_SDA_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE() +#define NUCLEO_I2C_SHIELDS_SCL_SDA_AF GPIO_AF4_I2C1 +#define NUCLEO_I2C_SHIELDS_SCL_SDA_GPIO_PORT GPIOB +#define NUCLEO_I2C_SHIELDS_SCL_PIN GPIO_PIN_8 +#define NUCLEO_I2C_SHIELDS_SDA_PIN GPIO_PIN_9 + +#define NUCLEO_I2C_SHIELDS_FORCE_RESET() __I2C1_FORCE_RESET() +#define NUCLEO_I2C_SHIELDS_RELEASE_RESET() __I2C1_RELEASE_RESET() + +/* I2C interrupt requests */ +#define NUCLEO_I2C_SHIELDS_EV_IRQn I2C1_EV_IRQn +#define NUCLEO_I2C_SHIELDS_ER_IRQn I2C1_ER_IRQn + +//#define NUCLEO_I2C_SHIELDS_MUTEX I2C1_Mutex_id +//#define NUCLEO_I2C_SHIELDS_MUTEX_TAKE() osMutexWait(NUCLEO_I2C_SHIELDS_MUTEX, 0) +//#define NUCLEO_I2C_SHIELDS_MUTEX_RELEASE() osMutexRelease(NUCLEO_I2C_SHIELDS_MUTEX) + +/* Maximum Timeout values for flags waiting loops. These timeouts are not based + on accurate values, they just guarantee that the application will not remain + stuck if the SPI communication is corrupted. + You may modify these timeout values depending on CPU frequency and application + conditions (interrupts routines ...). */ +#define NUCLEO_I2C_SHIELDS_TIMEOUT_MAX 0x1000 /*<! The value of the maximal timeout for BUS waiting loops */ + +/** @addtogroup NUCLEO_F401RE_LOW_LEVEL_COMPONENT + * @{ + */ + +/** + * @brief SD Control Lines management + */ +#define SD_CS_LOW() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_RESET) +#define SD_CS_HIGH() HAL_GPIO_WritePin(SD_CS_GPIO_PORT, SD_CS_PIN, GPIO_PIN_SET) + +/** + * @brief LCD Control Lines management + */ +#define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_RESET) +#define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_CS_GPIO_PORT, LCD_CS_PIN, GPIO_PIN_SET) +#define LCD_DC_LOW() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_RESET) +#define LCD_DC_HIGH() HAL_GPIO_WritePin(LCD_DC_GPIO_PORT, LCD_DC_PIN, GPIO_PIN_SET) + +/** + * @brief SD Control Interface pins + */ +#define SD_CS_PIN GPIO_PIN_5 +#define SD_CS_GPIO_PORT GPIOB +#define SD_CS_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE() +#define SD_CS_GPIO_CLK_DISABLE() __GPIOB_CLK_DISABLE() + +/** + * @brief LCD Control Interface pins + */ +#define LCD_CS_PIN GPIO_PIN_6 +#define LCD_CS_GPIO_PORT GPIOB +#define LCD_CS_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE() +#define LCD_CS_GPIO_CLK_DISABLE() __GPIOB_CLK_DISABLE() + +/** + * @brief LCD Data/Command Interface pins + */ +#define LCD_DC_PIN GPIO_PIN_9 +#define LCD_DC_GPIO_PORT GPIOA +#define LCD_DC_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() +#define LCD_DC_GPIO_CLK_DISABLE() __GPIOA_CLK_DISABLE() + +/*##################### ADC1 ###################################*/ +/** + * @brief ADC Interface pins + * used to detect motion of Joystick available on Adafruit 1.8" TFT shield + */ +#define NUCLEO_ADCx ADC1 +#define NUCLEO_ADCx_CLK_ENABLE() __ADC1_CLK_ENABLE() + +#define NUCLEO_ADCx_GPIO_PORT GPIOB +#define NUCLEO_ADCx_GPIO_PIN GPIO_PIN_0 +#define NUCLEO_ADCx_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE() +#define NUCLEO_ADCx_GPIO_CLK_DISABLE() __GPIOB_CLK_ENABLE() + + +/* User can use this section to tailor USARTx/UARTx instance used and associated + resources */ +/* Definition for USARTx clock resources */ +#define USARTx USART2 +#define USARTx_CLK_ENABLE() __USART2_CLK_ENABLE(); +#define DMAx_CLK_ENABLE() __DMA1_CLK_ENABLE() +#define USARTx_RX_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() +#define USARTx_TX_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() + +#define USARTx_FORCE_RESET() __USART2_FORCE_RESET() +#define USARTx_RELEASE_RESET() __USART2_RELEASE_RESET() + +/* Definition for USARTx Pins */ +#define USARTx_TX_PIN GPIO_PIN_2 +#define USARTx_TX_GPIO_PORT GPIOA +#define USARTx_TX_AF GPIO_AF7_USART2 +#define USARTx_RX_PIN GPIO_PIN_3 +#define USARTx_RX_GPIO_PORT GPIOA +#define USARTx_RX_AF GPIO_AF7_USART2 + +/* Definition for USARTx's DMA */ +#define USARTx_TX_DMA_CHANNEL DMA_CHANNEL_4 +#define USARTx_TX_DMA_STREAM DMA1_Stream6 +#define USARTx_RX_DMA_CHANNEL DMA_CHANNEL_4 +#define USARTx_RX_DMA_STREAM DMA1_Stream5 + +/** @defgroup NUCLEO_F401RE_LOW_LEVEL_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __NUCLEO_F401RE_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + +