From 7dc2985c99db42f170d93ba6d013c4dd4e429eeb Mon Sep 17 00:00:00 2001
From: Wenxue <wenxue.guo@avnet.com>
Date: Tue, 02 Sep 2025 09:35:50 +0800
Subject: [PATCH] 按键中断程序

---
 Core/Src/board/miscdev.c      |   23 +++++++++++
 Core/Inc/stm32l4xx_hal_conf.h |    2 
 Core/Inc/stm32l4xx_it.h       |    1 
 ISKBoard.ioc                  |   38 ++++++++++++++++---
 Core/Src/main.c               |   15 -------
 Core/Inc/main.h               |    9 ++++
 Core/Src/stm32l4xx_it.c       |   16 ++++++++
 Core/Src/gpio.c               |   10 +++++
 8 files changed, 93 insertions(+), 21 deletions(-)

diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index ba4d6eb..8de24bd 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -57,6 +57,15 @@
 /* USER CODE END EFP */
 
 /* Private defines -----------------------------------------------------------*/
+#define Key1_Pin GPIO_PIN_12
+#define Key1_GPIO_Port GPIOB
+#define Key1_EXTI_IRQn EXTI15_10_IRQn
+#define Key2_Pin GPIO_PIN_13
+#define Key2_GPIO_Port GPIOB
+#define Key2_EXTI_IRQn EXTI15_10_IRQn
+#define Key3_Pin GPIO_PIN_14
+#define Key3_GPIO_Port GPIOB
+#define Key3_EXTI_IRQn EXTI15_10_IRQn
 
 /* USER CODE BEGIN Private defines */
 
diff --git a/Core/Inc/stm32l4xx_hal_conf.h b/Core/Inc/stm32l4xx_hal_conf.h
index 4ea51ab..993ce32 100644
--- a/Core/Inc/stm32l4xx_hal_conf.h
+++ b/Core/Inc/stm32l4xx_hal_conf.h
@@ -182,7 +182,7 @@
   */
 
 #define  VDD_VALUE					  3300U /*!< Value of VDD in mv */
-#define  TICK_INT_PRIORITY            15U    /*!< tick interrupt priority */
+#define  TICK_INT_PRIORITY            1U    /*!< tick interrupt priority */
 #define  USE_RTOS                     0U
 #define  PREFETCH_ENABLE              0U
 #define  INSTRUCTION_CACHE_ENABLE     1U
diff --git a/Core/Inc/stm32l4xx_it.h b/Core/Inc/stm32l4xx_it.h
index b9bfcf8..cfba83e 100644
--- a/Core/Inc/stm32l4xx_it.h
+++ b/Core/Inc/stm32l4xx_it.h
@@ -55,6 +55,7 @@
 void DebugMon_Handler(void);
 void PendSV_Handler(void);
 void SysTick_Handler(void);
+void EXTI15_10_IRQHandler(void);
 /* USER CODE BEGIN EFP */
 
 /* USER CODE END EFP */
diff --git a/Core/Src/board/miscdev.c b/Core/Src/board/miscdev.c
index 45a6d8d..b89d071 100644
--- a/Core/Src/board/miscdev.c
+++ b/Core/Src/board/miscdev.c
@@ -130,3 +130,26 @@
 
     return leds[which].status;
 }
+
+/*
+ *+----------------------+
+ *|     GPIO Key API     |
+ *+----------------------+
+ */
+#include "main.h" /* Key1_pin, Key2_Pin, Key3_Pin 定义在该头文件下 */
+void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
+{
+    if( Key1_Pin == GPIO_Pin )
+    {
+        blink_led( Led_R, 500 );
+    }
+    else if( Key2_Pin == GPIO_Pin )
+    {
+        blink_led( Led_G, 500 );
+    }
+    else if( Key3_Pin == GPIO_Pin )
+    {
+        blink_led( Led_B, 500 );
+    }
+}
+
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index dc2e38e..b2c26ba 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -66,6 +66,12 @@
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
+  /*Configure GPIO pins : Key1_Pin Key2_Pin Key3_Pin */
+  GPIO_InitStruct.Pin = Key1_Pin|Key2_Pin|Key3_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
   /*Configure GPIO pins : PC6 PC9 */
   GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_9;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
@@ -80,6 +86,10 @@
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
 
