STM32F DMAを使った周辺機能データ送受信の転送完了コールバック設定方法

STM32Cubeには、周辺機能(ADC結果レジスタやSPI送受信レジスタ)からのデータ転送完了時にコールバックを受け、データ転送完了時に追加処理を行うことができる。その設定方法や使用方法を説明する。

目次

STM32Cubeの設定

レジスタデータのDMA転送設定を行っても、初期設定ではコールバック機能は利用不可となっている。
それを切り替えるためには、以下の設定を「DISABLE」から「ENABLE」に変更する。この例ではSPIにコールバック機能を追加しようとしている。

SPI通信

コールバック関数の設定方法

まず、SPI通信関数を呼び出すソースの先頭部分で以下のプロトタイプ宣言を行い、

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);

次に、その本体関数にDMA転送完了時に行いたい処理を書く。

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
	//DMA転送完了時の処理を記述
}

HAL_SPI_TxCpltCallback関数は、上記宣言を行わない場合、「stm32f1xx_hal_spi.c」に__weak(weakアトリビュート)が付与された同名関数が宣言されており、そちらが実行される。ユーザが上記関数を宣言した場合、HAL_SPI_TxCpltCallback関数は上書きされユーザ宣言の関数が使用される仕組みになっている。

コールバック関数の使用方法

設定が完了していれば、コールバック関数が呼ばれる条件になったときに呼び出される。例えばHAL_SPI_Transmit_DMA関数で変数の値をDMAでSPI送信するときは、全バイトのSPI通信が完了したときコールバック関数が呼び出される。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次