|
为什么spi0可以发送到spi1,而spi1发送不到spi0,
spi0为主机模式,spi1为从机模式
#include "gd32f30x.h"
#include "systick.h"
#define NUM (10)
unsigned char spi0_send_array[NUM] = {0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA};
unsigned char spi1_send_array[NUM] = {0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA};
unsigned char spi0_receive_array[NUM] = {0,0,0,0,0,0,0,0,0,0};
unsigned char spi1_receive_array[NUM] = {0,0,0,0,0,0,0,0,0,0};
unsigned char send_cnt=0, receive_cnt=0,INT_I=0;
//void spi0_init();
//void spi1_init();
void spi0_init_MASTER()
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_SPI0);
rcu_periph_clock_enable(RCU_AF);
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
spi_parameter_struct spi0_parameter_struct;
spi_i2s_deinit(SPI0);
spi0_parameter_struct.device_mode = SPI_MASTER;//SPI_MASTER;//SPI_SLAVE
spi0_parameter_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
spi0_parameter_struct.frame_size = SPI_FRAMESIZE_8BIT;
spi0_parameter_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
spi0_parameter_struct.endian = SPI_ENDIAN_MSB;
spi0_parameter_struct.nss = SPI_NSS_SOFT;
spi0_parameter_struct.prescale = SPI_PSC_16;
spi_init(SPI0, &spi0_parameter_struct);
spi_enable(SPI0);
}
void spi1_init_SLAVE()
{
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_SPI1);
rcu_periph_clock_enable(RCU_AF);
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_15);
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
spi_parameter_struct spi1_parameter_struct;
spi_i2s_deinit(SPI1);
spi1_parameter_struct.device_mode = SPI_SLAVE;
spi1_parameter_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
spi1_parameter_struct.frame_size = SPI_FRAMESIZE_8BIT;
spi1_parameter_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
spi1_parameter_struct.endian = SPI_ENDIAN_MSB;
spi1_parameter_struct.nss = SPI_NSS_SOFT;
spi_init(SPI1, &spi1_parameter_struct);
spi_enable(SPI1);
}
int main(void)
{
spi0_init_MASTER();
spi1_init_SLAVE();
systick_config();
while(send_cnt < NUM)
{
// 从机先准备数据
while(spi_i2s_flag_get(SPI1, SPI_FLAG_TBE) == RESET); // 等待从机发送缓冲区空
spi_i2s_data_transmit(SPI1, spi1_send_array[send_cnt]); // 从机准备数据
// 主机启动传输
while(spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET);
spi_i2s_data_transmit(SPI0, spi0_send_array[send_cnt]);
// 等待主机传输完成
while(spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE) == RESET);
spi0_receive_array[receive_cnt] = spi_i2s_data_receive(SPI0);
// 等待从机接收完成
while(spi_i2s_flag_get(SPI1, SPI_FLAG_RBNE) == RESET);
spi1_receive_array[receive_cnt] = spi_i2s_data_receive(SPI1);
send_cnt++;
receive_cnt++;
}
return 0;
}
|
|