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