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通信が完了したときコールバック関数が呼び出される。
コメント