OK I figured it out. There is a mistake in the STM32F4xx_spi.c Peripheral Driver file
that doesn't allow the use of the HSI(internal clock) value needed for calculating the appropriate divider and odd values for the I2SPR register. (see the last line)
I changed it to:
and now it works. Hours wasted as usual!!
The clock configuration tool is also wrong as it creates a message in the system_stm32F4xx.c file that states
Try a 10x (not 1x) probe on the OSC2 pin. You should be able to see the clock. The frequency will be slightly changed by the probe loading.
I don't think your part number is correct, but most 16F chips are similar.
Edit: Scope probe loading is explained in this Tektronix paper.
Crystal pullability is explained in this application note. Note that the typical loading from a 10x scope probe would only change the frequency by perhaps 100ppm (0.01%), which is unimportant in many applications other than timekeeping.
Best Answer
TIM3 is on APB1 (see RCC_APB1RSTR).
This means in your configuration the TIM3 clock is 72 MHz, since it's derived from PCLK1 x2.