Forum: Mikrocontroller und Digitale Elektronik STM32 Befehl: TIM_GetITStatus gibts nicht?


von Rudii (Gast)


Lesenswert?

Hallo,
ich würde gerne mit Interrupts arbeiten.

Dazu muss ich im IRQ ja abfragen welches Interrupt ausgelöst wurde.

Dazu findet man mit Google immer den Befehl TIM_GetITStatus.

Aber 1. zeigt mir meine IDE einen Fehler an.(SW4STM32)
und 2. Gibt's den Befehl in keiner schimpfwort PDF?!

Hoffe auf Hilfe.
MfG.

von M. K. (kichi)


Lesenswert?

Rudii schrieb:
> Aber 1. zeigt mir meine IDE einen Fehler an.(SW4STM32)
> 2. Gibt's den Befehl in keiner schimpfwort PDF?!

Was deine IDE angeht: keine Ahnung. Ich schätze, dass entweder ein Pfad 
verbogen ist, oder die Datei nicht includiert wird.

Dann mach die stm32f10x_stdperiph_lib_um.chm (ersetze den ersten Teil 
entsprechend deiner SPL) auf und such dort danach. Oder besser noch: 
nutze ein Tool, das den Inhalt von Dateien durchsuchen kann (bspw. 
Notepad++) und lass das deinen SPL-Ordner durchsuchen. Dann hast du 
gleich den Pfad für die IDE.

: Bearbeitet durch User
von Rudii (Gast)


Lesenswert?

Hallo,
*stdperiph_lib_um.chm wo finde ich denn diese Datei? Im Firmware-Ordner 
leider nicht.

MfG.

von Rudii (Gast)


Lesenswert?

Mich regt das irgendwie auf. Es gibt tausende Anleitungen zu diesem 
Thema. Aber irgendwie bin ich einfach zu dumm. Warum steht das denn in 
keiner der PDFs. Hab gehofft da sind alle Befehle dokumentiert. Ich 
stehe auf dem Schlauch.

MfG.

von Steffen R. (steffen_rose)


Lesenswert?

Da du sehr wenig Infos lieferst, sagen wir mal so:

Wenn du die aktuellen HAL Treiber nutzt, helfen dir die Infos zur 
Standard Peripherie Library nur bedingt weiter.

Und wenn du weder die alte Standard Peripherie Library oder die HAL 
Treiber nutzt, solltest du das Prozessor Manual zu Rate ziehen und die 
jeweiligen Register auslesen.

von hp-freund (Gast)


Lesenswert?

Wirf einen Blick in die jeweilige *_tim.h

stm32f0xx_tim.h
stm32f10x_tim.h

usw.

von Dieter Graef (Gast)


Lesenswert?

Aus der Datei core_cm7.h:

/** \brief  Get Pending Interrupt

    The function reads the pending register in the NVIC and returns the 
pending bit
    for the specified interrupt.

    \param [in]      IRQn  Interrupt number.

    \return             0  Interrupt status is not pending.
    \return             1  Interrupt status is pending.
 */
