https://github.com/MR-DOS/Si5351-lib

Example

Simple example how to get 50 kHz output with 25 MHz crystal:

Si5351_ConfigTypeDef Si5351_ConfigStruct;

Si5351_StructInit(&Si5351_ConfigStruct);    //initialize the structure with default "safe" values
Si5351_ConfigStruct.OSC.OSC_XTAL_Load = XTAL_Load_8_pF;    //use 8 pF load for crystal

Si5351_ConfigStruct.PLL[0].PLL_Clock_Source = PLL_Clock_Source_XTAL;    //select crystal as clock input for the PLL
Si5351_ConfigStruct.PLL[0].PLL_Multiplier_Integer = 32;    //multiply the clock frequency by 32, this gets us 800 MHz clock

Si5351_ConfigStruct.MS[0].MS_Clock_Source = MS_Clock_Source_PLLA;    //select PLLA as clock source for MultiSynth 0
Si5351_ConfigStruct.MS[0].MS_Divider_Integer = 250;    //divide the 800 MHz by 250 this gets us 3.2 MHz

Si5351_ConfigStruct.CLK[0].CLK_R_Div = CLK_R_Div64;    //divide the MultiSynth output by 64, this gets us 50 kHz
Si5351_ConfigStruct.CLK[0].CLK_Enable = ON;    //turn on the output

Si5351_Init(&Si5351_ConfigStruct);    //apply the changes