2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Dieser Inhalt basiert aufJiangxie Technology STM32-VideoInhaltlich, organisiert.
Typ | Seriennummer | Bus | Funktion |
---|---|---|---|
Erweiterter Timer | TIM1, TIM8 | APB2 | Es verfügt über alle Funktionen eines allgemeinen Timers und zusätzlich über die Funktionen Wiederholungszähler, Totzonengenerierung, Komplementärausgang, Bremseingang usw. |
Universeller Timer | TIM2, TIM3, TIM4, TIM5 | APB1 | Er verfügt über alle Funktionen eines einfachen Timers und verfügt über zusätzliche Funktionen wie interne und externe Taktquellenauswahl, Eingangserfassung, Ausgangsvergleich, Encoder-Schnittstelle, Master-Slave-Triggermodus usw. |
grundlegender Timer | TIM6, TIM7 | APB1 | Verfügt über die Funktionen eines geplanten Interrupts und eines Master-Modus-auslösenden DAC |
Die Hauptfunktion:
Vorteiler PSC
Der Eingang des Referenzzähltakts ist vor dem Vorteiler angeschlossen. Da der Basis-Timer nur die interne Uhr auswählen kann, kann davon ausgegangen werden, dass die Eingangsleitung des Vorteilers mit der internen Uhr (CK_INT) verbunden ist.
Die Quelle des internen Takts ist TIMxCLK von RCC. Der Frequenzwert ist hier im Allgemeinen die Hauptfrequenz des Systems von 72 MHz.
Das Schreiben von 0 im Vorteiler bedeutet keine Frequenzteilung; das Schreiben von 1 bedeutet, dass die Frequenz durch 2 geteilt wird und die Ausgangsfrequenz = Eingangsfrequenz/2 = 36 MHz ist.
Das Schreiben von 2 bedeutet Division durch 3 und Ausgabe = Eingabe/3. Daher unterscheidet sich der Wert des Vorteilers um 1 vom tatsächlichen Frequenzteilungskoeffizienten, und der tatsächliche Frequenzteilungskoeffizient = der Wert des Vorteilers 1. Der Vorteiler beträgt 16 Bit, daher kann der Maximalwert als 65535 geschrieben werden, der durch 65536 geteilt wird.
Zähler CNT
Der Zähler kann den vorgeteilten Zähltakt zählen. Mit jeder steigenden Flanke des Zähltakts erhöht sich der Zählerwert um 1. Der Zähler besteht ebenfalls aus 16 Bit, sodass der darin enthaltene Wert von 0 bis 65535 addiert werden kann. Werden weitere hinzugefügt, geht der Zähler auf 0 zurück und beginnt von vorne. Daher wird der Wert des Zählers während des Zählvorgangs weiter erhöht. Wenn die Erhöhung den Zielwert erreicht, wird ein Interrupt generiert und die geplante Aufgabe wird abgeschlossen. Daher ist ein Register zum Speichern des Zielwerts erforderlich, bei dem es sich um das automatische Neuladeregister handelt.
Automatisches Nachladeregister
Das Auto-Reload-Register hat ebenfalls 16 Bit und speichert das zu schreibende Zählziel. Während des laufenden Prozesses erhöht sich der Zählwert weiter und der automatische Nachladewert ist ein festes Ziel. Wenn der Zählwert dem automatischen Nachladewert entspricht, ist die Zeit abgelaufen. Dann wird ein Interrupt-Signal generiert, der Zähler gelöscht und der Zähler startet automatisch die nächste Zählzeit.
U- und UI-Pfeile
Ein auf dem Bild gezeichneter Abschlagspfeil nach oben bedeutet, dass hier ein Interrupt-Signal erzeugt wird. Ein solcher Interrupt, dessen Zählwert dem automatischen Neuladewert entspricht, wird im Allgemeinen als „Update-Interrupt“ bezeichnet. Dieser Update-Interrupt führt zum NVIC. Sobald wir den Timer-Kanal des NVIC konfiguriert haben, reagiert die CPU auf den Update-Interrupt des Timers. Der Abwärtspfeil stellt dar, dass ein Ereignis generiert wird. Das entsprechende Ereignis wird hier als „Aktualisierungsereignis“ bezeichnet. Aktualisierungsereignisse lösen keine Interrupts aus, können jedoch die Arbeit anderer interner Schaltkreise auslösen.
Die Hauptfunktion:
16-Bit-Aufwärts-, Abwärts-, Aufwärts-/Aufwärts-Akkumulatorzähler mit automatischer Neuladung
Programmierbarer 16-Bit-Vorteiler, der zum Teilen des Eingangstakts durch einen beliebigen Wert zwischen 1 und 65536 verwendet wird
4 unabhängige Kanäle:
Synchronisationsschaltungen, die Timer und Timer-Verbindungen mithilfe externer Signale steuern
Interrupt/DMA wird generiert, wenn die folgenden Ereignisse auftreten:
Unterstützt Inkremental-Encoder (Quadratur-Encoder) und Hall-Sensorschaltungen zur Positionierung
Triggereingang als externer Takt oder zyklusweises Strommanagement
CNT-Zähler
Der CNT-Zähler unterstützt den Aufwärtszählmodus, den Abwärtszählmodus und den Mittelausrichtungsmodus. Der Abwärtszählmodus beginnt mit dem Neuladewert und dekrementiert nach unten. Nachdem er auf 0 gesunken ist, kehrt er zum Neuladewert zurück und löst einen Interrupt aus. Der mittig ausgerichtete Modus beginnt bei 0, erhöht sich zuerst nach oben, zählt den Neuladewert und gilt für einen Interrupt, und dekrementiert dann nach unten auf 0 und gilt dann für einen Interrupt.
Taktquelle
Die Taktquelle des allgemeinen Timers kann nicht nur den internen 72-MHz-Takt, sondern auch einen externen Takt wählen.
(1)Die erste externe Uhr stammt vonExterner Takt am TIMx_ETR-Pin Das heißt, Sie können einen externen Rechteckwellentakt an den ETR-Pin von TIM2, PA0, anschließen und dann die interne Polaritätsauswahl, Flankenerkennung und Vorteilerschaltung sowie die Eingangsfilterschaltung konfigurieren bestimmte Formgebung. Da es sich um einen externen Pin-Takt handelt, kommt es zwangsläufig zu Störungen, sodass diese Schaltungen die Eingangswellenform filtern können. Das gefilterte Signal wird in zwei Kanäle aufgeteilt. Der obere ETRF-Kanal gelangt in den Trigger-Controller, und dann kann die Uhr als Zeitbasiseinheit ausgewählt werden. Diese Straße wird auch „Externer Taktmodus 2”。
(2) TRGI kann auch eine externe Uhr bereitstellen Wird hauptsächlich als Triggereingang verwendet. Dieser Triggereingang kann den Slave-Modus des Timers auslösen. Wenn TRGI als externe Uhr verwendet wird, heißt dieser Pfad „Externer Taktmodus 1". Welche externen Uhren passieren diesen Pfad? Der erste ist das Signal des ETR-Pins. Der zweite ist das ITR-Signal. Dieser Teil des Taktsignals kommt von anderen Timern. Der TRGO im Master-Modus kann dazu führen Bei der Verbindung mit anderen Timern erfolgt die Verbindung mit den ITR-Pins der anderen Timer. ITR0 bis ITR3 kommen von den TRGO-Ausgängen der anderen vier Timer. Sie können auch TI1F_ED wählen, das hier mit der Eingangserfassungseinheit verbunden ist. CH1-Pin, das heißt, der Takt wird vom CH1-Pin bezogen. Das Suffix ED (Edge) bedeutet hier Flanke. Es kann auch über TI1FP1 und TI2FP2 bezogen werden den CH2-Pin.
Zusammenfassung: Der Eingang zum externen Taktmodus 1 kann der ETR-Pin, andere Timer, die Flanke des CH1-Pins, der CH1-Pin und der CH2-Pin sein.
Ausgangsvergleichsschaltung
Der rechte Teil unten ist die Ausgangsvergleichsschaltung. Es gibt insgesamt vier Kanäle, die den Pins von CH1 bis CH4 entsprechen und zur Ausgabe von PWM-Wellenformen und zum Antrieb von Motoren verwendet werden können.
Eingangserfassungsschaltung
Auf der linken Seite befindet sich die Eingangserfassungsschaltung, die ebenfalls über vier Kanäle verfügt, entsprechend den Pins CH1 bis CH4, mit denen die Frequenz der Eingangsrechteckwelle usw. gemessen werden kann.
Erfassungs-/Vergleichsregister
Das mittlere Register ist das Erfassungs-/Vergleichsregister, das von den Eingangserfassungs- und Ausgangsvergleichsschaltungen gemeinsam genutzt wird. Da die Eingangserfassung und der Ausgangsvergleich nicht gleichzeitig verwendet werden können, werden die Register hier gemeinsam genutzt und auch die Pins werden gemeinsam genutzt.
Die Hauptfunktion:
Zähler wiederholen
Der Unterschied zu einem allgemeinen Timer: Der erste besteht darin, einen Wiederholungszähler dort hinzuzufügen, wo der Interrupt angewendet wird. Mit diesem Zähler ist es möglich, zu erkennen, dass Aktualisierungsereignisse und Aktualisierungsinterrupts nur alle paar Zählzyklen auftreten. Die ursprüngliche Struktur besteht darin, dass nach Abschluss jedes Zählzyklus eine Aktualisierung erfolgt, was einer erneuten Teilung des Ausgangsaktualisierungssignals entspricht.
DTG-Totzonengenerator und Komplementärausgang
Das Folgende ist die Erweiterung des Ausgangsvergleichsmoduls durch den erweiterten Timer DTG (Totzeitgenerierung), eine Schaltung zur Erzeugung von Totzonen. Der Ausgangspin auf der rechten Seite wurde von ursprünglich einem auf zwei komplementäre Ausgänge geändert, die ein Paar komplementärer PWM-Wellen ausgeben können. Diese Schaltkreise werden verwendet, um dreiphasige bürstenlose Motoren anzutreiben, beispielsweise bei Quadrocoptern, deren Hinterräder elektrisch sind Fahrzeuge und elektrische Bohrmaschinen. Vielleicht handelt es sich um einen dreiphasigen bürstenlosen Motor. Da die Antriebsschaltung eines dreiphasigen bürstenlosen Motors im Allgemeinen drei Brückenzweige erfordert, wird jeder Brückenarm von zwei Hochleistungsschaltröhren gesteuert, sodass insgesamt 6 Hochleistungsschaltröhren erforderlich sind. Daher werden die ersten drei Ausgangs-PWM-Pins hier zu komplementären Ausgängen. Um außerdem das kurzfristige Shoot-Through-Phänomen zu verhindern, das durch die Unvollkommenheiten des Geräts im Moment des Umschaltens verursacht wird, wenn die komplementäre Ausgangs-PWM den Brückenzweig antreibt, wird vorne eine Schaltung zur Erzeugung einer Totzone hinzugefügt. In dem Moment, in dem der Schalter umgeschaltet wird, wird eine Totzone von einer bestimmten Zeitspanne erzeugt, die es ermöglicht, sowohl das obere als auch das untere Rohr des Brückenarms abzuschalten, um ein Durchschießen zu verhindern.
Bremseingang
Der letzte Teil ist die Bremseingangsfunktion, die eine Sicherheitsgarantie für den Motorantrieb bieten soll. Wenn der externe Pin BKIN (Break IN) ein Bremssignal erzeugt oder die interne Uhr ausfällt und ein Fehler auftritt, unterbricht die Steuerschaltung automatisch den Ausgang des Motors, um Unfälle zu verhindern.
Betriebssteuerung: Steuern Sie einige Bits im Register, z. B. Start und Stopp, Hoch- oder Runterzählen usw.
Auf der rechten Seite geht das Signal nach Ablauf der Zeit und der Aktualisierungsunterbrechung. Wenn es sich um einen erweiterten Timer handelt, gibt es einen zusätzlichen Wiederholungszähler. Das Interrupt-Signal setzt zunächst ein Interrupt-Flag-Bit im Statusregister. Dieses Flag-Bit wird über den Interrupt-Ausgang gesteuert und löst einen Interrupt beim NVIC aus. Die Interrupt-Ausgabesteuerung ist ein Aktivierungsbit für die Interrupt-Ausgabe. Wenn Sie einen Interrupt benötigen, denken Sie daran, ihn zuzulassen.
Das Autoladeregister wurde von FF auf 36 geändert, und der Zielwert des Zählwerts wurde von FF auf 36 geändert. Nachdem hier 36 gezählt wurde, wird er direkt aktualisiert, um die nächste Zählrunde zu starten.
Ändern Sie während der Zählung den Zählzielwert von F5 auf 36. Unten befindet sich ein Schattenregister, das immer noch F5 ist, sodass das Zählziel immer noch bis F5 zählt und gleichzeitig ein Aktualisierungsereignis generiert Register und in der nächsten Zählung Diese Änderung ist nur gültig, wenn der Zyklus 36 beträgt. Der Zweck der Einführung des Schattenregisters besteht also tatsächlich in der Synchronisierung, d während der Operation.
Taktquelle
In der Takterzeugungsschaltung gibt es vier Schwingungsquellen:
(1) HSI: Interner 8-MHz-Hochgeschwindigkeits-RC-Oszillator;
(2) HSE: Ein externer Hochgeschwindigkeits-Quarzkristalloszillator mit 4 bis 16 MHz, auch Quarzoszillator genannt, ist normalerweise mit 8 MHz verbunden.
(3) LSE: Externer 32,768-kHz-Quarzoszillator mit niedriger Geschwindigkeit, der im Allgemeinen den Takt für RTC bereitstellt;
(4) LSI: Schließlich gibt es noch den internen 40-kHz-RC-Oszillator mit niedriger Geschwindigkeit, der den Takt für den Watchdog liefern kann.
Die beiden oben genannten Hochgeschwindigkeits-Quarzoszillatoren werden verwendet, um den Systemtakt bereitzustellen. Die Takte von AHB, APB2 und APB1 werden alle von diesen beiden Hochgeschwindigkeits-Quarzoszillatoren abgeleitet Da es sich um einen internen RC-Oszillator handelt, wird im Allgemeinen ein externer Quarzoszillator verwendet.
ST-Konfigurationsuhr
In der SystemInit-Funktion konfiguriert ST den Takt: Zuerst startet es den internen Takt HSI, wählt den internen 8-MHz-Takt als Systemtakt und läuft vorübergehend mit dem internen 8-MHz-Takt. Starten Sie dann den externen Takt, konfigurieren Sie den externen Takt so, dass er zur Frequenzvervielfachung in den PLL-Phasenregelkreis eintritt, 8 MHz wird mit 9 multipliziert und Sie erhalten 72 MHz. Nachdem der Phasenregelkreisausgang stabil ist, wählen Sie den Phasenregelkreis aus Ausgabe als Systemtakt, so dass der Systemtakt von 8 MHz auf 72 MHz umgeschaltet wird.
CSS Clock Security System
CSS (Clock Security System): Das Clock Security System ist auch für das Umschalten der Uhren verantwortlich. Es kann den Betriebsstatus der externen Uhr überwachen und die externe Uhr automatisch auf die interne Uhr umstellen, um den Betrieb sicherzustellen der Systemuhr und verhindern, dass das Programm durch einen Unfall hängen bleibt.
Taktverteilungsschaltung
*2
, und dann wird es auf der rechten Seite separat für die Timer 2-7 geöffnet, da der Prescaler-Koeffizient hier 2 ist, also muss die Frequenz hier sein*2
Der Takt, der zu den Timern 2 bis 7 führt, beträgt also 72 MHz. Unabhängig davon, ob es sich um einen erweiterten Timer, einen allgemeinen Timer oder einen Basis-Timer handelt, beträgt ihr interner Referenztakt 72 MHz.*2
. Da der Frequenzteilungskoeffizient 1 ist, betragen die Takte der Timer 1 und 8 72 MHz.// 恢复缺省配置
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);