Files
VoiletBspStm32F10x/Bsp/Gpio.c
T
2026-05-24 16:23:49 +08:00

125 lines
2.8 KiB
C

#include "Bsp.h"
#ifdef USE_DIGITAL_OUTPUT
extern GPIO_ST DigiTalOutPut[DO_NUM];
#endif
#ifdef USE_DIGITAL_INPUT
extern GPIO_ST DigiTalInPut[DI_NUM];
#endif
//LED灯数组
#ifdef USE_LED
extern GPIO_ST DigiTalLed[LED_NUM];
#endif
void SystemEnableGpioClock(uint32_t GpioBase)
{
if(GpioBase == (uint32_t)GPIOA)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
if(GpioBase == (uint32_t)GPIOB)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
if(GpioBase == (uint32_t)GPIOC)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
if(GpioBase == (uint32_t)GPIOD)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
if(GpioBase == (uint32_t)GPIOE)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
if(GpioBase == (uint32_t)GPIOF)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
if(GpioBase == (uint32_t)GPIOG)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
}
/**
* @brief 初始化GPIO口外设的时钟
* @param void
* @retval void
* @note void
* @example void
*/
void SystemGpioInit(void)
{
uint8_t i = 0x00;
if (DO_NUM != NULL)
{
for (i = 0;i < DO_NUM;i++)
{
SystemEnableGpioClock((uint32_t)DigiTalOutPut[i].GpioPort);
}
}
if (DI_NUM != NULL)
{
for (i = 0;i < DI_NUM;i++)
{
SystemEnableGpioClock((uint32_t)DigiTalInPut[i].GpioPort);
}
}
if (LED_NUM != NULL)
{
for (i = 0;i < LED_NUM;i++)
{
SystemEnableGpioClock((uint32_t)DigiTalLed[i].GpioPort);
}
}
}
/**
* @brief 配置GPIO口
* @param GpioX:GPIO组 GpioPinX:GPIO引脚 GpioMode:GPIO模式 GpioSpeed:GPIO速度
* @retval void
* @note void
* @example void
*/
void GpioConfig(GPIO_TypeDef *GpioX, uint16_t GpioPinX,
GPIOMode_TypeDef GpioMode, GPIOSpeed_TypeDef GpioSpeed)
{
GPIO_InitTypeDef GpioInitSt;
GpioInitSt.GPIO_Pin = GpioPinX;
GpioInitSt.GPIO_Mode = GpioMode;
GpioInitSt.GPIO_Speed = GpioSpeed;
GPIO_Init(GpioX, &GpioInitSt);
}
/**
* @brief 改变GPIO口状态
* @param GpioX:GPIO组 GpioPinX:GPIO引脚 state: GPIO状态
* @retval void
* @note void
* @example void
*/
void GpioSetSts(GPIO_TypeDef *GpioX, uint16_t GpioPinX, uint8_t Status)
{
if (Status == (uint8_t)RESET)
{
GPIO_ResetBits(GpioX, GpioPinX);
}
else if (Status == (uint8_t)SET)
{
GPIO_SetBits(GpioX, GpioPinX);
}
}
/**
* @brief 读取GPIO口状态
* @param GpioX:GPIO组 GpioPinX:GPIO引脚
* @retval GPIO状态
* @note void
* @example void
*/
uint8_t GpioGetSts(GPIO_TypeDef *GpioX, uint16_t GpioPinX)
{
return (uint8_t)GPIO_ReadInputDataBit(GpioX, GpioPinX);
}