用STM32做SPI从设备,接受用的中断,每接收一次数据,将要发送的数据放到发送寄存器里。
第一张是SCL和MOSI的波形图。
第二张是SCL和MISO的波形。
可以看到我的STM32从设备发送到第二和第三个数据是一样的。其实是不一样的,第一个发送的数是正确的,第二个数发送了两遍,然后发送第三、第四个数。想第五个数被吃掉了...
以下为SPI中断函数。
void SPI2_IRQHandler(void)
{
static u8 spi2Num;
u16 spi2Temp;
spi2Temp = SPI_I2S_ReceiveData(SPI2);
if(spi2Num == 0)
{
if(spi2Temp == 0x3a05)
{
spi2Num = 1;
spi2RecvBuff[0] = spi2Temp;
SPI_I2S_SendData(SPI2, spi2SendBuff[1]);
}
}
else
{
spi2RecvBuff[spi2Num] = spi2Temp;
spi2Num++;
if(spi2Num > 4)
{
spi2Num = 0;
spi2ReciveOk = 1;
}
SPI_I2S_SendData(SPI2, spi2SendBuff[spi2Num]);
}
}
|