@@ -163,6 +163,7 @@ static void gpio_irq6(void)
163163}
164164
165165extern uint32_t Set_GPIO_Clock (uint32_t port_idx );
166+ extern void pin_function_gpiomode (PinName pin , uint32_t gpiomode );
166167
167168int gpio_irq_init (gpio_irq_t * obj , PinName pin , gpio_irq_handler handler , uint32_t id )
168169{
@@ -267,15 +268,14 @@ void gpio_irq_free(gpio_irq_t *obj)
267268 gpio_channel -> channel_gpio [gpio_idx ] = 0 ;
268269 gpio_channel -> channel_pin [gpio_idx ] = 0 ;
269270
270- // Disable EXTI line
271- pin_function (obj -> pin , STM_PIN_DATA ( STM_MODE_INPUT , GPIO_NOPULL , 0 ) );
271+ // Disable EXTI line, but don't change pull-up config
272+ pin_function_gpiomode (obj -> pin , STM_MODE_INPUT );
272273 obj -> event = EDGE_NONE ;
273274}
274275
275276void gpio_irq_set (gpio_irq_t * obj , gpio_irq_event event , uint32_t enable )
276277{
277278 uint32_t mode = STM_MODE_IT_EVT_RESET ;
278- uint32_t pull = GPIO_NOPULL ;
279279
280280 if (enable ) {
281281 if (event == IRQ_RISE ) {
@@ -317,7 +317,7 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable)
317317 }
318318 }
319319
320- pin_function (obj -> pin , STM_PIN_DATA ( mode , pull , 0 ) );
320+ pin_function_gpiomode (obj -> pin , mode );
321321}
322322
323323void gpio_irq_enable (gpio_irq_t * obj )
0 commit comments