7. Einführung in die Verwendung des TIM-Timers

1. Einführung in die relevanten Register des TIM-Timers

  • Die Zusammensetzung der Eingangserfassungseinheit
    Fügen Sie hier eine Bildbeschreibung ein
    Statusregister 1 (TIM1_SR1)
    Fügen Sie hier eine Bildbeschreibung ein
    Wenn ein Ladungsverweigerungsereignis auftritt, wird das entsprechende CCxIF-Flagbit im Statusregister 1 (TIM1_SR1) auf "1" gesetzt, um anzuzeigen, dass der Zählwert erfasst wurde das Erfassungs- / Vergleichsregister (TIM1_CCRx).
    Fügen Sie hier eine Bildbeschreibung ein
    Wenn das CCxIF-Flag im Statusregister 1 (TIM1_SR1) auf "1" gesetzt ist und ein anderes Erfassungsereignis auftritt, wird das CCxOF im Statusregister 2 (TIM1_SR2) auf 1 gesetzt, um anzuzeigen, dass ein wiederholtes Erfassungsereignis aufgetreten ist.
    Fügen Sie hier eine Bildbeschreibung ein

2. Einführung in den Eingabeerfassungsmodus

Wenn im Eingangserfassungsmodus die entsprechende Flanke des ICi-Signals erkannt wird, wird der aktuelle Wert des Zählers im Erfassungs- / Vergleichsregister
(TIM1_CCRx) zwischengespeichert. Wenn ein Erfassungsereignis auftritt, wird das entsprechende CCiIF-Flag (TIM1_SR-Register) gesetzt.
Wenn das CCiIE-Bit des TIM1_IER-Registers gesetzt ist, dh der Interrupt aktiviert ist, wird eine Interrupt-Anfrage generiert. Wenn das
CCiIF-Flag bereits hoch ist, wenn ein Erfassungsereignis auftritt, wird das wiederholte Erfassungsflag CCiOF (TIM1_SR2-Register) auf 1 gesetzt. Durch Schreiben von CCiIF = 0
oder Lesen der im Register TIM1_CCRiL gespeicherten erfassten Daten kann CCiIF gelöscht werden. Schreiben Sie CCiOF = 0, um CCiOF zu löschen.
Das folgende Beispiel zeigt, wie der Zählerwert im Register TIM1_CCR1 an der ansteigenden Flanke des TI1-Eingangs erfasst wird. Die Schritte sind wie folgt:

  1. Wählen Sie einen gültigen Eingangsanschluss aus: Beispielsweise ist TIM1_CCR1 mit dem TI1-Eingang verbunden, sodass
    CC1S = 01 in das Register TIM1_CCR1 geschrieben wird . Zu diesem Zeitpunkt ist der Kanal als Eingang konfiguriert und das Register TIM1_CCR1 ist schreibgeschützt.
  2. Entsprechend den Eigenschaften des Eingangssignals TIi
    kann die Filterzeit des entsprechenden Eingangsfilters durch Konfigurieren des ICiF-Bits im Register TIM1_CCMRi eingestellt werden . Unter der Annahme, dass das Eingangssignal innerhalb von maximal 5 Taktzyklen zittert, müssen wir die Filterbandbreite so konfigurieren
    , dass sie länger als 5 Taktzyklen ist. Daher können wir 8 Mal kontinuierlich
    abtasten , um den tatsächlichen Flankenübergang auf TI1, dh in TIMi_CCMR1 , zu bestätigen Schreiben Sie IC1F = 0011 in das Register. Zu diesem Zeitpunkt ist das Signal
    nur gültig , wenn 8 identische TI1-Signale kontinuierlich abgetastet werden (Abtastfrequenz ist f MASTER).
  3. Wählen Sie die effektive Konvertierungsflanke des TI1-Kanals aus und schreiben Sie CC1P = 0 (ansteigende Flanke) in das Register TIM1_CCER1.
  4. Konfigurieren Sie den Eingabe-Prescaler. In diesem Beispiel soll die Erfassung zu jedem gültigen
    Pegelübergangszeitpunkt erfolgen , sodass der Vorteiler deaktiviert ist (schreiben Sie IC1PS = 00 in das Register TIM1_CCMR1).
  5. Setzen Sie CC1E = 1 im Register TIM1_CCER1, damit der Wert des Erfassungszählers im Erfassungsregister erfasst werden kann.
  6. Aktivieren Sie gegebenenfalls zugehörige Interrupt-Anforderungen, indem Sie das CC1IE-Bit im Register TIM1_IER setzen.
    Wenn eine Eingabeerfassung erfolgt:
    ● Wenn ein gültiger Pegelübergang auftritt, wird der Wert des Zählers in das Register TIM1_CCR1 übertragen.
    ● Das CC1IF-Flag ist gesetzt (Interrupt-Flag). Wenn mindestens 2 aufeinanderfolgende Erfassungen aufgetreten sind und CC1IF nicht gelöscht wurde, wird
    CC1OF ebenfalls auf 1 gesetzt.
    ● Wenn das CC1IE-Bit gesetzt ist, wird ein Interrupt generiert.
    Um mit dem Capture-Überlauf (CC1OF-Bit) fertig zu werden, wird empfohlen, die Daten vor dem Lesen des Recapture-Flags zu lesen, um zu vermeiden, dass die
    Recapture-Informationen verloren gehen, die möglicherweise nach dem Lesen des Capture-Überlauf-Flags und vor dem Lesen der Daten generiert werden lesen.
