Basic timer (TIM6/TIM7)
見出しの通りベーシックなタイマである。
STの中では一番チープなタイマである。(つか他のが高機能かつ複雑怪奇w
- 16-bit オートリロードアップカウンタ
- 16-bit プログラマブルプリスケーラ(1-65535)
- Interrupt/DMA generation on the update event: counter overflow(カウンタのオーバーフローで割り込み又はDMAの生成)
要は単純に時間はかったりカウンタが一定値に達した時に割り込みリクエストできる機能があるというやつ。
主に思いつく使い方
- タクトスイッチの入力を一定間隔で見に行くことで簡単なチャタリング除去
- ADCと組み合わせて一定間隔でサンプリング値をUARTで送信とか
割り込みありきな使い方しか思いつかないが
エフェクターに使うとなるとタップテンポの感覚の計測とかかな・・・・・
使い方
さっそく使い方を見ていこう
今回はSTM32F303(Nucleo32から評価ボードが出てる)でやって行こうと思う
内容としては以下の感じ
- TIM6/TIM7両方使って別周期で割り込み
- 両方の割り込みハンドラ内でLEDをちかちかする。
いたって簡単だ。
次に割り込みとかの設定をしていくよ
終ったらジェネレートする。
Ac6での作業
こっからはほとんどすることない。
Mainに二行追加
stm32f3xx_it.cのハンドラ内にLチカ処理を書く
こっから先細かい解説
まあ単に動かしたい人はここは読まなくていいです。
読みたい人だけ読んで
プリスケーラについて
プリスケーラはなんというか分周器です。
これがないと速攻カウンタがオーバフローするので入ってくるクロックを遅くする役目を担っています。
今回の例を示すと
ここで9999は0を含めでなので10000
TimClockはSystemCoreClockから計算できるのでプリスケーラ値はSTのサンプルではこうなっています。
uwPrescalerValue = (uint32_t)((SystemCoreClock/ 2) / 10000) - 1;
というわけなんで1秒間で6400までカウントアップしてリロード値と一致するのでそこで割り込みがかかります。
参考文献
UM1786 UserManual
Description of STM32F3 HAL and Low Layer drivers
http://www.st.com/content/ccc/resource/technical/document/user_manual/a6/79/73/ae/6e/1c/44/14/DM00122016.pdf/files/DM00122016.pdf/jcr:content/translations/en.DM00122016.pdf