/************************************************************************************************/ /** * @file ciu32f003_std_gpio.c * @author MCU Ecosystem Development Team * @brief GPIO STD库驱动。 * 实现GPIO初始化、去初始化等API。 * * ************************************************************************************************** * @attention * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved. * ************************************************************************************************** */ /************************************************************************************************/ /** * @addtogroup CIU32F003_STD_Driver * @{ */ /** * @addtogroup GPIO * @{ * */ /************************************************************************************************/ /*------------------------------------------includes--------------------------------------------*/ #include "ciu32f003_std.h" #ifdef STD_GPIO_PERIPHERAL_USED /*-------------------------------------------functions------------------------------------------*/ /************************************************************************************************/ /** * @addtogroup GPIO_External_Functions * @{ * */ /************************************************************************************************/ /** * @brief GPIO初始化 * @param gpiox GPIO外设 * @arg GPIOA * @arg GPIOB * @arg GPIOC * @param gpio_init_param GPIO初始化参数结构体 * @retval 无 */ void std_gpio_init(GPIO_t* gpiox, std_gpio_init_t* gpio_init_param) { uint32_t offset = 0; uint32_t current_pin = 0; /* 遍历配置GPIO引脚 */ for (; ((gpio_init_param->pin) >> offset) != 0x00U; offset++) { /* 获取当前所遍历引脚 */ current_pin = (gpio_init_param->pin) & (0x00000001UL << offset); if (current_pin != 0x00U) { /* 配置模式 */ std_gpio_set_pin_mode(gpiox, current_pin, gpio_init_param->mode); /* 配置上下拉 */ std_gpio_set_pin_pull(gpiox, current_pin, gpio_init_param->pull); if (gpio_init_param->mode == GPIO_MODE_ALTERNATE) { /* 设置GPIO引脚(0~7)复用功能 */ std_gpio_set_afpin_0_7 (gpiox, current_pin, gpio_init_param->alternate); } } } if ((gpio_init_param->mode == GPIO_MODE_OUTPUT) || (gpio_init_param->mode == GPIO_MODE_ALTERNATE)) { /* 配置输出类型 */ std_gpio_set_pin_output_type(gpiox, gpio_init_param->pin, gpio_init_param->output_type); } } /** * @brief GPIO去初始化 * @param gpiox GPIO外设 * @arg GPIOA * @arg GPIOB * @arg GPIOC * @retval 无 */ void std_gpio_deinit(GPIO_t* gpiox) { if(GPIOA == gpiox) { std_rcc_gpio_reset(RCC_PERIPH_RESET_GPIOA); } else if(GPIOB == gpiox) { std_rcc_gpio_reset(RCC_PERIPH_RESET_GPIOB); } else if(GPIOC == gpiox) { std_rcc_gpio_reset(RCC_PERIPH_RESET_GPIOC); } } /** * @brief GPIO初始化结构体初始化 * @param gpio_init_struct GPIO初始化参数结构体 * @retval 无 */ void std_gpio_struct_init(std_gpio_init_t* gpio_init_struct) { gpio_init_struct->pin = GPIO_PIN_0; gpio_init_struct->mode = GPIO_MODE_ANALOG; gpio_init_struct->pull = GPIO_NOPULL; gpio_init_struct->output_type = GPIO_OUTPUT_PUSHPULL; gpio_init_struct->alternate = 0U; } /** * @} */ #endif /* STD_GPIO_PERIPHERAL_USED */ /** * @} */ /** * @} */