/********************************************************************** * Copyright: (C)2024 LingYun IoT System Studio * Author: GuoWenxue * Description: ISKBoard Hardware Abstract Layer driver * * ChangeLog: * Version Date Author Description * V1.0.0 2024.08.29 GuoWenxue Release initial version ***********************************************************************/ #ifndef __MISCDEV_H #define __MISCDEV_H #include #include "stm32l4xx_hal.h" #include "usart.h" #include "buzzer.h" /* 定义ON/OFF两个宏,这样在代码中使用比 1/0 更具有可读性 */ #define OFF 0 #define ON 1 /* 定义一个gpio的结构体,用来描述这个引脚的相关信息 */ typedef struct gpio_s { const char *name; GPIO_TypeDef *group; uint16_t pin; int active; /* 1 for active high, 0 for active low */ } gpio_t; /* *+----------------------+ *| GPIO Relay API | *+----------------------+ */ /** * @brief 继电器初始化:配置继电器控制引脚对应的GPIO */ extern void init_relay(void); /** * @brief 控制继电器的开关状态 * @param status: ON 或 OFF */ extern void turn_relay(int status); /* *+----------------------+ *| GPIO Led API | *+----------------------+ */ /* 定义了一个枚举,分别表示RGB三个灯的索引: * 枚举的第1个成员,如果没赋值则其值为0,后面的成员值永远是前面成员的值加1. */ typedef enum { Led_R, /* 其值为0 */ Led_G, /* 其值为1 */ Led_B, /* 其值为2 */ LedMax,/* 其值为3,刚好是Led的总数 */ } lednum_t; /** * @brief LED初始化:配置各LED对应的GPIO状态。 */ extern void init_led(void); /** * @brief 控制指定LED的开关状态 * @param which: LED编号(参考 lednum_t,如 Led_R/Led_G/Led_B) * @param status: ON 或 OFF */ extern void turn_led(int which, int status); /** * @brief 翻转指定LED当前状态(亮变灭,灭变亮) * @param which: LED编号(参考 lednum_t) */ extern void toggle_led(int which); /** * @brief 阻塞式闪烁指定LED一次(亮interval毫秒,灭interval毫秒) * @param which: LED编号(参考 lednum_t) * @param interval: 亮灭各自持续时间(ms) */ extern void blink_led(int which, uint32_t interval); /** * @brief 绿灯"滴-答"双闪心跳灯:模拟真实心跳节奏(两次快闪 + 一段停顿). */ extern void heartbeat_led(void); /* *+----------------------+ *| GPIO Led API | *+----------------------+ */ /* 定义了一个枚举,分别表示RGB三个灯的索引: * 枚举的第1个成员,如果没赋值则其值为0,后面的成员值永远是前面成员的值加1. */ typedef enum { Key1, /* 其值为0 */ Key2, /* 其值为1 */ Key3, /* 其值为2 */ KeyMax,/* 其值为3,刚好是Key的总数 */ } keynum_t; /* 按键状态位掩码:对应 g_keys_status 中的第 Key1/Key2/Key3 位被按下 */ #define KEY1_PRESSED (1<