#include "Bsp.h"

/**
 * @brief 启用GPIO口时钟
 * @note  void
 * @param GpioX:GPIO引脚
 * @retval void
 */
void GpioClockEnable(const GPIO_MAP_T *GpioX)
{
    GpioX->ClockCmd(GpioX->ClockTree,ENABLE);
}
/**
 * @brief 配置GPIO口
 * @note void
 * @param GpioX:引脚 GpioMode:GPIO模式 GpioSpeed:GPIO速度
 * @retval void
 */
void GpioConfig(const GPIO_MAP_T *GpioX, GPIOMode_TypeDef GpioMode, GPIOSpeed_TypeDef GpioSpeed)
{
    GPIO_InitTypeDef GpioInitSt;

    GpioInitSt.GPIO_Pin = GpioX->Periph.GpioPin;
    GpioInitSt.GPIO_Mode = GpioMode;
    GpioInitSt.GPIO_Speed = GpioSpeed;
    //打开外设时钟
    GpioClockEnable(GpioX);
    GPIO_Init(GpioX->Periph.GpioPort, &GpioInitSt);
}
/**
 * @brief 改变GPIO口状态
 * @note
 * @param GpioX:GPIO引脚 Value:设置值
 * @retval void
 */
void GpioSet(const GPIO_MAP_T *GpioX, uint8_t Value)
{
    if (Value == (uint8_t)RESET)
    {
        GPIO_ResetBits(GpioX->Periph.GpioPort, GpioX->Periph.GpioPin);
    }
    else if (Value == (uint8_t)SET)
    {
        GPIO_SetBits(GpioX->Periph.GpioPort, GpioX->Periph.GpioPin);
    }
}
/**
 * @brief  读取GPIO口状态
 * @note
 * @param GpioX:GPIO引脚
 * @retval 0:低电平，1高电平
 */
unsigned char GpioGet(const GPIO_MAP_T *GpioX)
{
    return (unsigned char)GPIO_ReadInputDataBit(GpioX->Periph.GpioPort, GpioX->Periph.GpioPin);
}

