この記事はMbed Advent Calendar 2017の19日目の記事です。
目的
mbedベースでお手軽に開発しつつ、痒い所だけ本気出して底からコード書くようなスタイルが好みです。ただしそのとき問題になるのが、mbedライブラリがどういうリソースの使い方をしているかという点です。今回は、Nucleo-F446REのタイマリソースの使用状況を調査しました。
STM32F446REのタイマ
Nucleo-F446REに搭載されているSTM32F446REには、TIM1〜TIM14の14本のタイマがあります。各タイマの仕様はハードウェアマニュアルを読んで確認しましょう。
- TIM1,8 : 16bit高機能制御タイマ (いちばん高機能)
- TIM2,5 : 32bit汎用タイマ
- TIM3,4 : 16bit汎用タイマ
- TIM9〜14 : 16bit汎用タイマ (TIM2〜5より少しショボい)
- TIM6,7 : 16bit基本タイマ (いちばんショボい)
mbed-srcのソースの取得
まずはmbedライブラリのソースを取得します。mbedライブラリのソースはmbed-srcという名前で公開されています。
ここで「Export to desktop IDE」をクリックし、「Choose board」で「NUCLEO-F446RE」を選択し、「Choose toolchain」で適当な開発環境(Sw4STM32とか)を選択し、「Export」をクリックするとソース一式がダウンロードできます。
ticker用のタイマ
mbedのTimerクラスやTikerクラスなどの時間の基準にはTIM5が使われています。
ソースは↓
mbed-src/targets/hal/TARGET_STM/TARGET_STM32F4/us_ticker.c
PWM用のタイマ
mbedのPwmOutクラスのPWM生成にはTIM1〜4が使われています。
ソースは↓
mbed-src/targets/hal/TARGET_STM/TARGET_STM32F4/
TARGET_NUCLEO_F446RE/PeripheralPins.c
細かく言うと、Nucleo-F446REのPinoutでPWMx/yと表記されているピンはTIMxのCHyを使います。例えば、PA_0ピンはPWM2/1と表記されているのでTIM2のCH1を使います。
オレオレ用のタイマ
以上より、オレオレ実装でSTM32F446REのタイマを直接使うならTIM1〜5を避けてTIM6〜14を使うのが無難でしょう。TIM6〜14の中でいちばん高機能なのはTIM8です。PWM用に使われているTIM1〜4はどれも高機能なタイマなので、どうしても使いたい場合は対応するピンのPWMを使わないようにしましょう。
しらんけど。