我用的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;
}
|