#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); }