2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
このコンテンツは以下に基づいていますJiangxie Technology STM32 ビデオ内容が整理されています。
タイプ | シリアルナンバー | バス | 関数 |
---|---|---|---|
アドバンストタイマー | ティム1、ティム8 | APB2 | 一般的なタイマの機能をすべて備え、さらに繰り返しカウンタ、不感帯生成、相補出力、ブレーキ入力などの機能を備えています。 |
ユニバーサルタイマー | ティム2、ティム3、ティム4、ティム5 | APB1 | 基本的なタイマの機能をすべて備えており、内部および外部クロック ソースの選択、インプット キャプチャ、出力比較、エンコーダ インターフェイス、マスター/スレーブ トリガ モードなどの追加機能もあります。 |
基本タイマー | ティム6、ティム7 | APB1 | スケジュール割り込み機能とマスターモードトリガDAC機能を搭載 |
主な機能:
プリスケーラ PSC
基準カウントクロックの入力はプリスケーラーの前に接続されます。基本タイマは内部クロックしか選択できないため、プリスケーラの入力線は内部クロック(CK_INT)に接続されていると考えることができます。
内部クロックのソースは RCC の TIMxCLK です。ここでの周波数値は通常、システムのメイン周波数の 72MHz です。
プリスケーラに 0 を書き込むと分周しないことを意味し、1 を書き込むと周波数を 2 で分周することを意味し、出力周波数 = 入力周波数 / 2 = 36MHz となります。
2 と書くと 3 で割ることを意味し、出力 = 入力 / 3 になります。したがって、プリスケーラの値は実際の分周係数と1異なり、実際の分周係数=プリスケーラの値1となります。プリスケーラは 16 ビットなので、最大値は 65535 を 65536 で割った値として書き込むことができます。
カウンターCNT
カウンタは、あらかじめ分周された計数クロックをカウントすることができ、計数クロックが立ち上がりエッジになるたびにカウンタ値が 1 ずつ増加します。カウンタも 16 ビットなので、内部の値は 0 ~ 65535 まで加算できます。さらに追加すると、カウンターは 0 に戻り、再び開始されます。したがって、カウント処理中にカウンタの値は増加し続け、その増加量が目標値に達すると、割り込みが生成され、スケジュールされたタスクが完了します。したがって、ターゲット値を格納するレジスタが必要になります。これが自動リロード レジスタです。
自動リロードレジスタ
オートリロードレジスタも16ビットであり、書き込むカウント対象を格納します。実行プロセス中、カウント値は増加し続け、自動リロード値は固定目標であり、カウント値が自動リロード値と等しくなったときにタイムアップします。その後、割り込み信号が生成され、カウンタがクリアされ、カウンタは自動的に次のカウント時間を開始します。
U および UI 矢印
図中に描かれている上向きの割引矢印は、ここで割り込み信号が発生することを意味します。このようなカウント値が自動リロード値と等しい割り込みを一般に「更新割り込み」と呼びます。この更新割り込みは NVIC につながります。NVIC のタイマー チャネルを設定すると、タイマーの更新割り込みが CPU によって応答されます。下向きの矢印はイベントが発生することを表しており、ここでは対応するイベントを「更新イベント」と呼びます。更新イベントは割り込みをトリガーしませんが、他の内部回路の動作をトリガーする可能性があります。
主な機能:
16ビットアップ、ダウン、アップ/アップ自動リロードアキュムレータカウンター
16 ビットのプログラマブル プリスケーラー。入力クロックを 1 ~ 65536 の任意の値で分周するために使用されます。
4つの独立したチャンネル:
外部信号を使用してタイマーとタイマー相互接続を制御する同期回路
割り込み/DMA は、次のイベントが発生したときに生成されます。
位置決め用のインクリメンタル (直角位相) エンコーダおよびホール センサー回路をサポート
外部クロックとしてのトリガー入力またはサイクルごとの電流管理
CNTカウンター
CNTカウンターはアップカウントモード、ダウンカウントモード、センターアライメントモードをサポートしています。ダウンカウントモードはリロード値から開始し、0まで減少した後、リロード値に戻り割り込みがかかります。中央揃えモードは 0 から開始し、最初に上向きにインクリメントし、リロード値をカウントして割り込みを適用し、次に下向きに 0 までデクリメントしてから割り込みを適用します。
クロックソース
一般タイマのクロックソースは内部72MHzクロックだけでなく、外部クロックも選択できます。
(1)最初の外部クロックは次のとおりです。TIMx_ETR ピンの外部クロックつまり、外部方形波クロックを TIM2、PA0 の ETR ピンに接続し、内部極性選択、エッジ検出、プリスケーラー回路、および入力フィルター回路を構成できます。確かな造形。外部ピンクロックであるため、必然的にグリッチが発生するため、これらの回路は入力波形をフィルタリングできます。フィルタリングされた信号は 2 つのチャネルに分割され、上部の ETRF チャネルがトリガ コントローラに入力され、クロックがタイム ベース ユニットとして選択されます。この道は「」とも呼ばれます。外部クロックモード2”。
(2) TRGI は外部クロックも提供できます。 、主にトリガー入力として使用され、このトリガー入力はタイマーのスレーブ モードをトリガーできます。 TRGI が外部クロックとして使用される場合、このパスは「」と呼ばれます。外部クロックモード1"。このパスを通過する外部クロックは何ですか? 1 つ目は ETR ピンの信号です。2 つ目は ITR 信号です。クロック信号のこの部分は他のタイマーから来ます。マスター モードの TRGO は次のような問題を引き起こす可能性があります。他のタイマに接続する場合、他の 4 つのタイマの TRGO 出力からの ITR0 ~ ITR3 ピンに接続され、ここでインプット キャプチャ ユニットに接続される TI1F_ED を選択することもできます。 CH1 ピン、つまりクロックは CH1 ピンから取得されます。ここでの ED (エッジ) はエッジを意味します。TI1FP1 は CH1 ピンに接続されているクロックであり、TI2FP2 は TI2FP2 に接続されています。 CH2 クロック。
概要: 外部クロック モード 1 への入力は、ETR ピン、他のタイマ、CH1 ピンのエッジ、CH1 ピン、および CH2 ピンにすることができます。
出力比較回路
右下の出力比較回路はCH1~CH4の端子に対応して計4チャンネルあり、PWM波形の出力やモーターの駆動に使用できます。
インプットキャプチャ回路
左側はインプットキャプチャ回路で、これもCH1~CH4端子に対応する4チャンネルがあり、入力方形波の周波数測定などに使用できます。
キャプチャ/比較レジスタ
中央のレジスタはキャプチャ/コンペア レジスタで、インプット キャプチャ回路とアウトプット コンペア回路で共有されます。インプット キャプチャとアウトプット コンペアは同時に使用できないため、ここのレジスタは共有され、ピンも共有されます。
主な機能:
リピートカウンター
一般的なタイマーとの違い: 1 つ目は、割り込みが適用される繰り返しカウンターを追加することで、更新イベントと更新割り込みが数カウント サイクルごとにのみ発生することを実現できます。元の構造では、各カウント サイクルが完了した後に更新が発生します。これは、出力更新信号を再度分割することに相当します。
DTG デッドバンド ジェネレーターと相補出力
以下はアドバンストタイマによる出力比較モジュールのバージョンアップです。DTG(デッドタイムジェネレート)はデッドゾーン生成回路です。右側の出力ピンは、元の 1 つから 2 つの相補出力に変更されており、一対の相補 PWM 波を出力できます。これらの回路は、クアッドコプター航空機や電動モーターの後輪などの 3 相ブラシレス モーターを駆動するために使用されます。車や電気ドリル、もしかしたら三相ブラシレスモーターかもしれません。三相ブラシレスモーターの駆動回路には通常3本のブリッジアームが必要となるため、各ブリッジアームは2本の高出力スイッチング管で制御され、合計6本の高出力スイッチング管が必要となります。したがって、ここでの最初の 3 つの出力 PWM ピンは相補出力になります。また、相補出力PWMでブリッジアームを駆動する際のスイッチング瞬間におけるデバイスの欠陥に起因する短時間のシュートスルー現象を防止するため、前段にデッドゾーン生成回路を追加しています。スイッチが切り替わった瞬間に一定時間の不感帯が発生し、ブリッジアームの上下のチューブがオフになり、貫通を防止します。
ブレーキ入力
最後の部分はブレーキ入力機能で、モーター駆動の安全性を保証します。外部端子BKIN(Break IN)からブレーキ信号が発生したり、内部クロックが狂い故障が発生した場合には、制御回路が自動的にモーターの出力を遮断し、事故を防止します。
動作制御: スタートとストップ、カウントアップまたはカウントダウンなど、レジスタ内の一部のビットを制御します。
右側は、タイミング時間が経過し、更新割り込みが生成された後に信号が送信される場所です。アドバンスト タイマーの場合は、追加のリピート カウンタが存在します。割り込み信号はまずステータス レジスタの割り込みフラグ ビットを設定し、このフラグ ビットは割り込み出力を通じて制御され、NVIC に割り込みを適用します。割り込み出力制御は、割り込み出力の有効化ビットです。割り込みが必要な場合は、必ず許可してください。
オートローディングレジスタがFFから36に変更され、カウント値の目標値もFFから36に変更されているため、ここで36をカウントした後、そのまま更新されて次のカウントが開始されます。
カウント途中でカウント目標値をF5から36に変更します。以下にシャドウ レジスタがあります。このシャドウ レジスタはまだ F5 なので、カウント対象は引き続き F5 までカウントされ、同時に変更される 36 がシャドウに渡されます。この変更は、サイクルが 36 の場合にのみ有効です。そのため、シャドウ レジスタを導入する目的は実際には同期です。つまり、値の変更と更新イベントを同期して発生させ、変更によるエラーを防ぐことができます。動作中に。
クロックソース
クロック生成回路には 4 つの発振源があります。
(1) HSI: 内部 8MHz 高速 RC 発振器。
(2) HSE: 外部 4 ~ 16MHz の高速水晶発振器 (水晶発振器とも呼ばれます) は、通常 8MHz に接続されます。
(3) LSE: 外部 32.768KHz 低速水晶発振器。通常、RTC にクロックを提供します。
(4) LSI: 最後に、ウォッチドッグにクロックを供給できる内部 40KHz 低速 RC 発振器があります。
上記の 2 つの高速水晶発振器は、システム クロックを提供するために使用されます。AHB、APB2、および APB1 のクロックはすべて、これら 2 つの高速水晶発振器から得られます。これは、外部水晶発振器よりも安定しているというだけです。内部 RC 発振器を使用するため、通常は外部水晶発振器を使用します。
ST コンフィギュレーション クロック
SystemInit 関数では、ST がクロックを設定します。まず、内部クロック HSI を開始し、システム クロックとして内部 8MHz を選択し、内部 8MHz クロックで一時的に実行します。次に、外部クロックを開始し、周波数逓倍のために PLL フェーズ ロック ループに入るように外部クロックを設定します。8MHz が 9 倍になり、フェーズ ロック ループの出力が安定した後、フェーズ ロック ループを選択します。をシステムクロックとして出力し、システムクロックを8MHzから72MHzに切り替えました。
CSSクロックセキュリティシステム
CSS (クロック セキュリティ システム): クロック セキュリティ システムは、外部クロックの実行ステータスを監視し、動作を保証するために自動的に外部クロックを内部クロックに切り替えます。システムクロックを調整し、事故によるプログラムのスタック死を防ぎます。
クロック分配回路
*2
次に右側では、タイマー 2 ~ 7 に対して個別に開きます。ここでのプリスケーラー係数は 2 であるため、ここでの周波数は次のようにする必要があります。*2
, したがって、タイマー 2 ~ 7 につながるクロックは 72MHz です。したがって、アドバンストタイマ、一般タイマ、ベーシックタイマのいずれにおいても、内部基準クロックは72MHzとなります。*2
。分周係数が 1 なので、タイマ 1 と 8 のクロックは 72MHz になります。// 恢复缺省配置
void TIM_DeInit(TIM_TypeDef* TIMx);
// 时基单元初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 结构体变量赋一个默认值
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 使能计数器---运行控制
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
// 使能中断输出---中断输出控制
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
/*-----------------时基单元的时钟选择---------*/
// 选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
// 选择ITRx其他定时器的时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
// 选择TIx捕获通道的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
uint16_t TIM_ICPolarity, uint16_t ICFilter);
// 选择ETR通过外部时钟模式1输入的时钟
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 选择ETR通过外部时钟模式2输入的时钟
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,
uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
/*--------------------------------------------------------*/
// 不是用来选择时钟的,单独用来配置ETR引脚的预分频器、极性、滤波参数的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 用来单独写预分频值的
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
// 用来改变计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
// 自动重装器预装功能配置
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
// 给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
// 给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
// 获取当前计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
// 获取当前的预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
/*-------------获取标志位和清除标志位的------------*/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);