__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
{
  return((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & 
(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
}

sucht Rudii sowas?

m.f.G.
Dieter

von Steffen R. (steffen_rose)


Lesenswert?

Weiterraten? OK.

stm32f4xx_hal_tim.h

 __HAL_TIM_GET_IT_SOURCE()

von Rudii (Gast)


Lesenswert?

Hallo, ich wusste bisher nicht das es eine alte und neue Firmware gibt.

Ich benutze die neue HAL Firmware.

Ich möchte mit einem Timer ein Update Interrupt auslösen. Dazu wäre ich 
gern in der Lage mir das dazu benötigte Wissen aus den offiziellen 
Dokumenten von ST anzueignen. Leider habe ich das nicht geschafft, da 
ich nichts passendes finde(in den PDFs).

Dann habe ich gegoogelt und bin auf z.B. den Befehl

TIM_GetITStatus();

gestoßen. Doch leider funktioniert der bei mir nicht. Vll. weil er aus 
der alten Firmware stammt?

Wie mache ich das denn mit dem neuen Befehlen und wo finde ich diese? 
Hätte jemand ein Beispiel? Oder kann mir sagen wo die offizielle Doku 
davon ist?

Vielen Dank.
MfG

von hp-freund (Gast)


Lesenswert?

Mach es doch wie die meisten anderen auch.
Sieh dir die Beispiele zu deinem Controller an.
Für den Timer dann z.B. in:

Examples/TIM

Wenn Du dann auf einen dir unklaren Befehl triffst, gehe zu dessen 
Deklaration. Markieren und F3.

von hp-freund (Gast)


Lesenswert?

Oder gleich Pseudo-Grafisch mit CubeMX.

von Rudii (Gast)


Lesenswert?

@hp-freund

Gemacht aber in den Samples ist auch nur ein leerer IRQHandler. Keine 
Befehle usw. Hab übrigens auch welche von anderen Boards etc. 
angeschaut.

Und CubeMX nutze ich so oder so. Aber auch hier: Leerer IRQHandler und 
keine Hinweise wie ich im IRQHandler frage ob z.B. Update ausgelöst 
wurde.

MfG.

von hp-freund (Gast)


Lesenswert?

Bei HAL ist das etwas abstrakter, da solltest Du dir die 
Callback-Funktionen ganauer ansehen.

von Rudii (Gast)


Lesenswert?

Bin jzt durch weiteres stöbern auf folgenden Code gekommen, den ich in 
meinen IRQHandler packen würde:
1
if(__HAL_TIM_GET_IT_SOURCE(&htim2,TIM_IT_UPDATE) != RESET)
2
{
3
  //Mein Code der nach Überlauf des Timers startet
4
  __HAL_TIM_CLEAR_IT(htim2, TIM_IT_UPDATE);
5
}

Macht man das so?

Wie würde das mit Callbacks aussehen?
MfG.

von Steffen R. (steffen_rose)


Lesenswert?

Rudii schrieb:
> Hallo, ich wusste bisher nicht das es eine alte und neue Firmware gibt.

Und einiges dazwischen.

Der STM32 umfasst auch die Palette von STM32F0xx bis STM32F7xx mit mehr 
oder weniger Unterschieden. (Und noch viele mehr.) Daher wäre es 
mittlerweile mal gut dein genutztes Derivat zu benennen.

von Rudii (Gast)


Lesenswert?

Sorry, STM32F411RE-Nucleo

MfG.

von hp-freund (Gast)


Lesenswert?

Die callback Funktionen sind als Platzhalter (weak) schon vorhanden.
Du kannst in deiner main.c also einfach z.B. die Funktion schreiben:
1
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
2
{
3
    if(htim->Instance = TIM2)
4
    {
5
        // dann z.B.
6
        HAL_GPIO_WritePin(GPIOG,GPIO_PIN_2,GPIO_PIN_RESET);
7
    }
8
9
}

Und das wars schon...

von Donna Lüttchen (Gast)


Lesenswert?

hp-freund schrieb:
>     if(htim->Instance = TIM2)

Hmm ...

von hp-freund (Gast)


Lesenswert?

Jep.
TIM2 ist Timer 2. Du kannst in der gleichen Funktion dann auch noch 
andere Timer cb Abfragen.
1
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
2
{
3
    if(htim->Instance = TIM2)
4
    {
5
        // war Timer 2 der Auslöser dann:
6
    }
7
8
    if(htim->Instance = TIM6)
9
    {
10
        // war Timer 6 der Auslöser dann:
11
    }
12
}

von hp-freund (Gast)


Lesenswert?

Ach ja, natürlich == und nicht =
Sorry.

von Florian F. (flof3000)


Lesenswert?

@hp-freund: ich Glaube es geht eher um = vs ==...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.