From 6c1a5eb1a9891898552bb9320ba973349ca4bffa Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Wed, 08 Jul 2026 20:51:59 +0800
Subject: [PATCH] Update mdelay and gpio function

---
 ex1.ws2812b/Board/ws2812b.c      |    2 
 ex1.ws2812b/Board/buzzer.c       |   11 +-
 ex1.buzzer-music/Board/miscdev.h |   15 +++
 ex1.ws2812b/Core/Src/main.c      |    2 
 ex1.auto-light/Board/miscdev.h   |   15 +++
 ex1.auto-light/Board/miscdev.c   |   31 +++++++
 ex1.auto-light/Core/Src/main.c   |    6 
 ex1.buzzer-music/Board/buzzer.c  |   11 +-
 ex1.auto-light/Board/buzzer.c    |   11 +-
 ex1.ws2812b/Board/miscdev.h      |   15 +++
 ex1.buzzer-music/Board/miscdev.c |   31 +++++++
 ex1.ws2812b/Board/miscdev.c      |   31 +++++++
 ex1.auto-light/ISKBoard.ioc      |    2 
 13 files changed, 155 insertions(+), 28 deletions(-)

diff --git a/ex1.auto-light/Board/buzzer.c b/ex1.auto-light/Board/buzzer.c
index 8148b70..f39e80c 100644
--- a/ex1.auto-light/Board/buzzer.c
+++ b/ex1.auto-light/Board/buzzer.c
@@ -11,6 +11,7 @@
 #include "tim.h"
 #include "buzzer.h"
 
+#define mdelay(ms)            HAL_Delay(ms)
 #define ARRAY_SIZE(song)      (sizeof(song)/sizeof(song[0]))
 
 /* 音符频率定义(Hz) */
@@ -147,12 +148,12 @@
         /* Start buzzer */
         HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
 
-        HAL_Delay(interval);
+        mdelay(interval);
 
         /* Stop buzzer */
         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
 
-        HAL_Delay(interval);
+        mdelay(interval);
     }
 }
 
@@ -164,18 +165,18 @@
     if (freq == 0)
     {
         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
-        HAL_Delay(duration_ms);
+        mdelay(duration_ms);
         return;
     }
 
     Buzzer_SetFreq(freq);
 
     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
-    HAL_Delay(duration_ms - 30);
+    mdelay(duration_ms - 30);
 
     HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
 
-    HAL_Delay(30);
+    mdelay(30);
 }
 
 /**
diff --git a/ex1.auto-light/Board/miscdev.c b/ex1.auto-light/Board/miscdev.c
index e2cf754..986afbc 100644
--- a/ex1.auto-light/Board/miscdev.c
+++ b/ex1.auto-light/Board/miscdev.c
@@ -12,6 +12,33 @@
 
 /*
  *+----------------------+
+ *|    STM32 GPIO API    |
+ *+----------------------+
+ */
+
+void gpio_clk_enable(GPIO_TypeDef *port)
+{
+    if      (port == GPIOA) __HAL_RCC_GPIOA_CLK_ENABLE();
+    else if (port == GPIOB) __HAL_RCC_GPIOB_CLK_ENABLE();
+    else if (port == GPIOC) __HAL_RCC_GPIOC_CLK_ENABLE();
+    else if (port == GPIOD) __HAL_RCC_GPIOD_CLK_ENABLE();
+#ifdef GPIOE
+    else if (port == GPIOE) __HAL_RCC_GPIOE_CLK_ENABLE();
+#endif
+#ifdef GPIOF
+    else if (port == GPIOF) __HAL_RCC_GPIOF_CLK_ENABLE();
+#endif
+#ifdef GPIOG
+    else if (port == GPIOG) __HAL_RCC_GPIOG_CLK_ENABLE();
+#endif
+#ifdef GPIOH
+    else if (port == GPIOH) __HAL_RCC_GPIOH_CLK_ENABLE();
+#endif
+}
+
+
+/*
+ *+----------------------+
  *|  GPIO Led/Relay API  |
  *+----------------------+
  */
