Да куда уж нам папенькиным сынкам... Вот если только самопальную под 16-битные пики - см. вложение. Код выглядит примерно так:
/**
* Конфигурация аппаратного модуля SPI для роботы с Serial Flash
*
* @return BSP_ERR
*/
BSP_ERR bsp_sfl_conf (void)
{
BSP_ERR ret = BSP_ERR_NO;
if (ready)
return BSP_ERR_REP_INIT;
csp_gpio_pin_dir_out(GPIO_DEF(SF_CS));
_desel();
/* Config PPS module for UART TX */
csp_pps_unlock();
csp_pps_out_set(SF_SCK_PPS_FUNC, SF_SCK_PPS_PIN); /* SCK */
csp_pps_out_set(SF_SDO_PPS_FUNC, SF_SDO_PPS_PIN); /* SDO */
csp_pps_inp_set(SF_SDI_PPS_FUNC, SF_SDI_PPS_PIN); /* SDI */
csp_pps_lock();
/* Config channel for M25P flash - 8 MHz clock */
csp_spi_conf_set(SF_SPI,
SPI_DIS |
SPI_IDLE_CON |
SPI_PIN_SCK_EN |
SPI_PIN_SDO_EN |
SPI_PIN_SS_DIS |
SPI_8_BIT |
SPI_DATA_SAMPLE_MIDDLE |
SPI_DATA_OUT_ACT_INACT |
SPI_CLK_IDLE_0 |
SPI_MODE_MASTER |
SPI_FRAME_DIS |
SPI_ENCH_BUFF_EN);
csp_spi_baud_set(SF_SPI, SPI_BAUD_1_2); /* 8 MHz */
csp_spi_int_mode_set(SF_SPI, SPI_INT_MODE_TX_DONE);
csp_spi_en(SF_SPI);
ready = true;
return ret;
}
А STM, кажется, сделал все, чтобы усложнить работу...