SPIをPollingとDMAで使う(Nucleo-F446RE)SPI通信を、ポーリングとDMA経由でテストしました。2.8.1.201903050911SPI通信(ポーリング)STM32CubeのExampleはボードを2枚使って互いに通信させていますが、SPI送信波形を見るだけにして一番シンプルな形でテストしました。viewでPB3にSPI1_SCKを割り当ててやれば、有効化できます。Master」にしました。MISOが割り当てられず、SCKとMOSIの2線です。viewでPB4をGPIO_Outputに指定しました。D5クロック設定SPIクロックをちょうど1MHzにしたかったので、HCLKを2のN乗の128MHzにしました。Mux)を内蔵RCのHSIではなく、NucleoボードのST-Link側に乗っている8MHzの水晶から取るために、HSEに切り替えています。0xAAを送信しています。ビット列にすると「01010101:10101010」になります。Master)にしました。Masterの場合より1ピン増えて、MISOが追加されます。viewでPB10をGPIO_Outputに指定しました。SettingsSPIとDMAを紐付ける設定です。Request]で[SPI1_TX][SPI1_RX]を追加します。Normalクロックの設定はポーリングの場合と同じです。*/DMA転送の状態を示すフラグです。*/こちらも0x55、0xAAを送信しています。ソースのコメントにもありますが、DMA転送の完了をWhileループでフラグを見て待機していますが、本来はうまいことやってDMA転送完了待ち中は他の処理をするべきです。*/DMA転送完了の割り込みハンドラです。wTransferStateに状態を代入しているだけです。ch2:SCK(D3)printf()でUART通信しているので(ブロッキングされる)、SPI通信ごとの間隔が広がっています。Puttyで受信しているようすスレーブがつながっていないので受信データは0:0です。Writeしてやれば用は済みます。NSSのハードウェア制御の使い方はしばし保留。