From e96cff0d10ec2211a3e22148e6284d03fb7f881d Mon Sep 17 00:00:00 2001 From: Zychlix Date: Tue, 31 Mar 2026 14:50:44 +0200 Subject: [PATCH] Edge trigger works --- .idea/jakub.iml | 2 +- Core/Inc/main.h | 3 +++ Core/Inc/stm32g4xx_it.h | 1 + Core/Src/main.c | 43 +++++++++++++++++++++++++++++++++++++---- Core/Src/stm32g4xx_it.c | 14 ++++++++++++++ jakub.ioc | 24 ++++++++++++++++------- 6 files changed, 75 insertions(+), 12 deletions(-) diff --git a/.idea/jakub.iml b/.idea/jakub.iml index 4c94235..f08604b 100644 --- a/.idea/jakub.iml +++ b/.idea/jakub.iml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/Core/Inc/main.h b/Core/Inc/main.h index a3e264c..ae4578c 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -57,6 +57,9 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ +#define PIN_Pin GPIO_PIN_1 +#define PIN_GPIO_Port GPIOA +#define PIN_EXTI_IRQn EXTI1_IRQn /* USER CODE BEGIN Private defines */ diff --git a/Core/Inc/stm32g4xx_it.h b/Core/Inc/stm32g4xx_it.h index 389f3a0..39870db 100644 --- a/Core/Inc/stm32g4xx_it.h +++ b/Core/Inc/stm32g4xx_it.h @@ -55,6 +55,7 @@ void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); +void EXTI1_IRQHandler(void); void USB_LP_IRQHandler(void); void TIM1_UP_TIM16_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/Core/Src/main.c b/Core/Src/main.c index 0795d95..9b6836e 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -66,11 +66,7 @@ int _write(int file, char *ptr, int len) { void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { - uint32_t current_count = EXT_TIMER.Instance->CNT; - uint32_t difference = current_count-last_count; - last_count = current_count; - printf("%d\n", difference); } void USB_CDC_RxHandler(uint8_t* Buf, uint32_t Len) @@ -85,6 +81,34 @@ void USB_CDC_RxHandler(uint8_t* Buf, uint32_t Len) } +uint32_t check_pin_state() +{ + return HAL_GPIO_ReadPin(PIN_GPIO_Port, PIN_Pin); +} + +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + uint32_t current_count = EXT_TIMER.Instance->CNT; + + if (check_pin_state() ) + { +// printf("RISING\n"); + //Reset + last_count = current_count; + + } + else + { +// printf("FALLING\n"); + //Send + uint32_t difference = current_count-last_count; + + + printf("%d\n", difference); + } + +} + void receive_handler(); /* USER CODE END PFP */ @@ -295,6 +319,7 @@ static void MX_TIM2_Init(void) */ static void MX_GPIO_Init(void) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 */ @@ -302,6 +327,16 @@ static void MX_GPIO_Init(void) __HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + /*Configure GPIO pin : PIN_Pin */ + GPIO_InitStruct.Pin = PIN_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; + GPIO_InitStruct.Pull = GPIO_PULLUP; + HAL_GPIO_Init(PIN_GPIO_Port, &GPIO_InitStruct); + + /* EXTI interrupt init*/ + HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(EXTI1_IRQn); + /* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */ } diff --git a/Core/Src/stm32g4xx_it.c b/Core/Src/stm32g4xx_it.c index abf8a51..d11a1c8 100644 --- a/Core/Src/stm32g4xx_it.c +++ b/Core/Src/stm32g4xx_it.c @@ -199,6 +199,20 @@ void SysTick_Handler(void) /* please refer to the startup file (startup_stm32g4xx.s). */ /******************************************************************************/ +/** + * @brief This function handles EXTI line1 interrupt. + */ +void EXTI1_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI1_IRQn 0 */ + + /* USER CODE END EXTI1_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(PIN_Pin); + /* USER CODE BEGIN EXTI1_IRQn 1 */ + + /* USER CODE END EXTI1_IRQn 1 */ +} + /** * @brief This function handles USB low priority interrupt remap. */ diff --git a/jakub.ioc b/jakub.ioc index c7d7b48..eeee826 100644 --- a/jakub.ioc +++ b/jakub.ioc @@ -20,13 +20,14 @@ Mcu.Package=LQFP64 Mcu.Pin0=PF0-OSC_IN Mcu.Pin1=PF1-OSC_OUT Mcu.Pin2=PA0 -Mcu.Pin3=PA11 -Mcu.Pin4=PA12 -Mcu.Pin5=VP_SYS_VS_Systick -Mcu.Pin6=VP_SYS_VS_DBSignals -Mcu.Pin7=VP_TIM1_VS_ClockSourceINT -Mcu.Pin8=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS -Mcu.PinsNb=9 +Mcu.Pin3=PA1 +Mcu.Pin4=PA11 +Mcu.Pin5=PA12 +Mcu.Pin6=VP_SYS_VS_Systick +Mcu.Pin7=VP_SYS_VS_DBSignals +Mcu.Pin8=VP_TIM1_VS_ClockSourceINT +Mcu.Pin9=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS +Mcu.PinsNb=10 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32G474RETx @@ -34,6 +35,7 @@ MxCube.Version=6.9.1 MxDb.Version=DB.6.0.91 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.EXTI1_IRQn=true\:0\:0\:false\: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 @@ -47,6 +49,12 @@ NVIC.USB_LP_IRQn=true\:2\:0\:true\:false\:true\:false\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false PA0.Locked=true PA0.Signal=S_TIM2_ETR +PA1.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI +PA1.GPIO_Label=PIN +PA1.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING +PA1.GPIO_PuPd=GPIO_PULLUP +PA1.Locked=true +PA1.Signal=GPXTI1 PA11.Mode=Device PA11.Signal=USB_DM PA12.Mode=Device @@ -139,6 +147,8 @@ RCC.USART3Freq_Value=150000000 RCC.USBFreq_Value=48000000 RCC.VCOInputFreq_Value=12500000 RCC.VCOOutputFreq_Value=300000000 +SH.GPXTI1.0=GPIO_EXTI1 +SH.GPXTI1.ConfNb=1 SH.S_TIM2_ETR.0=TIM2_ETR,ClockSourceETR_Mode2 SH.S_TIM2_ETR.ConfNb=1 TIM1.ClockDivision=TIM_CLOCKDIVISION_DIV1