STM32でタイマを使ってみる(Output Compare + DMA編)
出典: Wikimura
ここでは、タイマのOutput Compare機能を使ってGPIOをトグルしてみます。GPIOはGPIO出力モードとして設定したものを使います。 タイマのOutput Compare出力が使えない場合でもうまくいくようにします。
というのも、外部にSPIで接続したDMAに対して、一定周期で値を送信し波形を作り出そうとしたときに、困ったことに遭遇したからです。
「STM32のSPI」に書いたように、STM32のSPIモジュールには不便な仕様があります。
マスタモードでNSS(Slave Select)信号をハードウェア制御させると「アサートされっぱなし」になり、同期がとれないのです。
これによりDACが変換を開始しないのです。
割り込みにするには間隔が短すぎるため、CPUの介在無しでこれを解決したいと考えました。
そこで、DMAでGPIOへ書き込むことで、NSS信号をトグルしようと思いつきました。
- タイマの更新イベントでNSSをアサート
- 少し経過(数十ns以上)したら、SPIへ波形を書き込む(DACへデータが書き込まれる)
- 書き込み終了したらNSSをネゲート
NSSトグル機能は、タイマのイベントをトリガとしたDMA転送で実装します。
- NSSのアサート: 0x00をNSSビットのビットバンドエイリアスからシングルビットクリアする
- NSSのネゲート: 0x01をNSSビットのビットバンドエイリアスからシングルビットセットする
ここでは、NSSのトグルをタイマのDMA要求から行ってみます。

