Upon closer analysis, it looks like a problem with the Firmware library when initialising the timers. The code below actually load CCER with 0x1110 (Ch0 is disabled). By commenting the line that initilises Ch3, then CCER gets loaded with 0x1011 (Ch0 is enabled). When loading ''manually'' CCER with 0x1111 with TIM2->CCER = 0x1111, capture works on all 4 channels.