@@ -103,10 +130,10 @@
 void blink_led(int which, uint32_t interval)
 {
     turn_led(which, ON);
-    HAL_Delay(interval);
+    mdelay(interval);
 
     turn_led(which, OFF);
-    HAL_Delay(interval);
+    mdelay(interval);
 }
 
 /**
diff --git a/ex1.auto-light/Board/miscdev.h b/ex1.auto-light/Board/miscdev.h
index 58fcfe0..6ecb62b 100644
--- a/ex1.auto-light/Board/miscdev.h
+++ b/ex1.auto-light/Board/miscdev.h
@@ -21,6 +21,13 @@
 #define OFF    0
 #define ON     1
 
+/*
+ *+----------------------+
+ *|    STM32 GPIO API    |
+ *+----------------------+
+ */
+
+
 /* 定义一个gpio的结构体,用来描述这个引脚的相关信息 */
 typedef struct gpio_s
 {
@@ -30,6 +37,8 @@
     int                 active; /* 1 for active high, 0 for active low */
 } gpio_t;
 
+extern void gpio_clk_enable(GPIO_TypeDef *port);
+
 /*
  *+----------------------+
  *|    GPIO Relay API    |
@@ -151,4 +160,10 @@
  */
 extern void udelay(uint16_t us);
 
+/**
+ * @brief  毫秒秒级延时,直接使用 HAL_Delay(),方便代码可读性
+ * @param  ms: 延时时长(毫秒)
+ */
+#define mdelay(ms)  HAL_Delay(ms)
+
 #endif /* __MISCDEV_H */
diff --git a/ex1.auto-light/Core/Src/main.c b/ex1.auto-light/Core/Src/main.c
index 94561e1..7033d37 100644
--- a/ex1.auto-light/Core/Src/main.c
+++ b/ex1.auto-light/Core/Src/main.c
@@ -116,16 +116,16 @@
           turn_led(Led_R, ON);
 
           /* 延时一会(等人过去)再关闭灯泡 */
-          HAL_Delay(5000);
+          mdelay(5000);
           printf("turn light off now\r\n");
           turn_relay(OFF);
           turn_led(Led_R, OFF);
 
           /* 继电器关的时候有声音,等一会再开始采样 */
-          HAL_Delay(1000);
+          mdelay(1000);
       }
 
-      HAL_Delay(10);
+      mdelay(10);
 
     /* USER CODE END WHILE */
 
diff --git a/ex1.auto-light/ISKBoard.ioc b/ex1.auto-light/ISKBoard.ioc
index b24edba..8170d31 100644
--- a/ex1.auto-light/ISKBoard.ioc
+++ b/ex1.auto-light/ISKBoard.ioc
@@ -133,7 +133,7 @@
 ProjectManager.UAScriptAfterPath=
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true,6-MX_TIM1_Init-TIM1-false-HAL-true
 RCC.ADCFreq_Value=32000000
 RCC.AHBFreq_Value=80000000
 RCC.APB1Freq_Value=80000000
diff --git a/ex1.buzzer-music/Board/buzzer.c b/ex1.buzzer-music/Board/buzzer.c
index 8148b70..f39e80c 100644
--- a/ex1.buzzer-music/Board/buzzer.c
+++ b/ex1.buzzer-music/Board/buzzer.c
@@ -11,6 +11,7 @@
 #include "tim.h"
 #include "buzzer.h"
 
+#define mdelay(ms)            HAL_Delay(ms)
 #define ARRAY_SIZE(song)      (sizeof(song)/sizeof(song[0]))
 
 /* 音符频率定义(Hz) */
@@ -147,12 +148,12 @@
         /* Start buzzer */
         HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
 
-        HAL_Delay(interval);
+        mdelay(interval);
 
         /* Stop buzzer */
         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
 
-        HAL_Delay(interval);
+        mdelay(interval);
     }
 }
 
@@ -164,18 +165,18 @@
     if (freq == 0)
     {
         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
-        HAL_Delay(duration_ms);
+        mdelay(duration_ms);
         return;
     }
 
     Buzzer_SetFreq(freq);
 
     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
-    HAL_Delay(duration_ms - 30);
+    mdelay(duration_ms - 30);
 
     HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
 
