timer interrupt on STM32F303
According to this: http://www.keil.com/support/docs/3928.htm
there's actually an issue with Cortex-M3/M4 devices as


  Cortex-M3 and Cortex-M4 interrupts appear to be triggering twice.


caused by


  The ISR code exits immediately after a write to clear the interrupt. 


which seems to be what you're experiencing and also goes along with your assumption.

The final resolution suggested is


  (...) just perform another memory write before exiting the ISR.


which the article's example does by reordering the ISR instructions, leaving one memory write operation by the end. Or adding a dummy write.



As a personal note, if I were you I'd go for the safest approach: check the flag on entry and perform a dummy write on exit (GPIOE-&gt;ODR = GPIOE-&gt;ODR; maybe). And even though you seem to be just experimenting on the platform, that kind of solution deserves a comment on code.