在STM32F4的SPI半双工模式下使用DMA收发,核心是确保方向切换时总线释放和时序同步。首先,配置SPI为半双工(BIDIMODE=1,BIDIOE控制方向),DMA需分别配置TX和RX通道,但同一时刻只启用一个方向。发送时,先置BIDIOE=1,启动TX DMA,等待传输完成(DMA中断或SPI的TXE/BSY标志),然后清除BIDIOE=0,释放总线。接收时,置BIDIOE=0,启动RX DMA,等待接收完成。为避免数据错位,务必在切换方向前等待SPI总线空闲(检查BSY位清零),并确保DMA配置的传输长度与SPI数据帧格式(如8位或16位)匹配。实操建议:使用SPI的硬件NSS或软件控制片选,确保从机在方向切换时不误触发;在DMA完成回调中增加方向切换逻辑,并用互斥锁或标志位防止并发访问。若需全双工,建议改用SPI的I2S或双线模式,避免半双工切换的复杂性。
mcuku 阿沐 · 2026-08-27