mirror of
https://github.com/STMicroelectronics/STM32CubeF4.git
synced 2025-05-03 22:17:07 +08:00
205 lines
5.3 KiB
C
205 lines
5.3 KiB
C
/**
|
|
******************************************************************************
|
|
* @file stm32f429i_discovery_io.c
|
|
* @author MCD Application Team
|
|
* @brief This file provides a set of functions needed to manage the STMPE811
|
|
* IO Expander device mounted on STM32F429I-Discovery Kit.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2017 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "stm32f429i_discovery_io.h"
|
|
|
|
/** @addtogroup BSP
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup STM32F429I_DISCOVERY
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup STM32F429I_DISCOVERY_IO STM32F429I DISCOVERY IO
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup STM32F429I_DISCOVERY_IO_Private_Types_Definitions STM32F429I DISCOVERY IO Private Types Definitions
|
|
* @{
|
|
*/
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup STM32F429I_DISCOVERY_IO_Private_Defines STM32F429I DISCOVERY IO Private Defines
|
|
* @{
|
|
*/
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup STM32F429I_DISCOVERY_IO_Private_Macros STM32F429I DISCOVERY IO Private Macros
|
|
* @{
|
|
*/
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
/** @defgroup STM32F429I_DISCOVERY_IO_Private_Variables STM32F429I DISCOVERY IO Private Variables
|
|
* @{
|
|
*/
|
|
static IO_DrvTypeDef *IoDrv;
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
/** @defgroup STM32F429I_DISCOVERY_IO_Private_Function_Prototypes STM32F429I DISCOVERY IO Private Function Prototypes
|
|
* @{
|
|
*/
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup STM32F429I_DISCOVERY_IO_Private_Functions STM32F429I DISCOVERY IO Private Functions
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Initializes and configures the IO functionalities and configures all
|
|
* necessary hardware resources (GPIOs, clocks..).
|
|
* @note BSP_IO_Init() is using HAL_Delay() function to ensure that stmpe811
|
|
* IO Expander is correctly reset. HAL_Delay() function provides accurate
|
|
* delay (in milliseconds) based on variable incremented in SysTick ISR.
|
|
* This implies that if BSP_IO_Init() is called from a peripheral ISR process,
|
|
* then the SysTick interrupt must have higher priority (numerically lower)
|
|
* than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
|
|
* @retval IO_OK if all initializations done correctly. Other value if error.
|
|
*/
|
|
uint8_t BSP_IO_Init(void)
|
|
{
|
|
uint8_t ret = IO_ERROR;
|
|
|
|
/* Read ID and verify the IO expander is ready */
|
|
if(stmpe811_io_drv.ReadID(IO_I2C_ADDRESS) == STMPE811_ID)
|
|
{
|
|
/* Initialize the IO driver structure */
|
|
IoDrv = &stmpe811_io_drv;
|
|
ret = IO_OK;
|
|
}
|
|
|
|
if(ret == IO_OK)
|
|
{
|
|
IoDrv->Init(IO_I2C_ADDRESS);
|
|
IoDrv->Start(IO_I2C_ADDRESS, IO_PIN_ALL);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
* @brief Gets the selected pins IT status.
|
|
* @param IoPin: The selected pins to check the status.
|
|
* This parameter could be any combination of the IO pins.
|
|
* @retval Status of IO Pin checked.
|
|
*/
|
|
uint8_t BSP_IO_ITGetStatus(uint16_t IoPin)
|
|
{
|
|
/* Return the IO Pin IT status */
|
|
return (IoDrv->ITStatus(IO_I2C_ADDRESS, IoPin));
|
|
}
|
|
|
|
/**
|
|
* @brief Clears all the IO IT pending bits
|
|
*/
|
|
void BSP_IO_ITClear(void)
|
|
{
|
|
/* Clear all IO IT pending bits */
|
|
IoDrv->ClearIT(IO_I2C_ADDRESS, IO_PIN_ALL);
|
|
}
|
|
|
|
/**
|
|
* @brief Configures the IO pin(s) according to IO mode structure value.
|
|
* @param IoPin: IO pin(s) to be configured.
|
|
* This parameter could be any combination of the following values:
|
|
* @arg STMPE811_PIN_x: where x can be from 0 to 7.
|
|
* @param IoMode: The IO pin mode to configure, could be one of the following values:
|
|
* @arg IO_MODE_INPUT
|
|
* @arg IO_MODE_OUTPUT
|
|
* @arg IO_MODE_IT_RISING_EDGE
|
|
* @arg IO_MODE_IT_FALLING_EDGE
|
|
* @arg IO_MODE_IT_LOW_LEVEL
|
|
* @arg IO_MODE_IT_HIGH_LEVEL
|
|
*/
|
|
void BSP_IO_ConfigPin(uint16_t IoPin, IO_ModeTypedef IoMode)
|
|
{
|
|
/* Configure the selected IO pin(s) mode */
|
|
IoDrv->Config(IO_I2C_ADDRESS, IoPin, IoMode);
|
|
}
|
|
|
|
/**
|
|
* @brief Sets the selected pins state.
|
|
* @param IoPin: The selected pins to write.
|
|
* This parameter could be any combination of the IO pins.
|
|
* @param PinState: the new pins state to write
|
|
*/
|
|
void BSP_IO_WritePin(uint16_t IoPin, uint8_t PinState)
|
|
{
|
|
/* Set the Pin state */
|
|
IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, PinState);
|
|
}
|
|
|
|
/**
|
|
* @brief Gets the selected pins current state.
|
|
* @param IoPin: The selected pins to read.
|
|
* This parameter could be any combination of the IO pins.
|
|
* @retval The current pins state
|
|
*/
|
|
uint16_t BSP_IO_ReadPin(uint16_t IoPin)
|
|
{
|
|
return(IoDrv->ReadPin(IO_I2C_ADDRESS, IoPin));
|
|
}
|
|
|
|
/**
|
|
* @brief Toggles the selected pins state.
|
|
* @param IoPin: The selected pins to toggle.
|
|
* This parameter could be any combination of the IO pins.
|
|
*/
|
|
void BSP_IO_TogglePin(uint16_t IoPin)
|
|
{
|
|
/* Toggle the current pin state */
|
|
if(IoDrv->ReadPin(IO_I2C_ADDRESS, IoPin) == 1 /* Set */)
|
|
{
|
|
IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, 0 /* Reset */);
|
|
}
|
|
else
|
|
{
|
|
IoDrv->WritePin(IO_I2C_ADDRESS, IoPin, 1 /* Set */);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|