Technologieaustausch

STM32-TIM-Timer

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Dieser Inhalt basiert aufJiangxie Technology STM32-VideoInhaltlich, organisiert.

1. TIM

1.1 TIM-Timer

  • Der Timer kann den Eingangstakt zählen und einen Interrupt auslösen, wenn der Zählwert den eingestellten Wert erreicht.
  • Die Zeitbasiseinheit aus 16-Bit-Zähler, Vorteiler und automatischem Neuladeregister kann bei einem 72-MHz-Zähltakt ein maximales Timing von 59,65 s erreichen. 1/(72/65536/65536) (Der Zähler ist ein Register, das zur Durchführung der Zählzeit verwendet wird. Jedes Mal, wenn ein Takt kommt, erhöht sich der Zähler um 1. Der Vorteiler kann den Zählertakt teilen, um das Zählen flexibler zu gestalten. Automatischer Neustart Der geladene Register ist der Zielwert der Zählung, also die Anzahl der Takte, die Sie für einen Interrupt zählen möchten. Diese Register bilden den Kernteil des Timers. Diese Schaltung wird als Zeitbasiseinheit bezeichnet.
  • Es verfügt nicht nur über grundlegende geplante Interrupt-Funktionen, sondern umfasst auch die Auswahl interner und externer Taktquellen, Eingangserfassung, Ausgangsvergleich, Encoder-Schnittstelle, Master-Slave-Triggermodus und andere Funktionen.
  • Je nach Komplexität und Anwendungsszenario wird er in drei Typen unterteilt: erweiterter Timer, allgemeiner Timer und einfacher Timer.

1.2 Timertyp

TypSeriennummerBusFunktion
Erweiterter TimerTIM1, TIM8APB2Es verfügt über alle Funktionen eines allgemeinen Timers und zusätzlich über die Funktionen Wiederholungszähler, Totzonengenerierung, Komplementärausgang, Bremseingang usw.
Universeller TimerTIM2, TIM3, TIM4, TIM5APB1Er 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 TimerTIM6, TIM7APB1Verfügt über die Funktionen eines geplanten Interrupts und eines Master-Modus-auslösenden DAC
  • STM32F103C8T6-Timer-Ressourcen: TIM1, TIM2, TIM3, TIM4
  • DAC: Digital-Analog-Wandler

1.3 Basis-Timer

Die Hauptfunktion:

  • 16-Bit-Akkumulationszähler für automatisches Nachladen
  • Programmierbarer 16-Bit-Vorteiler, der zum Teilen des Eingangstakts durch einen beliebigen Wert zwischen 1 und 65536 verwendet wird
  • Synchronschaltung, die den DAC auslöst
  • Interrupt/DMA-Anfrage wird bei Aktualisierungsereignis generiert (Zählerüberlauf)

bild.png

  • 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.

1.4 Allgemeiner Timer

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:

    • Eingabeerfassung
    • Ausgabevergleich
    • PWM-Erzeugung (kanten- oder mittig ausgerichteter Modus)
    • Ausgang im Einzelimpulsmodus
  • Synchronisationsschaltungen, die Timer und Timer-Verbindungen mithilfe externer Signale steuern

  • Interrupt/DMA wird generiert, wenn die folgenden Ereignisse auftreten:

    • Update: Zählerüberlauf/-unterlauf, Zählerinitialisierung (per Software oder interner/externer Trigger)
    • Triggerereignisse (Zählerstart, -stopp, Initialisierung oder Zählung ausgelöst durch intern/extern)
    • Eingabeerfassung
    • Ausgabevergleich
  • Unterstützt Inkremental-Encoder (Quadratur-Encoder) und Hall-Sensorschaltungen zur Positionierung

  • Triggereingang als externer Takt oder zyklusweises Strommanagement
    bild.png

  • 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”。
    bild.png
    (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.

1.4 Erweiterter Timer

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:
    • Eingabeerfassung
    • Ausgabevergleich
    • PWM-Erzeugung (kanten- oder mittig ausgerichteter Modus)
    • Ausgang im Einzelimpulsmodus
  • Totzeitprogrammierbare Komplementärausgänge
  • Synchronisationsschaltungen, die Timer und Timer-Verbindungen mithilfe externer Signale steuern
  • Ermöglicht die Aktualisierung eines Wiederholungszählers in einem Timerregister nach einer Zählerperiode mit angegebenen Daten
  • Das Bremseingangssignal kann das Timer-Ausgangssignal in einen Reset-Zustand oder einen bekannten Zustand versetzen
  • Interrupt/DMA wird generiert, wenn die folgenden Ereignisse auftreten:
    • Update: Zählerüberlauf/-unterlauf, Zählerinitialisierung (per Software oder interner/externer Trigger)
    • Triggerereignisse (Zählerstart, -stopp, Initialisierung oder Zählung ausgelöst durch intern/extern)
    • Eingabeerfassung
    • Ausgabevergleich
    • Bremssignaleingang
  • Unterstützt Inkremental-Encoder (Quadratur-Encoder) und Hall-Sensorschaltungen zur Positionierung
  • Triggereingang als externer Takt oder zyklusweises Strommanagement

bild.png

  • 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.

1.5 Grundstruktur des geplanten Interrupts

bild.png
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.
bild.png
bild.png

1.6 Prescaler-Timing

bild.png

  • Zählfrequenz des Zählers: CK_CNT = CK_PSC / (PSC 1)
  • CK_PSC: Prescaler-Takt, der interne Takt beträgt 72 MHz.
  • CNT_EN: Der Zähler ist aktiviert, der High-Level-Zähler läuft normal und der Low-Level-Zähler stoppt.
  • CK_CNT: Zählertakt, der sowohl der Taktausgang des Vorteilers als auch der Takteingang des Zählers ist.
  • Zu Beginn ist der Zähler nicht freigegeben und die Zähleruhr läuft nicht. Nach der Aktivierung beträgt der tatsächliche Frequenzteilungskoeffizient in der ersten Hälfte der Periode 1 (PSC = 0) und der Takt des Zählers ist gleich dem Takt vor dem Vorteiler. In der zweiten Hälfte beträgt der tatsächliche Frequenzteilungskoeffizient 2 ( PSC=1) und der Takt des Zählers. Der Takt wird zur Hälfte des Takts vor dem Vorteiler. Angetrieben durch den Zählertakt erhöht sich auch das folgende Zählerregister mit der steigenden Flanke des Taktes weiter. Nach der Mittelposition FC wird der Zählwert 0. Daraus kann geschlossen werden, dass der ARR-Automatik-Nachladewert FC ist. Wenn der Zählwert dem Neuladewert entspricht und der nächste Takt kommt, wird der Zählwert auf Null zurückgesetzt und ein Aktualisierungsereignis wird unten generiert. Dies ist der Arbeitsablauf eines Zählzyklus.
  • Die folgenden drei Zeilen beschreiben einen Puffermechanismus des Vorteilerregisters. Das heißt, es gibt tatsächlich zwei Vorteilerregister, das für uns zum Lesen und Schreiben bestimmt ist . Es gibt auch ein Pufferregister oder Schattenregister: Dieses Pufferregister ist das wirklich funktionierende Register. Zu einem bestimmten Zeitpunkt ändern wir das Vorteilerregister von 0 auf 1. Wenn zu diesem Zeitpunkt die Frequenz geändert wird Der Teilungskoeffizient der Uhr führt sofort dazu, dass die Frequenz der ersten Hälfte und der zweiten Hälfte innerhalb eines Zählzyklus unterschiedlich ist. Daher wird ein Puffer entworfen, wenn die Zählung die Hälfte der Zählung erreicht. Diese Änderung wird nicht sofort wirksam, sondern es wird gewartet, bis ein Aktualisierungsereignis auftritt Der Wert des Prescaler-Registers wird an das Pufferregister übergeben, bevor er wirksam wird.
  • Wie aus der letzten Zeile ersichtlich ist, ist der Vorteiler auch auf das Zählen angewiesen, um die Frequenz zu teilen. Wenn der Vorteilerwert 0 ist, ist der Zähler immer 0 und gibt die ursprüngliche Frequenz direkt aus, wenn der Vorteilerwert 1 ist. 1, 0, 1, 0, 1 zählt so. Wenn es auf 0 zurückkehrt, wird 1 Impuls ausgegeben. Auf diese Weise wird die Ausgangsfrequenz durch 2 der Eingangsfrequenz geteilt tatsächlicher Frequenzteilungskoeffizient Es gibt einen Offset einer Zahl.

1.7 Zähler-Timing

bild.png

  • Zählerüberlauffrequenz: CK_CNT_OV = CK_CNT / (ARR 1) = CK_PSC / (PSC 1) / (ARR 1)
  • CK_INT: Interner Takt 72 MHz;
  • CNT_EN: Zählerfreigabe, gültig bei steigender Flanke;
  • CK_CNT: Zählertakt, da der Frequenzteilungskoeffizient 2 ist, ist diese Frequenz CK_INT geteilt durch 2. Dann erhöht sich der Zähler bei jeder steigenden Flanke dieses Takts. Wenn er 0036 erreicht, tritt ein Überlauf auf. Nach dem Zählen bis 36 gibt es eine weitere steigende Flanke, der Zähler wird gelöscht, der Zähler läuft über und es wird ein Aktualisierungsereignisimpuls (Update Interrupt Flag, UIF) erzeugt Auf 1 gesetzt, wird ein Interrupt angefordert. Nachdem auf den Interrupt reagiert wurde, muss er manuell im Interrupt-Programm gelöscht werden.

1.8 Der Zähler verfügt über keine vorinstallierte Zeitsequenz.

bild.png
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.

1.9 Der Zähler verfügt über eine vorinstallierte Zeitmessung

bild.png
Ä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.

1.10 RCC-Uhrenbaum

bild.png

  • 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

    • AHB-Bus: Zuerst gelangt der Systemtakt mit 72 MHz in den AHB-Bus. Der in SystemInit konfigurierte Verteilungskoeffizient beträgt 72 MHz.
    • APB1-Bus: Der hier konfigurierte Verteilungskoeffizient beträgt 2, sodass der Takt des APB1-Busses 72 MHz/2 = 36 MHz beträgt.Wenn unten der APB1-Vorteilerkoeffizient = 1 ist, bleibt die Frequenz unverändert, andernfalls bleibt die Frequenz unverändert*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.
    • APB2-Bus: Der Frequenzteilungsfaktor von APB2 beträgt 1, der Takt beträgt also 72 MHz.Dann wird auch die an APB2 angeschlossene Uhr eingeschaltet. Das heißt, wenn der APB2-Vorteiler-Koeffizient = 1 ist, bleibt die Frequenz unverändert, ansonsten die Frequenz*2 . Da der Frequenzteilungskoeffizient 1 ist, betragen die Takte der Timer 1 und 8 72 MHz.
    • Der Taktausgangsteil verfügt über ein UND-Gatter zur Ausgangssteuerung. Hier schreiben wir RCC_APB2/1PeriphClockCmd, um die Uhr einzuschalten kann über UND-Gatter an Peripheriegeräte ausgegeben werden.

2. Funktionen und Codes der TIM-Bibliothek

2.1 TIM-Bibliotheksfunktionen

// 恢复缺省配置
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);