用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]);
- }
- }
|