はじめに
ST-LINKでBlue Pillにプログラミング - LEDを点滅させるでとりあえずプログラミングして動くセットができましたので、これを使用して、タイマーを使用してLEDを点滅させるということをやってみました。
タイマーを動かし、割り込みを発生させ、その割り込みルーチンでLEDをON/OFFさせることが目標です。
動作環境
- STM32CubeIDE 1.7.0
- Blue Pill
- ST-LINK
- Windows10
STM32CubeIDEを起動
STM32CubeIDE 1.7.0を起動。
Start new STM32 projectをクリック。
STM32F103C8を選択してNextをクリック。
Project NameをBluPillTest02としてFinishをクリック。もちろん他の名前でもいいです。
前回同様、PC13でGPIO_Outputを選択。
Clock Configurationタブをクリック。AHB Prescalerを1/128に変更。これによりAPB1をはじめ出力周波数が62.5KHzに変更されました。
割り込みの周期を、とりあえず1秒にしようと思います。
汎用タイマTIM3を使います。
Pinout & Configurationタブをクリックし、ModeでInternal Clockをチェック、Parameter SettingsでCounter Periodに62500-1をセット。ゼロから始まるのでマイナス1とします。
NVICSetteingでTIM3 global interruptのEnableにチェック。Ctrl-sでこの設定が反映されたソースコードが生成されます。
static int flag = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim == &htim3){
if (flag == 0){
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
flag = 1;
}
else{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
flag = 0;
}
}
}
上のように割り込みルーチンを追加します。
[php] HAL_TIM_Base_Start_IT(&htim3);[/php]
timer interruptをイネイブルにします。
虫のようなアイコンのところでDebug Configurationを選択。前回同様の設定をし、今回ではBluPillTest02 Debug.cfgという名前のファイルに関して前回同様修正(source [find target/cs32f1x.cfg]に変更)を行い、Reloadをクリックした後Debugをクリック。
黄色と緑のアイコンをクリックしてスタート。
LEDが1秒間隔で点滅しました。
念のためカウンタの周期を半分にして、再度BuildをしてLEDの周期が変わるか確認します。
周期が0.5秒に変わりました。