我使用的芯片型号是GD32F130G8U6
电路图如下:
[url=][/url]
使用PA15--->SPI_CS
PB3--->SPI_CLK
PB4--->SPI_MISO
PB5--->SPI_MOSI
SPI工作在从机模式,中断接收。但是,没办法完成通信。我检查和验证过连线,绝对没有问题。
代码如下:
/*****************************************************
** @函数名:spi_slave_init
** @描述 :spi初始化为从模式
** @参数 :无
** @返回值:None
*****************************************************/
void spi_slave_init(void)
{
spi_parameter_struct spi_init_struct;
rcu_periph_clock_enable(RCU_GPIOA); //打开GPIOA口时钟,PA15是CS
rcu_periph_clock_enable(RCU_GPIOB); //打开GPIOB口时钟,PB3、4、5 -> SCK MISO MOSI
rcu_periph_clock_enable(RCU_SPI1); //打开SPI1的时钟
gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5);
gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_15);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
//SPI1 parameter config */
spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
spi_init_struct.device_mode = SPI_SLAVE; //
spi_init_struct.frame_size = SPI_FRAMESIZE_16BIT;;
spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE;
spi_init_struct.nss = SPI_NSS_SOFT; //软件触发
spi_init_struct.prescale = SPI_PSC_2 ;
spi_init_struct.endian = SPI_ENDIAN_MSB;;
spi_init(SPI1, &spi_init_struct);
//中断配置
nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
nvic_irq_enable(SPI1_IRQn,0,1);
//使能SPI中断
spi_i2s_interrupt_enable(SPI1, SPI_I2S_INT_RBNE); //接收中断
spi_enable(SPI1); //使能SPI
}
/*****************************************************
** @函数名:SPI1_IRQHandler
** @描述 :spi接收中断函数
** @参数 :无
** @返回值:None
*****************************************************/
void SPI1_IRQHandler(void)
{
uint16_t spi1_receive;
if(spi_i2s_interrupt_flag_get(SPI1, SPI_I2S_INT_TBE) != RESET)
{
spi1_receive = spi_i2s_data_receive(SPI1);
}
}
请各位大侠给与指导。谢谢。
|