私は、STM32F446を使用して3倍のSPI(私はそのすべてがマスターです)とSDIOインターフェイスを必要とするアプリケーションに取り組んでいます。STM32F4 DMAは並行して動作できますか?
2個のSPI(SPI1とSPI2)は、1msごとに読み取る必要があるセンサーです。 SPI1の場合、1バイトを書き込む必要があり、それに対する応答は値になります。 SPI2の場合、1バイトを書き込んだ後に6を読み出す必要があります。
3番目のSPI(SPI3)とSDIOは通信/ロギング用であり、どちらも固定周期のデータを送信する必要はありません。
STM32F46x manual、セクション9を見て、私は周辺機器とDMA転送をトリガすることができますように、それは見ていません(それはあまりにも悪いです)interuptsが、私はすべてのことのように行うことができます。
- タイマーは、すべての割り込み1ms:ISR SPI1およびSPI2 DMA転送がトリガされます。 DMA転送は、受信したセンサデータでバッファを満たす。
- 私はSDIOまたはSPI3に書き込む必要があるたびに、SPI1とSPI2のDMA転送より優先度の低いDMA転送を開始します。
SPI1とSPI2は2つのDMAコントローラを搭載しているため、SPI2とSDIOの同時発生時にコントローラがフリーになるまでブロックされてしまうと思います。そうですか?
私は既にSPIをDMAで最大速度で実行していますが、SPI1とSPI2は遅いため(1msはstm4では非常に遅いです)、割り込みに1を設定してメインでチェックしますフラグが設定されている場合はコードループになります。 DMAを使用する場合は、まったく同じようにする必要があるため、DMAを再起動するたびに速度が上がりません。 – hamboy75