另外,若在SPI4接收中断中关闭SPI4,示波器显示仍在发送,修改的中断代码如下:
void SPI4_IRQHandler(void)
{
if (spi_i2s_interrupt_flag_get(SPI4, SPI_I2S_INT_FLAG_TP) != RESET)
{
while (1)
{
if (spi_i2s_flag_get(SPI4, SPI_FLAG_TP))
{
spi_i2s_data_transmit(SPI4, spiCommStruct.sendBuff[spiCommStruct.SendIndex]);
spiCommStruct.SendIndex++;
if (spiCommStruct.SendIndex >= spiCommStruct.total)
{
spi_i2s_interrupt_disable(SPI4, SPI_I2S_INT_TP);
break;
}
}
else
{
break;
}
}
}
if (spi_i2s_interrupt_flag_get(SPI4, SPI_I2S_INT_FLAG_RP) != RESET)
{
while (1)
{
if (spi_i2s_flag_get(SPI4, SPI_FLAG_RP))
{
spiCommStruct.recvBuff[spiCommStruct.recvIndex++] = spi_i2s_data_receive(SPI4);
if (spiCommStruct.recvIndex >= spiCommStruct.total)
{
spi_i2s_interrupt_disable(SPI4, SPI_I2S_INT_RP);
spi_disable(SPI4);//增加了这句
osSemaphoreRelease(semSPI4);
break;
}
}
else
{
break;
}
}
}
}
寄存器如下:
