From c6a1e7c00cd2946cef7716b205026a907136778b Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Sun, 12 Jul 2026 18:41:28 +0800
Subject: [PATCH] Add ex1.servo-sg90
---
ex1.servo-sg90/Board/miscdev.h | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 169 insertions(+), 0 deletions(-)
diff --git a/ex1.servo-sg90/Board/miscdev.h b/ex1.servo-sg90/Board/miscdev.h
new file mode 100644
index 0000000..6ecb62b
--- /dev/null
+++ b/ex1.servo-sg90/Board/miscdev.h
@@ -0,0 +1,169 @@
+/**********************************************************************
+* Copyright: (C)2024 LingYun IoT System Studio
+* Author: GuoWenxue<guowenxue@gmail.com>
+* 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 <stdio.h>
+
+#include "stm32l4xx_hal.h"
+#include "usart.h"
+#include "buzzer.h"
+
+/* 定义ON/OFF两个宏,这样在代码中使用比 1/0 更具有可读性 */
+#define OFF 0
+#define ON 1
+
+/*
+ *+----------------------+
+ *| STM32 GPIO API |
+ *+----------------------+
+ */
+
+
+/* 定义一个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;
+
+extern void gpio_clk_enable(GPIO_TypeDef *port);
+
+/*
+ *+----------------------+
+ *| 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<<Key1)
+#define KEY2_PRESSED (1<<Key2)
+#define KEY3_PRESSED (1<<Key3)
+
+/* 全局按键状态位图,每一位代表当前按键是否处于"已按下"状态,由中断逻辑置位 */
+extern int g_keys_status;
+
+/* 判断指定按键当前是否处于按下状态 */
+#define key_pressed(key) (g_keys_status & (1<<key) )
+
+/* 清除指定按键的按下标志 */
+#define key_clear(key) (g_keys_status &= ~(1<<key) )
+
+/*
+ *+----------------------------+
+ *| ADC noisy & lux sensor API |
+ *+----------------------------+
+ */
+
+ /**
+ * @brief 采集光照度与噪声值
+ * @param lux: 输出参数,采集到的光照度值
+ * @param noisy: 输出参数,采集到的噪声值
+ * @return 0表示成功,-1 表示失败
+ */
+extern int adc_sample_lux_noisy(uint32_t *lux, uint32_t *noisy);
+
+/*
+ *+----------------------------+
+ *| Timer delay API |
+ *+----------------------------+
+ */
+
+/**
+ * @brief 微秒级延时,最大支持 60000us,更长延时可以使用 HAL_Delay()
+ * @param us: 延时时长(微秒)
+ */
+extern void udelay(uint16_t us);
+
+/**
+ * @brief 毫秒秒级延时,直接使用 HAL_Delay(),方便代码可读性
+ * @param ms: 延时时长(毫秒)
+ */
+#define mdelay(ms) HAL_Delay(ms)
+
+#endif /* __MISCDEV_H */
--
Gitblit v1.10.0