cancel
Showing results for 
Search instead for 
Did you mean: 

GPIO Interrupt

Sri_Nishanth
Associate II

Is it possible to disable a specific GPIO interrupt in my code and re-enable it after some time. HAL_NVIC_DisableIRQ(EXTI4_15_IRQn) this function will help but this will disable all the GPIO pins connected to that particular EXTI line. Any other possible ways I can implement?

1 ACCEPTED SOLUTION

Accepted Solutions
Pavel A.
Evangelist III
9 REPLIES 9

Which STM32?

In most STM32 the individual EXTI interrupts are enabled/disabled in the EXTI_IMR register, see EXTI chapter in Reference Manual (RM).

JW

Hi @waclawek.jan

I am using STM32G474RCT6 controller.

Should I need to make changes in the EXTI_IMR register. Or are there any HAL functions I can use to Implement this. Currently I could be able to disable EXTI15_10_IRQn which disables all the GPIOs connected to this line.

Sri_Nishanth_0-1701421306953.png

 

 

I don't use Cube/HAL.

I've seen in the past users to perform the same operation as when initializing the pin, just without the interrupt being set.

JW

FBL
ST Employee

Hello @Sri_Nishanth 

 

FBelaid_0-1701425704816.png

According to the reference manual, EXTI line dedicated to 10->15 are regrouped in one vector in NVIC controller. So, using CMSIS, this should not be possible. Maybe, we can implement this operation in HAL driver using directly EXTI_IMR. I will forward the request to dedicated team. 

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

Hi @FBL 

Okay sure.

Thanks for the help!!

Pavel A.
Evangelist III

You can use LL_EXTI_EnableIT_0_31()  and  LL_EXTI_DisableIT_0_31() 

 

Thanks!!

This worked:grinning_face::handshake:

Thanks for the solution. When calling for example:

 

LL_EXTI_EnableIT_0_31(uint32_t EXTI_Line);

 

how do the individual "EXTI_Line"s map to specific GPIO ports and pins? I see "lines" referenced in the reference manual, but I don't understand the mapping.

 

EDIT: I may have found the mapping on page 271. It seems that, for example:

 

LL_EXTI_Disable_IT_0_31(LL_EXTI_LINE_3);

 

will disable the interrupts on pin 3 of ALL ports. Is that right?

These are two different things.

First comes the multiplexer controlled by SYSCFG register, which selects, which port's pin is used for that particular EXTIn, n = 0..15.

Then output of that multiplexer enters EXTI module and you can then there enable/disable individual EXTI in the EXTI_IMR register, see EXTI chapter in Reference Manual (RM). That's what those LL functions/macros do.

Cube/LL is open source, so you can look up yourself what the macros/functions do.

JW