STM32F4 Flags

OP #3708354
Lesenswert?
• ▲
▼
Hallo zusammen,

mal wieder eine Frage zum STM32F4, diesmal geht es um die Flags.

Ich möchte mit einem Timer die Dauer zwischen einer rising-edge und 
falling-edge bestimmen. Hierfür habe ich zwei inputcaptures angelegt.

Wenn ich nun in dem Interrupthandler TIM3_IRQHandler auf die 
entsprechenden Ereignisse reagieren möchte benötige ich die 
entsprechenden Flags.

Wo liegt da der Unterschied zwischen:

•TIM_FLAG_Update     &     •TIM_IT_Update
bzw.
•TIM_FLAG_CC1        &     •TIM_IT_CC1

Muss ich unbedingt beide behandeln oder reicht es nur die IT-Flags 
abzufragen und zurückzusetzen?

Viele Grüße,
Florian
OP #3710838
Lesenswert?
• ▲
▼
Dr. Sommer schrieb:
> Florian K. schrieb:
>> Kann mir niemand den Unterschied zwischen den Flags erklären, bzw. wofür
>> ich welche Flags benutze...
> TIM_IT_Update ist das Update-Flag, und TIM_IT_CC1 ist das
> Capture/Compare flag. Siehe Reference Manual S. 423, die gezackten
> Pfeile im Diagramm.

Vielen Dank für die Antwort, mich interessierte aber eher der 
Unterschied zwischen:

TIM_FLAG_Update     &     TIM_IT_Update

Also mir ist schon klar, dass das IT für Interrupt steht, aber was fange 
ich dann mit dem TIM_FLAG_Update an?

Also das TIM_IT_Update kommt wenn ich Interrupts aktiviert habe und der 
Timer überläuft und TIM_FLAG_Update ist gesetzt wenn der Timer überlauft 
unabhängig vom Interrupt.
Wenn ich eins zurücksetze, wird dann automatisch auch das andere Flag 
zurückgesetzt und der Timer resettet?

Bzw. meine eigentliche Frage bezieht sich vielleicht eher auf diese 
Frage:
Wenn ich Interrupts aktiviert habe für den entsprechenden Timer, kann 
ich dann komplett alle abfragen und "FLAG-resets" auf das TIM_IT_Update 
beschränken oder muss ich auch das TIM_FLAG_Update handeln?
#3710857
Lesenswert?
• ▲
▼
schau doch einfach im Quellcode nach wie es programmiert ist


hier das reseten vom "TIM_FLAG_Update"
1
#define TIM_FLAG_Update                    ((uint16_t)0x0001) 
2

3
* @brief  Clears the TIMx's pending flags.
4
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
5
{  
6
  /* Check the parameters */
7
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
8
   
9
  /* Clear the flags */
10
  TIMx->SR = (uint16_t)~TIM_FLAG;
11
}

und hier das reseten vom "TIM_IT_Update"
1
#define TIM_IT_Update                      ((uint16_t)0x0001)
2

3
* @brief  Clears the TIMx's interrupt pending bits.
4
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
5
{
6
  /* Check the parameters */
7
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
8

9
  /* Clear the IT pending Bit */
10
  TIMx->SR = (uint16_t)~TIM_IT;
11
}

wie man sieht machen beide Funktionen das gleiche
es gibt nämlich nur ein einzelnes Flag für "TIM_UPDATE"

die Funktion "TIM_GetFlagStatus" ließt direkt dieses Bit aus
die Funktion "TIM_GetITStatus" prüft noch zusätzlich
ob der Interrupt aktiviert war

es reicht also in der ISR
das Flag zu prüfen per "TIM_GetITStatus"
und falls gesetzt per "TIM_ClearITPendingBit" zu reseten

Gruss Uwe

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.