1) Messung des PWM-Eingangssignals

Dieser Modus ist ein Sonderfall des Eingangserfassungsmodus, mit Ausnahme der folgenden Unterschiede entspricht der Betrieb dem Eingangserfassungsmodus:
● Zwei ICI-Signale werden demselben TIi-Eingang zugeordnet.
● Die gültigen Flanken der beiden ICi-Signale haben entgegengesetzte Polaritäten.
● Eines der TIiFP-Signale wird als Trigger-Eingangssignal verwendet, und der Trigger-Modus-Controller ist so konfiguriert, dass der Trigger-Modus zurückgesetzt wird.

2) Beispiel für die Periodenmessung des PWM-Signals

Beispielsweise können Sie die Periode (Register TIM1_CCR1) und das Tastverhältnis (Register TIM1_CCR2) des PWM-Signaleingangs an TI1 folgendermaßen messen. (Dies hängt von der Frequenz von f MASTER und dem Wert des Vorteilers ab.)

  1. Wählen Sie den gültigen Eingang von TIM1_CCR1: Setzen Sie CC1S = 01 im Register TIM1_CCMR1 (wählen Sie TI1).
  2. Wählen Sie die gültige Polarität von TI1FP1 (zum Erfassen von Daten in TIM1_CCR1 und Löschen des Zählers): Setzen Sie CC1P = 0 (
    gültig bei steigender Flanke ).
  3. Wählen Sie den gültigen Eingang von TIM1_CCR2: Setzen Sie CC2S = 10 im Register TIM1_CCMR2 (wählen Sie TI1FP2).
  4. Wählen Sie die gültige Polarität von TI1FP2 (Daten zu TIM1_CCR2 erfassen): Setzen Sie CC2P = 1 (fallende Flanke gültig).
  5. Wählen Sie ein gültiges Triggereingangssignal: Setzen Sie TS = 101 im Register TIM1_SMCR (wählen Sie TI1FP1).
  6. Konfigurieren Sie den Triggermodus-Controller so, dass der Triggermodus zurückgesetzt wird: Setzen Sie SMS = 100 in TIM1_SMCR.
  7. Capture aktivieren: Setzen Sie CC1E = 1 und CC2E = 1 im Register TIM1_CCER1.
    Fügen Sie hier eine Bildbeschreibung ein

