Hi Alex
If you look in app_hw_stm32.h there are some setups for SDHC and SPI interfaces.
For example:
// Configure to suit SD card SPI mode at between 100k and 400k
//
#define SDCARD_CS PORTC_BIT11
#define SDCARD_MISO PORTB_BIT4
#define SDCARD_MOSI PORTB_BIT5
#define SDCARD_CLK PORTB_BIT3
#define INITIALISE_SPI_SD_INTERFACE() _CONFIG_PORT_OUTPUT(C, SDCARD_CS, (OUTPUT_FAST | OUTPUT_PUSH_PULL)); _SETBITS(C, SDCARD_CS); \
POWER_UP(APB1, RCC_APB1ENR_SPI3EN); \
_CONFIG_PERIPHERAL_INPUT(B, (PERIPHERAL_SPI3_I2S3ext), (SDCARD_MISO), (INPUT_PULL_UP)); \
_CONFIG_PERIPHERAL_OUTPUT(B, (PERIPHERAL_SPI3_I2S3ext), (SDCARD_CLK | SDCARD_MOSI), (OUTPUT_PUSH_PULL | OUTPUT_MEDIUM)); \
RCC_APB1RSTR |= RCC_APB1RSTR_SPI3RST; RCC_APB1RSTR &= ~RCC_APB1RSTR_SPI3RST; \
SPI3_CR1 = (SPICR1_BR_PCLK2_DIV128 | SPICR1_MSTR | SPICR1_SSI | SPICR1_CPOL | SPICR1_CPHA | SPICR1_SSM); \
SPI3_I2SCFGR = 0; \
SPI3_CR1 = (SPICR1_SPE | SPICR1_BR_PCLK2_DIV128 | SPICR1_MSTR | SPICR1_SSI | SPICR1_CPOL | SPICR1_CPHA | SPICR1_SSM);
#define SHARE_SPI // ensure that LCD operations are terminated to avoid conflicts
#define POWER_UP_SD_CARD() // apply power to the SD card if appropriate
#define ENABLE_SPI_SD_OPERATION()
// Set maximum speed
//
#define SET_SPI_SD_INTERFACE_FULL_SPEED() SPI3_CR1 = (SPICR1_SPE | SPICR1_BR_PCLK2_DIV2 | SPICR1_MSTR | SPICR1_SSI | SPICR1_CPOL | SPICR1_CPHA | SPICR1_SSM)
#if defined _WINDOWS
#define WRITE_SPI_CMD(byte) SPI3_DR = (unsigned short)byte; SPI3_DR = _fnSimSD_write((unsigned char)byte)
#define WAIT_TRANSMISSON_END() while ((SPI3_SR & SPISR_TXE) == 0) { SPI3_SR |= SPISR_TXE;} \
while (SPI3_SR & SPISR_BSY) {SPI3_SR &= ~SPISR_BSY;}
#else
#define WRITE_SPI_CMD(byte) SPI3_DR = (unsigned short)byte
#define WAIT_TRANSMISSON_END() while ((SPI3_SR & SPISR_TXE) == 0) {} \
while (SPI3_SR & SPISR_BSY)
#endif
#define READ_SPI_DATA() (unsigned char)SPI3_DR
#define SET_SD_DI_CS_HIGH() _CONFIG_PORT_OUTPUT(C, SDCARD_MISO, (OUTPUT_FAST | OUTPUT_PUSH_PULL)); _SETBITS(C, SDCARD_MISO); _SETBITS(C, SDCARD_CS) // force DI and CS lines high ready for the initialisation sequence
#define SET_SD_CARD_MODE() _CONFIG_PORT_INPUT(C, (SDCARD_MISO), (INPUT_PULL_UP | PULLUP_BIT11));
#define SET_SD_CS_LOW() _CLEARBITS(C, SDCARD_CS) // assert the CS line of the SD card to be read
#define SET_SD_CS_HIGH() _SETBITS(C, SDCARD_CS) // negate the CS line of the SD card to be read
Using this as reference you can adapt the SPI instance and pins to match your HW.
Regards
Mark