初期化
他のすべてのペリフェラルと同様に、このタイマーも使用する前に初期化する必要があります。そして前のセクションと同様に、初期化には 2 つの手順が含まれます。まずタイマーの電源を入れ、その後で設定を行います。
タイマーの電源を入れるのは簡単です。TIM6EN ビットを 1 に設定するだけです。このビットは RCC レジスタブロックの APB1ENR レジスタ内にあります。
#![allow(unused)]
fn main() {
// TIM6 タイマーの電源を入れる
rcc.apb1enr.modify(|_, w| w.tim6en().set_bit());
}
設定の部分は少しだけ複雑です。
まず、タイマーがワンパルスモードで動作するように設定する必要があります。
#![allow(unused)]
fn main() {
// OPM ワンパルスモードを選択
// CEN ひとまずカウンターは無効のままにしておく
tim6.cr1.write(|w| w.opm().set_bit().cen().clear_bit());
}
次に、delay 関数は引数としてミリ秒単位の値を取るため、CNT カウンターを 1 KHz の周波数で動作させたいと考えます。1 KHz であれば周期は 1 ミリ秒になります。そのためにはプリスケーラを設定する必要があります。
#![allow(unused)]
fn main() {
// カウンターが 1 KHz で動作するようにプリスケーラを設定する
tim6.psc.write(|w| w.psc().bits(psc));
}
プリスケーラ psc の値は、自分で求めてみてください。カウンターの周波数は apb1 / (psc + 1) であり、apb1 は 8 MHz であることを思い出してください。