我用的SPI1 
GPIO: 
rcu_periph_clock_enable(RCU_GPIOB); 
 
rcu_periph_clock_enable(RCU_AF); 
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);          // SCLK 
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);          // MOSI 
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_14);    // MISO 
gpio_init(GPIOB, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_12);         // SF CS 
 
SPI: 
spi_parameter_struct spi_init_struct; 
rcu_periph_clock_enable(RCU_SPI1); 
spi_i2s_deinit(SPI1); 
spi_struct_para_init(&spi_init_struct); 
spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX; 
spi_init_struct.device_mode          = SPI_MASTER; 
spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT; 
spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE; 
spi_init_struct.nss                  = SPI_NSS_SOFT; 
 
spi_init_struct.prescale             = SPI_PSC_8; 
spi_init_struct.endian               = SPI_ENDIAN_MSB; 
spi_init(SPI1, &spi_init_struct); 
spi_enable(SPI1); 
最后读写函数 
uint32_t dac60096_spi_write(uint8_t *__data, uint8_t len) 
{ 
    uint32_t temp = 0; 
    uint8_t  rx_array[3] = {0}; 
    gpio_bit_reset(GPIOB, GPIO_PIN_12); 
    for (size_t i = 0; i < len; i++) 
    { 
        while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE)); 
        spi_i2s_data_transmit(SPI1, __data[i]); 
        while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_RBNE)); 
        rx_array = spi_i2s_data_receive(SPI1); 
    } 
    gpio_bit_set(GPIOB, GPIO_PIN_12); 
    temp = rx_array[0] << 16 | rx_array[1] << 8 | rx_array[2]; 
    return temp; 
} 
 
 
 
 
 
 
 
 
 
 
 |