This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/system/bsp/gpios.h

61 lines
1.8 KiB
C

/***
* @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__