-    HAL_Delay(30);
+    mdelay(30);
 }
 
 /**
diff --git a/ex1.buzzer-music/Board/miscdev.c b/ex1.buzzer-music/Board/miscdev.c
index e2cf754..986afbc 100644
--- a/ex1.buzzer-music/Board/miscdev.c
+++ b/ex1.buzzer-music/Board/miscdev.c
@@ -12,6 +12,33 @@
 
 /*
  *+----------------------+
+ *|    STM32 GPIO API    |
+ *+----------------------+
+ */
+
+void gpio_clk_enable(GPIO_TypeDef *port)
+{
+    if      (port == GPIOA) __HAL_RCC_GPIOA_CLK_ENABLE();
+    else if (port == GPIOB) __HAL_RCC_GPIOB_CLK_ENABLE();
+    else if (port == GPIOC) __HAL_RCC_GPIOC_CLK_ENABLE();
+    else if (port == GPIOD) __HAL_RCC_GPIOD_CLK_ENABLE();
+#ifdef GPIOE
+    else if (port == GPIOE) __HAL_RCC_GPIOE_CLK_ENABLE();
+#endif
+#ifdef GPIOF
+    else if (port == GPIOF) __HAL_RCC_GPIOF_CLK_ENABLE();
+#endif
+#ifdef GPIOG
+    else if (port == GPIOG) __HAL_RCC_GPIOG_CLK_ENABLE();
+#endif
+#ifdef GPIOH
+    else if (port == GPIOH) __HAL_RCC_GPIOH_CLK_ENABLE();
+#endif
+}
+
+
+/*
+ *+----------------------+
  *|  GPIO Led/Relay API  |
  *+----------------------+
  */
@@ -103,10 +130,10 @@
 void blink_led(int which, uint32_t interval)
 {
     turn_led(which, ON);
-    HAL_Delay(interval);
+    mdelay(interval);
 
     turn_led(which, OFF);
-    HAL_Delay(interval);
+    mdelay(interval);
 }
 
 /**
diff --git a/ex1.buzzer-music/Board/miscdev.h b/ex1.buzzer-music/Board/miscdev.h
index 58fcfe0..6ecb62b 100644
--- a/ex1.buzzer-music/Board/miscdev.h
+++ b/ex1.buzzer-music/Board/miscdev.h
@@ -21,6 +21,13 @@
 #define OFF    0
 #define ON     1
 
+/*
+ *+----------------------+
+ *|    STM32 GPIO API    |
+ *+----------------------+
+ */
+
+
 /* 定义一个gpio的结构体,用来描述这个引脚的相关信息 */
 typedef struct gpio_s
 {
@@ -30,6 +37,8 @@
     int                 active; /* 1 for active high, 0 for active low */
 } gpio_t;
 
+extern void gpio_clk_enable(GPIO_TypeDef *port);
+
 /*
  *+----------------------+
  *|    GPIO Relay API    |
@@ -151,4 +160,10 @@
  */
 extern void udelay(uint16_t us);
 
+/**
+ * @brief  毫秒秒级延时,直接使用 HAL_Delay(),方便代码可读性
+ * @param  ms: 延时时长(毫秒)
+ */
+#define mdelay(ms)  HAL_Delay(ms)
+
 #endif /* __MISCDEV_H */
diff --git a/ex1.ws2812b/Board/buzzer.c b/ex1.ws2812b/Board/buzzer.c
index 8148b70..f39e80c 100644
--- a/ex1.ws2812b/Board/buzzer.c
+++ b/ex1.ws2812b/Board/buzzer.c
@@ -11,6 +11,7 @@
 #include "tim.h"
 #include "buzzer.h"
 
+#define mdelay(ms)            HAL_Delay(ms)
 #define ARRAY_SIZE(song)      (sizeof(song)/sizeof(song[0]))
 
 /* 音符频率定义(Hz) */
@@ -147,12 +148,12 @@
         /* Start buzzer */
         HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
 
-        HAL_Delay(interval);
+        mdelay(interval);
 
         /* Stop buzzer */
         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
 
-        HAL_Delay(interval);
+        mdelay(interval);
     }
 }
 
@@ -164,18 +165,18 @@
     if (freq == 0)
     {
         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
-        HAL_Delay(duration_ms);
+        mdelay(duration_ms);
         return;
     }
 
     Buzzer_SetFreq(freq);
 
     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);
-    HAL_Delay(duration_ms - 30);
+    mdelay(duration_ms - 30);
 
     HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_4);
 
