Ok, so I'm not too far off. The PFD on the STM32H7 seems to be (according to datasheets, two ranges. 1-2 and 2-16)... But they allow in 4Mhz to 50Mhz as the HSE. So there is an initial divider that is outside of the analog hardware. Once you hit the PFD the value must be 4-16Mhz.
So once you are using the PLL to multiple by ANY number, it doesn't matter if it's *4 or *512? That seems a little odd to me. Even though it's locked, it seems like *512 is going to be too high of a clock even internally for a moment before it's divided again.
It makes sense you can't get a slow speed in a small package. Like larger key making a lower tone. I never had to consider this before.
CubeMx does have a super-helpful clock page, but I'm not sure what the math operation is called to fill in 25 / X * Y / Z = 96. So I wrote a quick python script to help me find all the options for a given clock and the limits the chip allows or doesn't. Just brute force with three for loops. I agree this is the tool to use, but I had trouble finding all the common multipliers and dividers I would need. The resolve issues feature is good, but doesn't allow you to enter in all sorts of PLL final values and get the settings required.
It's pretty damn hacky, but I was in a hurry. Doesn't work well for floats because of rounding.
freq_input = 25
freq_desired = 96
for div_1 in range (2, 63):
for mul_1 in range (4, 512):
for div_2 in range (1, 128):
freq_calc = freq_input / div_1 * mul_1 / div_2
if (freq_calc == freq_desired):
if (freq_input/div_1 >= 1) & (freq_input/div_1 <= 16):
if (freq_input / div_1 * mul_1 >= 192) & (freq_input/div_1*mul_1 <= 836):
print ("DIV_1 ", div_1, "MUL_1 ", mul_1, "DIV_2 ", div_2, "== ", freq_calc)