这里的部分问题是您依赖预编译的 Cube/HAL 函数,而不是编写您自己的函数,这样您就可以了解正在发生的事情。
当接收方 DMA 抛出传输完成中断时调用 HAL_SPI_TxRxCpltCallback(),此时整个数据包已传输完毕。然而,如果 Tx DMA 是循环的,它已经将前 3 个字节传输到 SPI Tx FIFO 中,带有*旧*值,之后发生递增,因此第 4 个字节已经在递增之后传输。
你想在 Tx DMA 传输完成中断中执行增量,如果你能保证它会在它的第一个字节传输到 FIFO 之前完成。或者,您可以尝试使用 Double-Buffer DMA 模式。
这里的部分问题是您依赖预编译的 Cube/HAL 函数,而不是编写您自己的函数,这样您就可以了解正在发生的事情。
当接收方 DMA 抛出传输完成中断时调用 HAL_SPI_TxRxCpltCallback(),此时整个数据包已传输完毕。然而,如果 Tx DMA 是循环的,它已经将前 3 个字节传输到 SPI Tx FIFO 中,带有*旧*值,之后发生递增,因此第 4 个字节已经在递增之后传输。
你想在 Tx DMA 传输完成中断中执行增量,如果你能保证它会在它的第一个字节传输到 FIFO 之前完成。或者,您可以尝试使用 Double-Buffer DMA 模式。
举报