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.buzzer-music/Board/miscdev.c | 47 ++++++++++++++++++++++++++++++++++++++---------
1 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/ex1.buzzer-music/Board/miscdev.c b/ex1.buzzer-music/Board/miscdev.c
index e2d294d..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 |
*+----------------------+
*/
@@ -79,7 +106,7 @@
if( which >= LedMax )
return ;
- level = status==OFF ? GPIO_PIN_SET : GPIO_PIN_RESET;
+ level = status==ON ? leds[which].active : !leds[which].active;
HAL_GPIO_WritePin(leds[which].group, leds[which].pin, level);
}
@@ -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);
}
/**
@@ -174,13 +201,15 @@
*+----------------------+
*/
-/* gcc 编译器中的 printf 函数将会调用 __io_putchar() 函数,实现最终的字符打印
- * keil编译器中的 printf 函数将会调用 fputc() 函数,实现最终的字符打印
- * 这里我们定义一个宏 PUTCHAR_PROTOTYPE 来兼容这两个编译器所需要的函数原型;
+/* gcc 编译器的 printf 将会调用 __io_putchar() 函数,实现最终的字符打印
+ * keil编译器的 printf 将会调用 fputc() 函数,实现最终的字符打印
+ * 这里我们定义一个宏 PUTCHAR_PROTOTYPE 来兼容两个编译器所需要的函数原型
+ *
+ * 注意:
+ * 1. Keil5 工程需要勾选:Options for Target -> Target -> Use MicroLIB
+ * 2. Keil5 的编译器 armclang(AC6) 会定义 __GNUC__ 宏,而旧版 armcc(AC5) 则不会
*/
-#if defined(__ARMCC_VERSION) /* MDK ARM Compiler */
-FILE __stdout;
-FILE __stdin;
+#if defined(__ARMCC_VERSION) /* */
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#elif defined(__GNUC__) /* GCC */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
--
Gitblit v1.10.0