Forum: Mikrocontroller und Digitale Elektronik STM32 Timer Initialisierungsfehler


von Michael M. (mabuo)


Lesenswert?

Hallo,

ich versuche jetzt schon verzweifelt seit Tagen einen einfachen Timer 
zum laufen zu bringen. Ich nutze keil µVision5 und habe ein Board mit 
einem STM32F103 ARM Prozessor.

Timer Initialisierung:

void SetupTimer (void) {   //Timer


  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  TIM_TimeBaseInitTypeDef timInitStruct;
  timInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  timInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  timInitStruct.TIM_Prescaler = 1000;
  timInitStruct.TIM_Period = timer_aktiv;
  TIM_TimeBaseInit(TIM2, &timInitStruct);
        TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);

  // Enable interrupt TIM2
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

  NVIC_Init(&NVIC_InitStructure);

}

In folgender Zeile unterringelt er das 'TIM"_IRQn' und sagt use of 
undeclared idetifier...

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

An was kann das liegen? Was mache ich falsch?
Bin für jede Hilfe dankbar.

Grüße

von npn (Gast)


Lesenswert?

Das 'n' in IRQn ist stellvertretend für eine Zahl.

von Dr. Sommer (Gast)


Lesenswert?

Du hast die stm32f10x.h nicht inkludiert, oder die Definition des Makros 
für deinen Prozessor (STM32F10X_LD, STM32F10X_LD_VL, STM32F10X_MD, 
STM32F10X_MD_VL, STM32F10X_HD, STM32F10X_HD_VL, STM32F10X_XL, 
STM32F10X_CL) vergessen.

Michael Maier schrieb:
> TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);
Hier schaltest du den Interrupt aus.

Michael Maier schrieb:
> NVIC_InitTypeDef NVIC_InitStructure;
>   NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
>   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
>   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
>
>   NVIC_Init(&NVIC_InitStructure);
Du hast vergessen, das Feld "NVIC_IRQChannelCmd" in NVIC_InitStructure 
zu initialisieren. Der Interrupt wird somit zufällig entweder ein- oder 
ausgeschaltet.

npn schrieb:
> Das 'n' in IRQn ist stellvertretend für eine Zahl.
Nein, das ist schon richtig so. Das 'n' deutet an, dass TIM2_IRQn die 
Nummer des Interrupts ist.

von Michael M. (mabuo)


Lesenswert?

Dr. Sommer schrieb:
> Du hast die stm32f10x.h nicht inkludiert, oder die Definition des Makros
> für deinen Prozessor (STM32F10X_LD, STM32F10X_LD_VL, STM32F10X_MD,
> STM32F10X_MD_VL, STM32F10X_HD, STM32F10X_HD_VL, STM32F10X_XL,
> STM32F10X_CL) vergessen.

Danke für die schnelle Antwort.
Also die stm32f10x.h ist included also liegt es wahrscheinlich an den 
Makros.
Wo muss ich diese einbinden, woher bekomm ich die und für was genau sind 
die gut?

von Dr. Sommer (Gast)


Lesenswert?

Michael Maier schrieb:
> Wo muss ich diese einbinden, woher bekomm ich die und für was genau sind
> die gut?
Die musst du auf der Compiler-Kommandozeile mit übergeben, beim GCC zB 
mit der "-D" Option. Wie man das in der µVision IDE eingibt weiß ich 
nicht.
Indem du eines dieser Makros definierst, stellst du ein welchen 
STM32F103 genau du verwendest, da die kleine Unterschiede haben. In der 
Titelzeile vom Datenblatt vom STM32F103 steht zB so etwas:
> Low-density performance line, ARM-based 32-bit MCU
Das sagt dir, dass du STM32F10X_LD definieren musst (LD = Low Density). 
Schau in deinem Datenblatt nach, was für einen du hast.

von Michael M. (mabuo)


Lesenswert?

Hab gefunden wo das einzustellen ist und hab wie im Datenblatt 
geschrieben HD auskommentiert.

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined 
(STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) 
&& !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined 
(STM32F10X_CL)
  /* #define STM32F10X_LD */     /*!< STM32F10X_LD: STM32 Low density 
devices */
  /* #define STM32F10X_LD_VL */  /*!< STM32F10X_LD_VL: STM32 Low density 
Value Line devices */
  /* #define STM32F10X_MD */     /*!< STM32F10X_MD: STM32 Medium density 
devices */
  /* #define STM32F10X_MD_VL */  /*!< STM32F10X_MD_VL: STM32 Medium 
density Value Line devices */
   #define STM32F10X_HD     /*!< STM32F10X_HD: STM32 High density 
devices */
  // #define STM32F10X_HD_VL */  /*!< STM32F10X_HD_VL: STM32 High 
density value line devices */
  /* #define STM32F10X_XL */     /*!< STM32F10X_XL: STM32 XL-density 
devices */
  /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity 
line devices */
#endif

Der Fehler wird immer noch angezeit und zusätzlich habe ich 30 andere 
error-Meldungen...

EDIT: OK die ursprüngliche Fehlermeldung ist doch weg. Danke dafür. Mal 
schauen wie ich das mit den anderen hinbekomme...

von Michael M. (mabuo)


Angehängte Dateien:

Lesenswert?

Fehlermeldungen sind als PDF angehängt falls jemand dazu etwas weiß.
Bin relativ ratlos was ich machen soll.

von Freddie (Gast)


Lesenswert?

Michael Maier schrieb:
> Fehlermeldungen sind als PDF angehängt

Die Menschheit ist wahrlich dem Untergang geweiht... wie kommt man nur 
auf so eine Idee?

von Dr. Sommer (Gast)


Lesenswert?

Was ist das für eine Datei stm32f10x_map.h, wieso inkludierst du die, wo 
kommt die her? Teil der CMSIS oder Standard Peripheral Library von ST 
ist die jedenfalls nicht. Da ist wohl irgendwas mit deinem Project Setup 
in µVision kaputt.

Michael Maier schrieb:
> Hab gefunden wo das einzustellen ist und hab wie im Datenblatt
> geschrieben HD auskommentiert.
Ich würde lieber nicht in den Header Files von ST rumspielen, sondern 
das lieber als globales Makro direkt dem Compiler mitgeben...

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.