STM32のタイマはじめに
高度なタイマーの様々なへのSTM32タイマー、汎用タイマ、基本的なタイマー
主な機能 | アドバンストタイマ | 汎用タイマ | 基本的なタイマー |
---|---|---|---|
内部クロック・ソース | それはあります | それはあります | それはあります |
カウント方向 | アップ、ダウン、双方向 | アップ、ダウン、双方向 | 向上 |
外部イベント・カウント | それはあります | それはあります | ノー |
四つの独立したチャネル | それはあります | それはあります | ノー |
さらに、3つの特殊なタイマー:独立したウォッチドッグタイマ、ウォッチドッグタイマウィンドウ、システムタイマーティック(のCortex-MXはのSysTickタイマー内に統合)
計数モード
1.アップカウントモード:CMSは、コントロールに等しいTIMx_CR1レジスタ00、DIR = 0アップカウントモードが選択されています。カウンタのアップカウントモードは、オーバーフロー・カウンタのカウント値がタイムアウト時間を生成するとき、(TIMx_ARRカウンタの)自動ゼロ負荷値までカウントします。同時に、更新イベントを生成します。UG TIMx_EGRは、ビット・レジスタ、および更新イベントを提供します。
2.ダウンカウントモード:CMSはTIMx_CR1 00、選択されたDIR = 1つのダウンカウントモード制御レジスタに等しいです。ダウンカウントモード、カウンタ開始する(カウンタの値がロードされTIMx_ARR値)を0にロードされた値からダウンカウントし、更新イベントが、ダウン再び自動カウントからロードされた値。UG TIMx_EGRは、ビット・レジスタ、および更新イベントを提供します。
3.センターアラインモード(アップカウントモードダウン):カウンタ-1 0からの値にカウントを開始自動的にロードされ、カウンタのオーバーフローイベントを生成し、次いで1までカウントし、カウンタのオーバーフローイベントを生成し、そして0から再びカウントを開始。
ライブラリ関数の開発において、以下の機能選択で選択することができます。
TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up;//例如计数模式选择向上计数模式
汎用タイマプロセスの使用
1.設定割り込み
異なるタイマーに応じて選択したチャンネルの割り込み注意。別のタイマーは異なる割り込みチャンネルを選択する必要があります別のタイマーの割り込み要求異なるが生成されるため。コードは以下の通りです
NVIC_InitStructure.NVIC_IRQChannel =
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =
NVIC_InitStructure.NVIC_IRQChannelSubPriority =
NVIC_InitStructure.NVIC_IRQChannelCmd =
NVIC_Init(&NVIC_InitStructure);
2.タイマ割り込みの設定
STM32F103はAPB2、タイマーおよびその他の基本的なタイマーが使用APB1バスを利用した制御タイマーを進めました。1から65536分裂の間の任意の値でプリスケーラカウンタクロック周波数。これは、16ビットの制御は、16ビット・カウンタ・レジスタ(TIMx_PSCレジスタ内に)いずれかに基づいています。バッファ付きコントロール・レジスタなので、それは実行時に変更することができます。イベントが来たときに新しいパラメータプリスケーラ次回の更新が採用されています。:12からプリスケール変更したとき
、プリスケーラが4から1になります。
注:あなたはフラグビットと割り込みソースTIMを有効に割り込みベースセットの完了後にクリアする必要があります。
TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStrue.TIM_Period=arr; //设置自动装载值
TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //设置预分频系数
TIM_TimeBaseInitStrue.TIM_RepetitionCounter=
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //清除中断标志位
割り込みサービスルーチン:
void TIM3_IRQHandler(void)//该函数原型在启动文件中
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update))
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除定时中断标志
}
}
関連式(72MHzのシステムクロックがケースです):
TIM_Period *(TIM_Prescaler + 1)/ 7200万
ここでカウント値TIM_Period、プリスケーラのTIM_Prescaler
限られた希望の批判のレベルでは。