Nucleo/mbedのタイマリソースの調査

この記事は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を使わないようにしましょう。


しらんけど。