Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

初期化

他のすべてのペリフェラルと同様に、このタイマーも使用する前に初期化する必要があります。そして前のセクションと同様に、初期化には 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 であることを思い出してください。