2016-08-11 13 views
0

私はNucleo STM32L031を使用しています。私のアプリケーションでは、タイマーと比較値を使って割り込みを生成したいと思います。 私の問題は次のとおりです。タイマーを開始してから一時停止したいので(カウンター値は停止しますがリセットされません)、タイマーを(停止値から)もう一度開始します。そして、比較された値に達すると、割り込みを生成します。STM32L0:休止タイマー?

カウンタの値をリセットせずにタイマーを一時停止するにはどうすればよいですか? また、私は確信していません:HAL_TIM_BASE_Stop_IT()関数は、カウンタ値を一時停止またはリセットしますか?

ありがとうございました。 ビエン

答えて

2

最低でも2つの方法があり:

最初は、タイマは、それが再構成して使用することができ、このように一時停止したときに、/ CR1レジスタのCENビットをリセットする設定されている(私は再構成については、これを言うことができません)HAL機能を通じて

htimX.Instance->CR1 &= ~TIM_CR1_CEN; // pause tim 
htimX.Instance->CR1 |= TIM_CR1_CEN; // resume tim 

タイマーは、それが再構成することはできませんので、クロックさが、1つの事前に

省電力で存在していないこの方法を一時停止したゲート/ ungateティム・クロックであり、
__HAL_RCC_TIMx_CLK_ENABLE(); // pause tim 
__HAL_RCC_TIMx_CLK_DISABLE(); // resume tim 
+1

RCCを介してゲートされたクロックでは、カウントを含むタイマーレジスタにアクセスすることはできません。クロックゲーテッド周辺デバイスのレジスタにアクセスしている場合、バスフォルトが発生する可能性があります。 – rjp

+0

助けてくれてありがとう@imbearr。 - 第1のアプローチ:希望のタイマーを選択することは可能だと思います。 - 第2のアプローチ:これらのHAL機能を使用する場合、すべてのタイマーのクロックを停止しますか?希望のタイマーだけを選択できますか? – bienle

+0

私は 'STM32F207'、' F091'、 'F411'で作業しました。 「STM8L051」、「L151」、およびこれらのMCU「RCC」レジスタのすべてについて、周辺インスタンスごとに1つのビットクロック制御を有する。だから、私はタイマークロックが欲しいと思うだけだと思う​​。とにかくMCUのリファレンスマニュアルを開き、RCC_APxxENRレジスタにどのようなビットが表示されているのか、 '__HAL_RCC_TIMx_CLK_ENABLE()'マクロの定義を開いてみることができます。 – imbearr