STM32資料 補足編 2
実行時間を測定してみよう
タイマー割り込みを使って実行時間を測定してみよう
今回やること
タイマー割り込みで1ミリ秒ごとにカウントアップすることで実行時間を測定します
作業の流れ
- ピンを割り当てて、割り込みの設定をする
- wrapper.cppにコードを書き込む
- STM32にプログラムを書き込み実行する
- PCでデータを受信する
タイマーの設定
Configurationの設定
- 今回は内部クロックから1ミリ秒ごとにリセットされるタイマーを作成する
このボードのタイマーのクロックは84MHZなので、1秒に8400万回のクロックが発生する
そのため、84クロックごとに1カウントアップするタイマーで1000回カウントすれば8.4万回( = 1ミリ秒)を数えることができる
そこでPreScalerを83、Counter Periodを999にする
プログラム
前回紹介しなかった、タイマーの停止用関数を紹介します
TIMのスタート
指定したタイマーを停止するための関数
HAL_TIM_Base_Stop_IT(&htim6);
この関数の引数
引数名 | 変数型 | 内容 |
---|---|---|
&htim | TIM_HandleTypeDef* | タイマーのポインタ(xはタイマーの番号) |
サンプルコード
1msごとに割り込みを発生させて、実行時間を測定するプログラムを作成した
#include "wrapper.hpp"
#include "tim.h"
#include "usart.h"
#include
uint32_t count = 0;
void init(){
HAL_TIM_Base_Start_IT(&htim6);
//測定したい処理
HAL_Delay(1000);
HAL_TIM_Base_Stop_IT(&htim6);
//データの出力(タイマーの処理時間があるので、1ms引いておこう)
std::string str = "count = " + std::to_string(count - 1) + "\n";
HAL_UART_Transmit(&huart2, (uint8_t*)str.c_str(), str.size(), 1000);
}
void loop(){
}
//タイマーのカウントが最大値に達したときに呼び出される
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
//TIM6 1msの割り込み
if(htim == &htim6){
count++;
}
}
終わりに
今回は、タイマー割り込みを使った実行時間測定をやってみました!