void init_i2s2(void)
{
rcu_periph_clock_enable(RCU_SPI2);
// SPI2_MOSI/I2S2_SD tx
gpio_af_set(GPIOC, GPIO_AF_5, GPIO_PIN_1);
// SPI2_SCK/I2S2_CK
gpio_af_set(GPIOB, GPIO_AF_6, GPIO_PIN_3);
// I2S2_ADD_SD 全双工脚 rx
gpio_af_set(GPIOB, GPIO_AF_7, GPIO_PIN_4);
// SPI2_NSS/I2S2_WS
gpio_af_set(GPIOA, GPIO_AF_6, GPIO_PIN_4);
gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3|GPIO_PIN_4);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3|GPIO_PIN_4);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_4);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
spi_i2s_deinit(SPI2);
i2s_init(SPI2, I2S_MODE_SLAVETX, I2S_STD_PHILLIPS, I2S_CKPL_LOW);
// 16位,8K采样率,不需要MCLK时钟
i2s_psc_config(SPI2, I2S_AUDIOSAMPLE_8K, I2S_FRAMEFORMAT_DT16B_CH16B, I2S_MCKOUT_DISABLE);
// 这里的库函数有问题,RX和TX反转了
i2s_full_duplex_mode_config(I2S2_ADD, I2S_MODE_SLAVETX, I2S_STD_PHILLIPS, I2S_CKPL_LOW, I2S_FRAMEFORMAT_DT16B_CH16B);
} |