外付け水晶 |
16MHz |
fMASTER |
16MHz |
fCPU |
16MHz |
TIM1_ETR |
1MHz |
割り込み周期 |
projectによっていろいろ |
TIM1_IT_UPDATE | TIM1の割り込みが、カウンタがオーバーフローまたはゼロになった時に生じるように設定します |
TIM1_IT_CC1 | タイマは、カウンタの値と閾値とを比較することで様々なパルス信号を発生させることができます. TIM1には閾値比較回路をCC1〜CC4の4ヶ持っています. この引数は、TIM1の割り込みが、CC1の比較結果によって生じるように設定します. |
TIM1_IT_CC2 | TIM1の割り込みが、CC2の比較結果によって生じるように設定します |
TIM1_IT_CC3 | TIM1の割り込みが、CC3の比較結果によって生じるように設定します |
TIM1_IT_CC4 | TIM1の割り込みが、CC4の比較結果によって生じるように設定します |
TIM1_IT_CCUpdate | TIM1の割り込みが、比較回路が更新された時に生じるように設定します |
TIM1_IT_TRIGGER | TIM1の割り込みが、TIM1がトリガされた時に生じるように設定します |
TIM1_IT_BREAK | TIM1の割り込みが、BREAKがかかった時に生じるように設定します. BREAKについてはこちらですこし解説しています. |
project 名 |
TIM1_TimeBaseInit()の引数 | TIM1_ETRClockMode2Config()の引数 |
割り込み周期がどうなるか? またその理由は? |
test05 |
1599, TIM1_COUNTERMODE_UP, 5000, 0 |
callしない | 割り込み周期=0.5Sec 理由: ・16MHzが第1引数によって1/1600され10kHzになる. ・第2引数によってupカウントする. ・10kHzが第3引数によって5000カウントされるので2Hzになる. ・第4引数はゼロなので割り込みが間引かれることなく、0.5Sec周期で割り込みがかかる. |
test05b |
1599, TIM1_COUNTERMODE_DOWN, 5000, 0 |
callしない | 割り込み周期=0.5Sec 理由: test05と違うのはカウンタがダウンカウントするところだけ. |
test05c |
1599, TIM1_COUNTERMODE_CENTERALIGNED1, 5000, 0 |
callしない | 割り込み周期=0.5Sec 理由: test05と違うのはカウンタがup-downカウントするところだけ. ボトムとピークで割り込みがかかるので、割り込み周期は0.5Secで変わらない. |
なし |
1599, TIM1_COUNTERMODE_CENTERALIGNED2, 5000, 0 |
callしない | 割り込み周期=0.5Sec 理由: CENTERALIGNED2などの末尾の1と2と3の違いはなにか? 割り込みの細かい仕様に差違があるんだが、とても特殊な用途なので、説明は割愛します.末尾1だけ知っていればとりあえずOKです. |
なし |
1599, TIM1_COUNTERMODE_CENTERALIGNED3, 5000, 0 |
callしない | |
test05d |
159, TIM1_COUNTERMODE_UP, 10000, 4 |
callしない | 割り込み周期=0.5Sec 理由: ・16MHzが第1引数によって1/160され100kHzになる. ・第2引数によってupカウントする. ・100kHzが第3引数によって10000カウントされるので10Hzになる. ・第4引数は4なので割り込みが4回間引かれることで、都合0.5Sec周期で割り込みがかかる. こういう実現方法もあるのだと知っておこう. |
test05e |
159, TIM1_COUNTERMODE_UP, 10000, 0 |
callしない | 割り込み周期=0.1Sec 理由: test05dに似ているが、第4引数が0なので、0.1Sec周期で割り込みが発生する. 当然LEDのチカチカは高速になる. |
番外編 test05f |
159, TIM1_COUNTERMODE_UP, 10000, 0 |
callしない | 割り込み周期=0.1Sec 0.1Sec割り込みを受け付けるが、割り込みルーチンで10カウントすることで1秒周期のLED点滅を実現させようというプログラム.実際はこういう割り込みとプログラムの混ざった構造にすることが多いです. 具体的な実装は、cntという静的変数を新設し、0〜9までをぐるぐるとカウントさせています. cnt=0,1の時だけLEDをオンにし、その他ではLEDをオフにしています. なので、光り方が少し変わって見えます. |
test05g |
9, TIM1_COUNTERMODE_UP, 10000, 0 |
TIM1_EXTTRGPSC_OFF, TIM1_EXTTRGPOLARITY_NONINVERTED, 0 |
割り込み周期=0.1Sec 理由: ・TIM1_ETRClockMode2Config()をcallしたので、外部ピンTIM1_ETRをクロックとして利用する. ・TIM1_ETRには1MHzが入力されているとする. ・1MHzが第1引数により1/10にされ100kHzになる. ・第2引数によってupカウントする. ・100kHzが第3引数によって10000カウントされるので10Hzになる. ・第4引数はゼロなので割り込みが間引かれることなく、0.1Sec周期で割り込みがかかる. |
project 名 |
TIM1_TimeBaseInit()の引数 | TIM1_ETRClockMode2Config()の引数 |
割り込み周期がどうなるか? またその理由は? |
第1引数 | クロックの分周比を設定する | 1〜65535 |
第2引数 | カウントモードを設定する | TIM1_COUNTERMODE_UP TIM1_COUNTERMODE_DOWN TIM1_COUNTERMODE_CENTERALIGNED1 TIM1_COUNTERMODE_CENTERALIGNED2 TIM1_COUNTERMODE_CENTERALIGNED3 |
第3引数 | カウンタが0〜N-1までカウントするように設定する | 1〜65535 |
第4引数 | 割込の間引き数を設定する | 0〜255 |
第1引数 |
外部ピンTIM1_ETRの分周比を設定 |
TIM1_EXTTRGPSC_OFF TIM1_EXTTRGPSC_DIV2 TIM1_EXTTRGPSC_DIV4 TIM1_EXTTRGPSC_DIV8 |
第2引数 |
外部ピンTIM1_ETRの極性を設定 |
TIM1_EXTTRGPOLARITY_INVERTED TIM1_EXTTRGPOLARITY_NONINVERTED |
第3引数 |
外部ピンTIM1_ETRにノイズが多いと誤動作する可能性があるのは言うまでもない. そこで、フィルタを入れる場合にこの引数で設定する. 0=フィルタなし 1〜15=フィルタあり 外部ピンTIM1_ETRをクロックとして使う場合は0であるべきだろう. 外部ピンTIM1_ETRをトリガ信号として使う場合には、1〜15の値を設定してもよい. |
0: フィルタなし 1: fMASTERで2クロック後に再チェック 2: fMASTERで4クロック後に再チェック 3: fMASTERで8クロック後に再チェック 4: fMASTER/2で6クロック後に再チェック 5: fMASTER/2で8クロック後に再チェック 6: fMASTER/4で6クロック後に再チェック 7: fMASTER/4で8クロック後に再チェック 8: fMASTER/8で6クロック後に再チェック 9: fMASTER/8で8クロック後に再チェック 10: fMASTER/16で5クロック後に再チェック 11: fMASTER/16で6クロック後に再チェック 12: fMASTER/16で8クロック後に再チェック 13: fMASTER/32で5クロック後に再チェック 14: fMASTER/32で6クロック後に再チェック 15: fMASTER/32で8クロック後に再チェック |