I2S全双工主发送模式DMA方式问题

if(HAL_I2SEx_TransmitReceive_DMA(&hi2s2, pTxData, pRxData, 4000)!=HAL_OK)
{
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_8);
}
while(HAL_I2S_GetState(&hi2s2)!=HAL_I2S_STATE_READY)
{
}
使能发送接收中断,全速运行通不过while,在while处设置断点则通过。
中断响应处理顺序是这样的:
发送半传输--->接收半传输--->发送传输完成--->接收传输完成。
跟踪发现,当调试全速运行时,一直在while里循环,点击STOP,查看hdma_i2s2_ext_rx的state为HAL_DMA_STATE_READY_HALF_MEM0。而在while处设置断点后,全速运行到断点处,再单步运行,hdma_i2s2_ext_rx的state为HAL_DMA_STATE_READY_MEM0,为什么全速运行会不处理最后一个中断——接收传输完成中断呢?
中断响应函数为(半传输、传输完成的判断处理在HAL库):
void DMA1_Stream3_IRQHandler(void)
{ // 接收中断
HAL_DMA_IRQHandler(&hdma_i2s2_ext_rx);
}

void DMA1_Stream4_IRQHandler(void)
{ // 发送中断
HAL_DMA_IRQHandler(&hdma_spi2_tx);
}
已邀请:

杜玉西 - 电子工程师

赞同来自:

请问问题解决了吗?我也碰到这个问题

ヒ月·こ微寒

赞同来自:

您的问题解决了吗?我也遇到了

流风回雪

赞同来自:

优化问题吧,使用volatile修饰下

要回复问题请先登录注册