将两个STM32通过SPI的方式连接起来,用的都是SPI2,一个当主,一个当从
已经实现了单个字节的收发,可是当我想发送数组的时候,产生了一个严重问题,就是从机接收到的数据跟主机发送的数据不匹配
比如我主机发送0x01,0xff,0x01,然后我从机接收到的是0x08,0x0f,0xf8,上电复位之后接收到的数据可能又是另外三个,后来总结了一下规律,发现我发送的数据波形跟接收到的数据波形,收尾相接都是0000 0001 1111 1111 0000 0001,所以现在不知道该怎么解决这个问题
我发送跟接收函数如下:使能是B12
void SPI2_Send(uint8_t data){
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
SPI2->DR = data; // write data to be transmitted to the SPI data register
while( !(SPI2->SR & SPI_I2S_FLAG_TXE) );
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
uint8_t SPI2_Receive(void){
while( !(SPI2->SR & SPI_I2S_FLAG_RXNE) ); // wait until receive complete
while( SPI2->SR & SPI_I2S_FLAG_BSY ); // wait until SPI is not busy anymore
return SPI2->DR; // return received data from SPI data register
}
主机主函数片段如下:
while(1)
{
for(i = 0;i<3;i++)
{
SPI2_Send(Rereg[i]);
}
}
其中Rereg[3] = {0x01,0xff,0x01};
从机主函数片段如下:
while(1)
{
for(i=0;i < 3;i++)
{
Rereg[i] = SPI2_Receive();
a[i]= Rereg[i];
}
a[0]= Rereg[0];
a[1]= Rereg[1];
a[2]= Rereg[2];
}
请求大神们帮小弟看看 |