/*** * @Author: * @Date: 2023-07-27 14:40:06 * @LastEditors: xxx * @LastEditTime: 2023-07-27 15:32:25 * @Description: LL库的GPIO操作 * @email: * @Copyright (c) 2023 by xxx, All Rights Reserved. */ #ifndef __GPIOS_H__ #define __GPIOS_H__ #include "lib.h" #include "main.h" // gpio拉高 #define GPIO_SET(port, pin) (LL_GPIO_SetOutputPin(port, pin)) // gpio拉低 #define GPIO_RESET(port, pin) (LL_GPIO_ResetOutputPin(port, pin)) // gpio翻转 #define GPIO_TOGGLE(port, pin) (LL_GPIO_TogglePin(port, pin)) // gpio读取 #define GPIO_READ(port, pin) (LL_GPIO_IsInputPinSet(port, pin)) // gpio设置输入 #define GPIO_SET_INPUT(port, pin) (LL_GPIO_SetPinMode(port, pin, LL_GPIO_MODE_INPUT)) // gpio设置输出 #define GPIO_SET_OUTPUT(port, pin) \ do \ { \ LL_GPIO_SetPinMode(port, pin, LL_GPIO_MODE_OUTPUT); \ } while (0) // gpio设置复用 #define GPIO_SET_ALTERNATE(port, pin) (LL_GPIO_SetPinMode(port, pin, LL_GPIO_MODE_ALTERNATE)) // gpio设置模拟 #define GPIO_SET_ANALOG(port, pin) \ do \ { \ LL_GPIO_SetPinMode(port, pin, LL_GPIO_MODE_ANALOG); \ } while (0) typedef struct GPIO { GPIO_TypeDef *port; // 端口 uint16_t pin; // 引脚 // gpio拉高 void (*set)(struct GPIO gpio); // gpio拉低 void (*reset)(struct GPIO gpio); // gpio翻转 void (*toggle)(struct GPIO gpio); // gpio读取 uint8_t (*read)(struct GPIO gpio); } gpio_t; extern gpio_t *gpio_create(GPIO_TypeDef *port, uint16_t pin); // 创建gpio extern void gpio_free(gpio_t *gpio); // 释放gpio #endif // __GPIOS_H__