ONE SHOTを、TIM1/TIM2/TIM3/TIM4 でやる方法を比較する
これが必要とされる場面はあまり多くないとは思いますが、これも主要なタイマ機能の一つですから、解説しておきます.
ワンショットとかモノマルチと呼ばれる機能で、汎用ロジックICでは74HC123で実現されることの多い機能です.
トリガにpositiveエッジが生じると、出力がただちにHIGHになります.
そのpositiveエッジから起算して、一定の時間長後に出力がLOWになります.
これがワンショットの動作です.
普通の発振回路と違うのは、1トリガあたり1パルスしか出ないことです.
こちらのページでは、TIM1をつかってワンショット動作をさせましたが、TIM2,TIM3,TIM4でもワンショット動作をさせられるのでしょうか?
結論は、TIM2,TIM3,TIM4ともに、ワンショット動作はできそうにないです.
なぜか?
下記のソースコードはTIM1をワンショット動作させるための設定のキモのところです.
TIM1_DeInit();
TIM1_TimeBaseInit( 1599, TIM1_COUNTERMODE_UP, 2999, 0 ); // 16MHz/1600/3000=3.33Hz
TIM1_SelectInputTrigger( TIM1_TS_TI2FP2 ); // TS=110
TIM1_SelectSlaveMode( TIM1_SLAVEMODE_TRIGGER ); // SMS=110
TIM1_SelectOnePulseMode( TIM1_OPMODE_SINGLE ); // OPM=1
TIM1_OC1Init( TIM1_OCMODE_PWM2,
TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 1000,
TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET,
TIM1_OCNIDLESTATE_SET ); // TIM1_CH1 output port
TIM1_Cmd(ENABLE);
TIM1_CtrlPWMOutputs(ENABLE);
これと同等のことをTIM2のライブラリ関数で記述しようとしますと、赤字の関数が存在しません.
関数を作ればよいかというとそうでもなくて、カウンタをスレーブモードにするためのTIM2_SMCRというレジスタがないので、上記のコメントにあるTS=110であるとかSMS=110という設定もできません.
そういった理由により、TIM2ではワンショット動作はできそうにないです.
TIM2よりも機能の劣るTIM3やTIM4でも同様にワンショット動作はできないと思われます.