3. Der allgemeine Prozess der Initialisierung der Eingabeerfassungsmessung

  1. Stellen Sie den spezifischen Eingangskanal ein, beide CCxS [1: 0] -Bits des Erfassungs- / Vergleichsmodusregisters (TIM1_CCMRx)
    Fügen Sie hier eine Bildbeschreibung ein
  2. Stellen Sie die Signalabtastrate und den Filter ein, dh die ICxF [3: 0] -Bits des Erfassungs- / Vergleichsmodusregisters (TIM1_CCMRx).
    Fügen Sie hier eine Bildbeschreibung ein
  3. Stellen Sie die Signalflankenpolarität ein, mit der das CCxP-Bit des Erfassungs- / Vergleichsfreigaberegisters (TIM1_CCERx) konfiguriert werden soll.
    Fügen Sie hier eine Bildbeschreibung ein
  4. Stellen Sie den Signalvorzuweisungsfaktor ein, bei dem es sich um die IC1PSC [1: 0] -Bits des Erfassungs- / Vergleichsmodusregisters (TIM1_CCMRx) handelt.
    Fügen Sie hier eine Bildbeschreibung ein
  5. Aktivieren Sie die Erfassungsfunktion, mit der das CCxE-Bit des Erfassungs- / Vergleichsfreigaberegisters (TIM1_CCERx) konfiguriert wird.
    Fügen Sie hier eine Bildbeschreibung ein

4. Referenzcode

Zwei Initialisierungsmethoden:

/****************************************************************/
//TIM1功能初始化函数my_init(),无形参,无返回值
/****************************************************************/
void my_init(void)
{
   //1.CC1通道被配置为输入,IC1映射在TI1FP1上“CC1S[1:0]=01”
  TIM1_CCMR1|=0x01;
  //2.配置信号边沿极性为TI1F或TI2F的低电平或下降沿“CC1P=1”
   TIM1_CCER1&=0xFD;    //上升沿
   
  //3.CC2通道被配置为输入,IC2映射在TI1FP2上“CC2S[1:0]=10”
  TIM1_CCMR2|=0x02;
  //4.配置TI1FP2信号边沿极性为下降沿“CC2P=1”
  TIM1_CCER1|=0x20; 
   
   
  //5.配置采样率为主时钟频率,无滤波器“IC1F[3:0]=0000”
  TIM1_CCMR1&=0x0F;
  //6.配置输入/捕获1通道预分频器因子为8分频“IC1PSC[1:0]=11”
  TIM1_CCMR1|=0x0C;
  //7.使能TIM1_CH1输入捕获功能“CC1E=1”
  TIM1_CCER1|=0x01;
  //8.使能TIM1计数器功能“CEN=1”
  TIM1_CR1|=0x01;

}

/****************************************************************/
//TIM1功能初始化函数TIM1_init(),无形参,无返回值
/****************************************************************/
void TIM1_init(void)
{
  //1.CC1通道被配置为输入,IC1映射在TI1FP1上“CC1S[1:0]=01”
  // 0x000000001 : CC1通道被配置为输入,IC1映射在TI1FP1上;
  TIM1_CCMR1|=0x01;
  
  //2.配置TI1FP1信号边沿极性为上升沿“CC1P=0”
  // 0x11111101 : 捕获发生在TI1F或TI2F的上升沿;
  TIM1_CCER1&=0xFD;
  
  //3.CC2通道被配置为输入,IC2映射在TI1FP2上“CC2S[1:0]=10”
  // 0x00000010 : CC2通道被配置为输入,IC1映射在TI2FP2上;
  TIM1_CCMR2|=0x02;
  
  //4.配置TI1FP2信号边沿极性为下降沿“CC2P=1”
  // 0x00100000 : 1:捕获发生在TI1F或TI2F的下降沿
  TIM1_CCER1|=0x20; 
  
  //5.配置触发输入信号为TI1FP1,“TS[2:0]=101”
  // 0x01010000 : 选择用于选择同步计数器的触发输入,滤波后的定时器输入1(TI1FP1)
  TIM1_SMCR|=0x50;
  
  //6.配置触发模式为复位触发,“SMS[2:0]=100”
  // 0x00000100 : 复位模式 – 在选中的触发输入(TRGI)的上升沿时重新初始化计数器,并且产生一个更新寄存器的信号
  TIM1_SMCR|=0x04;
  
  //7.使能TIM1计数器功能“CEN=1”
  TIM1_CR1|=0x01;
  
  //没有设置在外部触发寄存器(TIM1_ETR)中的采样频率
}

Ich denke du magst

Origin blog.csdn.net/weixin_44751294/article/details/110685476
Empfohlen
Rangfolge