STM32のタイマ
出典: Wikimura
目次 |
TIM_OCInitTypeDef構造体
Standard Peripheral Libraryのヘルプで説明が少なすぎたので、ソースコードを読んだ結果をまとめます。 ここではタイマに付属するアウトプットコンペアの初期化構造体について取り扱います。
TIM_OCMode
タイマxのCapture/Compare モードレジスタy(TIMx_CCMRy)のビット6..4「Output Compareモード」を設定する。
ここでの設定は、OCyとOCyNの基準となるOC1REF信号を、タイマカウンタ値(TIMx_CNT)と、コンペアレジスタ値(TIMx_CCRy)の関係がどんなときに、アクティブまたは非アクティブにするかを決定する。 ちなみには、OC1REFはアクティブハイ...つまり正論理の信号。
出力信号のOCyとOCyNがアクティブハイか、アクティブローかは、CC1Pビット(TIMx_CCER)に依存する。 (つまりOCy = OC1REF か OCy = not OC1REF の2通りある)
- TIM_OCMode_Timing(0x0000): 凍結(変化しない)
- TIM_OCMode_Active(0x0010): カウント値が一致時にアクティブ
- TIM_OCMode_Inactive(0x0020): カウント値が一致時に非アクティブ
- TIM_OCMode_Toggle(0x0030): カウント値が一致時に反転
- TIM_OCMode_PWM1(0x0060): TIMx_CNT < TIMx_CCRyであるときアクティブ、それ以外は非アクティブ
- TIM_OCMode_PWM2(0x0070): TIMx_CNT < TIMx_CCRyであるとき非アクティブ、それ以外はアクティブ
TIM_OCPolarity
Capture Compare Enable RegisterのCCyPレジスタでOCyピンの極性を設定する。反転出力についてはTIM1,8にしか付いていない。
- TIM_OCPolarity_High(0x0000): アクティブハイ(OCy = OCyREF)
- TIM_OCPolarity_Low(0x0002): アクティブロー (OCy = not OCyREF)
TIM_OutputState
TIMx_CCERレジスタのCCyEビットを操作して、キャプチャコンペア信号を有効化するかを決める。 反転出力についてはTIM1,8にしか付いていない。 CCyチャネルが入力の時は、キャプチャを有効化するかの設定になる。 CCyチャネルが出力の時は、OCy信号を出力するかの設定になる。
チャネル番号は、TIM_OCyInit関数で関数名に入っている番号で決まる。
- TIM_OutputState_Disable(0x0000): 無効化
- TIM_OutputState_Enable(0x0001): 有効化
TIM_Pulse
TIMx_CCRyレジスタの値を設定する。
- CCyチャネルが出力の時: コンペアレジスタにロードされる値。シャドーレジスタにロードされると、タイマカウンタと比較される。
- CCyチャネルが入力の時: 最近のInput Captureでキャプチャされたカウンタの値。
その他
高機能タイマのTIM1と8でしか付いていない機能。今回は使わないので今後調べます。
- TIM_OCIdleState
- TIM_OCNIdleState
- TIM_OCNPolarity
- TIM_OutputNState
補足
- アウトプットコンペア/出力比較/Output Compare
- カウント値とコンペアレジスタ(CCR)の値を比較して、イベント(割り込みやDMA要求の元)を出力したり、外部へパルスを出力する機能。
- インプットキャプチャ/入力キャプチャ/Input Capture
- 設定したトリガが発生すると、その時点でのカウント値をキャプチャレジスタへ格納する機能。
- キャプチャレジスタ/コンペアレジスタ
- カウンタと同じビット数のレジスタ。どちらも同じレジスタだが、キャプチャで使うときはキャプチャレジスタ、コンペアで使うときはコンペアレジスタと言っているだけ。
- カウンタ
- タイマがクロック毎に数え上げていくレジスタのこと。
OutputCompare系関数
(一部)
| TIM_OCyInit | 指定した初期化構造体を使ってチャネルyのアウトプットコンペアを初期化する。対象はTIM1,2,3,4,5,8。 |
| TIM_OCyPreloadConfig | チャネルyのキャプチャ/コンペアレジスタ(CCRy)のプリロードを有効化・無効化する。無効化された場合、CCRレジスタの値が即反映される。有効化した場合、次の更新イベント(UEV)で反映される。 |
| TIM_OCyPolarityConfig | チャネルyのOCyピンの極性を、アクティブハイ・アクティブローから設定する。 |
| TIM_OCyFastConfig | チャネルyの高速イネーブル機能?を有効化・無効化する。 |
| TIM_OCStructInit | TIM_OCinitStructのメンバをデフォルト値で埋める。 |