+  /* EXTI interrupt init*/
+  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 0);
+  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
+
 }
 
 /* USER CODE BEGIN 2 */
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 281d186..3ff56cf 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -99,20 +99,7 @@
   /* USER CODE BEGIN WHILE */
   while (1)
   {
-	  /* Blink Red Led */
-	  turn_led(Led_R, ON);
-	  HAL_Delay(200);
-	  turn_led(Led_R, OFF);
-	  HAL_Delay(200);
-
-	  /* Blink Green Led */
-	  toggle_led(Led_G);
-	  HAL_Delay(200);
-	  toggle_led(Led_G);
-	  HAL_Delay(200);
-
-	  /* Blink Blue Led */
-	  blink_led(Led_B, 200);
+	  HAL_Delay(5000);
 
     /* USER CODE END WHILE */
 
diff --git a/Core/Src/stm32l4xx_it.c b/Core/Src/stm32l4xx_it.c
index e5f6b96..d34011e 100644
--- a/Core/Src/stm32l4xx_it.c
+++ b/Core/Src/stm32l4xx_it.c
@@ -198,6 +198,22 @@
 /* please refer to the startup file (startup_stm32l4xx.s).                    */
 /******************************************************************************/
 
+/**
+  * @brief This function handles EXTI line[15:10] interrupts.
+  */
+void EXTI15_10_IRQHandler(void)
+{
+  /* USER CODE BEGIN EXTI15_10_IRQn 0 */
+
+  /* USER CODE END EXTI15_10_IRQn 0 */
+  HAL_GPIO_EXTI_IRQHandler(Key1_Pin);
+  HAL_GPIO_EXTI_IRQHandler(Key2_Pin);
+  HAL_GPIO_EXTI_IRQHandler(Key3_Pin);
+  /* USER CODE BEGIN EXTI15_10_IRQn 1 */
+
+  /* USER CODE END EXTI15_10_IRQn 1 */
+}
+
 /* USER CODE BEGIN 1 */
 
 /* USER CODE END 1 */
diff --git a/ISKBoard.ioc b/ISKBoard.ioc
index 2a3dff0..4bd2eb1 100644
--- a/ISKBoard.ioc
+++ b/ISKBoard.ioc
@@ -3,6 +3,7 @@
 CAD.pinconfig=
 CAD.provider=
 File.Version=6
+GPIO.groupedBy=Group By Peripherals
 KeepUserPlacement=false
 Mcu.CPN=STM32L431RCT6
 Mcu.Family=STM32L4
@@ -15,11 +16,14 @@
 Mcu.Pin0=PH0-OSC_IN (PH0)
 Mcu.Pin1=PH1-OSC_OUT (PH1)
 Mcu.Pin2=PB2
-Mcu.Pin3=PC6
-Mcu.Pin4=PC9
-Mcu.Pin5=PD2
-Mcu.Pin6=VP_SYS_VS_Systick
-Mcu.PinsNb=7
+Mcu.Pin3=PB12
+Mcu.Pin4=PB13
+Mcu.Pin5=PB14
+Mcu.Pin6=PC6
+Mcu.Pin7=PC9
+Mcu.Pin8=PD2
+Mcu.Pin9=VP_SYS_VS_Systick
+Mcu.PinsNb=10
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32L431RCTx
@@ -27,6 +31,7 @@
 MxDb.Version=DB.6.0.150
 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.EXTI15_10_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true
 NVIC.ForceEnableDMAVector=true
 NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
@@ -34,8 +39,23 @@
 NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
-NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
+NVIC.SysTick_IRQn=true\:1\:0\:true\:false\:true\:false\:true\:false
 NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PB12.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI
+PB12.GPIO_Label=Key1
+PB12.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING
+PB12.Locked=true
+PB12.Signal=GPXTI12
+PB13.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI
+PB13.GPIO_Label=Key2
+PB13.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING
+PB13.Locked=true
+PB13.Signal=GPXTI13
+PB14.GPIOParameters=GPIO_Label,GPIO_ModeDefaultEXTI
+PB14.GPIO_Label=Key3
+PB14.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_FALLING
+PB14.Locked=true
+PB14.Signal=GPXTI14
 PB2.GPIOParameters=PinState
 PB2.Locked=true
 PB2.PinState=GPIO_PIN_SET
@@ -133,6 +153,12 @@
 RCC.VCOInputFreq_Value=8000000
 RCC.VCOOutputFreq_Value=160000000
 RCC.VCOSAI1OutputFreq_Value=64000000
+SH.GPXTI12.0=GPIO_EXTI12
+SH.GPXTI12.ConfNb=1
+SH.GPXTI13.0=GPIO_EXTI13
+SH.GPXTI13.ConfNb=1
+SH.GPXTI14.0=GPIO_EXTI14
+SH.GPXTI14.ConfNb=1
 VP_SYS_VS_Systick.Mode=SysTick
 VP_SYS_VS_Systick.Signal=SYS_VS_Systick
 board=custom

--
Gitblit v1.9.1