-    HAL_Delay(30);
+    mdelay(30);
 }
 
 /**
diff --git a/ex1.ws2812b/Board/miscdev.c b/ex1.ws2812b/Board/miscdev.c
index e2cf754..986afbc 100644
--- a/ex1.ws2812b/Board/miscdev.c
+++ b/ex1.ws2812b/Board/miscdev.c
@@ -12,6 +12,33 @@
 
 /*
  *+----------------------+
+ *|    STM32 GPIO API    |
+ *+----------------------+
+ */
+
+void gpio_clk_enable(GPIO_TypeDef *port)
+{
+    if      (port == GPIOA) __HAL_RCC_GPIOA_CLK_ENABLE();
+    else if (port == GPIOB) __HAL_RCC_GPIOB_CLK_ENABLE();
+    else if (port == GPIOC) __HAL_RCC_GPIOC_CLK_ENABLE();
+    else if (port == GPIOD) __HAL_RCC_GPIOD_CLK_ENABLE();
+#ifdef GPIOE
+    else if (port == GPIOE) __HAL_RCC_GPIOE_CLK_ENABLE();
+#endif
+#ifdef GPIOF
+    else if (port == GPIOF) __HAL_RCC_GPIOF_CLK_ENABLE();
+#endif
+#ifdef GPIOG
+    else if (port == GPIOG) __HAL_RCC_GPIOG_CLK_ENABLE();
+#endif
+#ifdef GPIOH
+    else if (port == GPIOH) __HAL_RCC_GPIOH_CLK_ENABLE();
+#endif
+}
+
+
+/*
+ *+----------------------+
  *|  GPIO Led/Relay API  |
  *+----------------------+
  */
@@ -103,10 +130,10 @@
 void blink_led(int which, uint32_t interval)
 {
     turn_led(which, ON);
-    HAL_Delay(interval);
+    mdelay(interval);
 
     turn_led(which, OFF);
-    HAL_Delay(interval);
+    mdelay(interval);
 }
 
 /**
diff --git a/ex1.ws2812b/Board/miscdev.h b/ex1.ws2812b/Board/miscdev.h
index 58fcfe0..6ecb62b 100644
--- a/ex1.ws2812b/Board/miscdev.h
+++ b/ex1.ws2812b/Board/miscdev.h
@@ -21,6 +21,13 @@
 #define OFF    0
 #define ON     1
 
+/*
+ *+----------------------+
+ *|    STM32 GPIO API    |
+ *+----------------------+
+ */
+
+
 /* 定义一个gpio的结构体,用来描述这个引脚的相关信息 */
 typedef struct gpio_s
 {
@@ -30,6 +37,8 @@
     int                 active; /* 1 for active high, 0 for active low */
 } gpio_t;
 
+extern void gpio_clk_enable(GPIO_TypeDef *port);
+
 /*
  *+----------------------+
  *|    GPIO Relay API    |
@@ -151,4 +160,10 @@
  */
 extern void udelay(uint16_t us);
 
+/**
+ * @brief  毫秒秒级延时,直接使用 HAL_Delay(),方便代码可读性
+ * @param  ms: 延时时长(毫秒)
+ */
+#define mdelay(ms)  HAL_Delay(ms)
+
 #endif /* __MISCDEV_H */
diff --git a/ex1.ws2812b/Board/ws2812b.c b/ex1.ws2812b/Board/ws2812b.c
index 07b8342..ad46534 100644
--- a/ex1.ws2812b/Board/ws2812b.c
+++ b/ex1.ws2812b/Board/ws2812b.c
@@ -23,8 +23,6 @@
 #include "ws2812b.h"
 #include "miscdev.h"
 
-#define mdelay(ms) HAL_Delay(ms)
-
 static color_t g_ColorPanel[WS2812_NUM];
 
 typedef struct ws_gpio_s
diff --git a/ex1.ws2812b/Core/Src/main.c b/ex1.ws2812b/Core/Src/main.c
index a05b64f..50555cd 100644
--- a/ex1.ws2812b/Core/Src/main.c
+++ b/ex1.ws2812b/Core/Src/main.c
@@ -107,7 +107,7 @@
   while (1)
   {
     ws2812b_blink();
-    HAL_Delay(10);
+    mdelay(10);
 
     /* USER CODE END WHILE */
 

--
Gitblit v1.10.0