61 lines
1.8 KiB
C
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__
|