Interrupts on pin B4 and B5 not working on Electron

Whether these pins is not possible to use interrupts or has a bug in the library?
The problem exists on pins B4 (PC0) and B5 (PC1) as it says in the title.
Pins B0, B1, B2, B3 work great by using a interrupts.

I wouldn’t be surprised if these pins would share the fate of D0 & A5 on the Photon (and other pins sharing EXTI lines too), but the docs don’t tell.
Looking into the STM32F2xx datasheet and/or the firmware pin mapping might be required for that (and opening an issue on the docs repo).

Most likely it is not a problem sharing the resources of pins.
I found this: https://github.com/spark/firmware/blob/develop/hal/src/stm32f2xx/pinmap_hal.c
These pins belong to the GPIO_PinSource0 and GPIO_PinSource1.

Yup, and you said you were using B2 & B3 too, which share the EXTI with B4 & B5.
Or did you try these two sets mutually exclusive?

So I specifically use all B pin in a program.
Interruptions do not work exclusively on pins B4 and B5.


  #include "application.h"
    
    const int IN1 = B5;
    const int IN2 = B4;
    const int IN3 = B3;
    const int IN4 = B2;
    const int IN5 = B1;
    const int IN6 = B0;
    
    
    void  IN1_ISR() {
      
      IN1_STATE = digitalRead(IN1);
     
    }
    
    void  IN2_ISR() {
      
      IN2_STATE = digitalRead(IN2);
     
    }
    
    void  IN3_ISR() {
      
      IN3_STATE = digitalRead(IN3);
     
    }
    
    void  IN4_ISR() {
      
      IN4_STATE = digitalRead(IN4);
     
    }
    
    void  IN5_ISR() {
      
      IN5_STATE = digitalRead(IN5);
     
    }
    
    void  IN6_ISR() {
      
      IN6_STATE = digitalRead(IN6);
     
    }
    
    
    void setup()                    // run once, when the sketch starts
    {
    
        pinMode(IN1, INPUT_PULLUP);    // sets pin as input
        pinMode(IN2, INPUT_PULLUP);    // sets pin as input
        pinMode(IN3, INPUT_PULLUP);    // sets pin as input
        pinMode(IN4, INPUT_PULLUP);    // sets pin as input
        pinMode(IN5, INPUT_PULLUP);    // sets pin as input
        pinMode(IN6, INPUT_PULLUP);    // sets pin as input
        
          // Attach an interrupt 
      attachInterrupt(IN1, IN1_ISR, CHANGE);
      attachInterrupt(IN2, IN2_ISR, CHANGE);
      attachInterrupt(IN3, IN3_ISR, CHANGE);
      attachInterrupt(IN4, IN4_ISR, CHANGE);
      attachInterrupt(IN5, IN5_ISR, CHANGE);
      attachInterrupt(IN6, IN6_ISR, CHANGE);
     
    }
    
    void loop()                       // run over and over again
    {
    	
    }

Can you check if your IN3_ISR()/IN4_ISR() fire when you trigger B4/B5?

Since there is only one ISR per EXTI line and B2/B4 share EXTI0 and B3/B5 share EXTI1 and the last set ISR will be stored that would make sense, but I haven’t got any devices on me to test.

No, It works only one who is first defined. For example B2 or B4, ie the for other B3 or B5.
Is there another solution?
For now, I readings inputs with loop.
Another solution is a thread that also works.