回复第 4 楼 于2014-07-08 14:38:07发表:
发送完清除发送中断还是会进入一次中断。建议是关闭中断。
使用TX推动RX,当tx发送完毕数据,关闭TX,当RX接收完一帧数据,再关闭RX
if(DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET)
{
DMA_ClearITPendingBit(DMA1_FLAG_TC4 | DMA1_FLAG_HT4 |DMA1_FLAG_TE4); //DMA1_FLAG_TC2 | DMA1_FLAG_HT2 | DMA1_FLAG_TE2
DMA_Cmd(DMA1_Channel4, DISABLE);
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Rx, DISABLE);
}
//发送完成
if(DMA_GetITStatus(DMA1_IT_TC5) == SET)
{
DMA_ClearITPendingBit(DMA1_FLAG_TC5 | DMA1_FLAG_HT5 |DMA1_FLAG_TE5);
DMA_Cmd(DMA1_Channel5, DISABLE);
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, DISABLE);
}
回复第 4 楼 于2014-07-08 14:38:07发表:
发送完清除发送中断还是会进入一次中断。建议是关闭中断。
使用TX推动RX,当tx发送完毕数据,关闭TX,当RX接收完一帧数据,再关闭RX
if(DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET)
{
DMA_ClearITPendingBit(DMA1_FLAG_TC4 | DMA1_FLAG_HT4 |DMA1_FLAG_TE4); //DMA1_FLAG_TC2 | DMA1_FLAG_HT2 | DMA1_FLAG_TE2
DMA_Cmd(DMA1_Channel4, DISABLE);
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Rx, DISABLE);
}
//发送完成
if(DMA_GetITStatus(DMA1_IT_TC5) == SET)
{
DMA_ClearITPendingBit(DMA1_FLAG_TC5 | DMA1_FLAG_HT5 |DMA1_FLAG_TE5);
DMA_Cmd(DMA1_Channel5, DISABLE);
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, DISABLE);
}
举报