我想用MINI板子实现SPI1和SPI2之间的通信,SPI1是主,SPI2是从,代码如下:
[mw_shl_code=c,true]const u8 TEXT_Buffer_SPI[]={"MiniSTM32 SPI TEST"};
#define SIZE sizeof(TEXT_Buffer_SPI)
u8 SPI1_Buffer_Rx[SIZE] = {0};
u8 SPI2_Buffer_Rx[SIZE] = {0};
int main(void)
{
u8 Tx_Counter = 0;
u8 Rx_Counter = 0;
u8 k = 0;
SystemInit();
delay_init(72); //???±??????
NVIC_Configuration();
uart_init(9600);
SPIx_Init();
while(Tx_Counter<SIZE)
{
SPI_I2S_SendData(SPI2,TEXT_Buffer_SPI[Tx_Counter]); //???ú??·???????
SPI_I2S_SendData(SPI1,TEXT_Buffer_SPI[Tx_Counter]);
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE) == RESET); //?????????????ò????
SPI2_Buffer_Rx[Rx_Counter] = SPI_I2S_ReceiveData(SPI2);
// while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE) ==RESET);
// SPI1_Buffer_Rx[Rx_Counter] = SPI_I2S_ReceiveData(SPI1);
Tx_Counter++;
Rx_Counter++;
}
printf("\r\n The SPI1 has sended data below : \r\n");
while(k<SIZE)
{
printf(" %0.2d \r ",TEXT_Buffer_SPI[k]);
k++;
}
printf("\r\n The SPI2 has received data below : \r\n");
k = 0;
while(k<SIZE)
{
printf("%0.2d\r",SPI2_Buffer_Rx[k]);
k++;
}
while(1);[/mw_shl_code]
[mw_shl_code=c,true]SPI_InitTypeDef SPI_InitStructure;
void SPIx_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1|RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial=7;
SPI_Init(SPI1,&SPI_InitStructure);
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode=SPI_Mode_Slave;
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial=7;
SPI_Init(SPI2,&SPI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel=SPI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE);
SPI_Cmd(SPI1,ENABLE);
SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_RXNE,ENABLE);
SPI_Cmd(SPI2,ENABLE);
} [/mw_shl_code]
调试时发现一直停在while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE) == RESET); 说明SPI2一直没有接收到数据,这是怎么回事???求高手解答,谢谢了。 |