STM32F2xx - Timer Probleme

Gast #2812151
Lesenswert?
• ▲
▼
Hallo,

mit dem STM32F2xx benötige ich eine Ethernetkommunikation zum PC. 
Hierfür nutze ich den LwIp Stack ohne Betriebssystem (Standalone).
Das Empfangen von Daten über die Ethernetschnittstelle soll über den 
Timer3 erfolgen. In dem anderen Teil der Applikation
habe ich eine Schedulerfunktionalität mit dem Timer2 realisiert. In der 
Initialisierungsphase der Ethernetschnittstelle werden die beiden
Funktionen ETH_BSP_Config(); LwIP_Init(); ausgeführt. Nachdem 
funktioniert der Scheduler nicht mehr so wie er sollte.
1
// Timer2 für Scheduler
2
void Timer2_Init(void)
3
{
4
  TIM_TimeBaseInitTypeDef     TIM2_TimeBaseInitStructure; 
5
  NVIC_InitTypeDef NVIC_TIM2InitStructure;
6
 
7
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 
8

9
  TIM_DeInit(TIM2);
10

11
  TIM_InternalClockConfig(TIM2); 
12

13
  NVIC_TIM2InitStructure.NVIC_IRQChannel = TIM2_IRQn;
14
  NVIC_TIM2InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
15
  NVIC_TIM2InitStructure.NVIC_IRQChannelSubPriority = 2;
16
  NVIC_TIM2InitStructure.NVIC_IRQChannelCmd = ENABLE;
17
  NVIC_Init(&NVIC_TIM2InitStructure);
18
  
19
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
20
  
21
  TIM2_TimeBaseInitStructure.TIM_Period = 10;    
22
  TIM2_TimeBaseInitStructure.TIM_Prescaler = 12000;  // für SYSCLK_FREQ_120MHz          
23
  TIM2_TimeBaseInitStructure.TIM_ClockDivision = 0; 
24
  TIM2_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
25
  
26
  TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseInitStructure); 
27
 
28
  TIM_Cmd(TIM2, ENABLE); 
29
}
30

31
void TIM2_IRQHandler(void)
32
{    
33
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);
34
  Tick();
35
}
1
// Timer3 für Ethernetkommunikation
2
void Timer3_Init(void)
3
{
4
  TIM_TimeBaseInitTypeDef     TIM3_TimeBaseInitStructure; 
5
  NVIC_InitTypeDef NVIC_TIM3InitStructure;
6
 
7
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 
8

9
  TIM_DeInit(TIM3);
10

11
  TIM_InternalClockConfig(TIM3); 
12

13
  NVIC_TIM3InitStructure.NVIC_IRQChannel = TIM3_IRQn;
14
  NVIC_TIM3InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
15
  NVIC_TIM3InitStructure.NVIC_IRQChannelSubPriority = 2;
16
  NVIC_TIM3InitStructure.NVIC_IRQChannelCmd = ENABLE;
17
  NVIC_Init(&NVIC_TIM3InitStructure);
18
  
19
  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
20
  
21
  TIM3_TimeBaseInitStructure.TIM_Period = 1000;    
22
  TIM3_TimeBaseInitStructure.TIM_Prescaler = 12000;  // für SYSCLK_FREQ_120MHz          
23
  TIM3_TimeBaseInitStructure.TIM_ClockDivision = 0; 
24
  TIM3_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
25
  
26
  TIM_TimeBaseInit(TIM3, &TIM3_TimeBaseInitStructure); 
27
 
28
  TIM_Cmd(TIM3, ENABLE); 
29
}
30

31
void TIM3_IRQHandler(void)
32
{    
33
  TIM_ClearFlag(TIM3, TIM_FLAG_Update);
34
  STM_EVAL_LEDToggle(LED2);
35
  if (ETH_CheckFrameReceived())
36
  { 
37
    STM_EVAL_LEDToggle(LED4);
38
  }
39
}

Prinzipiell müsste doch dies mit den beiden Timern funktionieren. Wo 
könnte hier möglicherweise das Problem liegen ?
Gast
Lesenswert?
• ▲
▼
Ich habe nun das Problem für dieses Verhalten gefunden. Das Problem lag 
in der Initialisierungsroutine "ETH_BSP_Config" für das 
Ethernetinterface. Hier wurde der SysTick-Handler aufgerufen. Die 
nötigen Zeile habe ich zunächst auskommentiert.
Gast
Lesenswert?
• ▲
▼
Um den LwIp-Stack auf dem STm32 in Betrieb zu nehmen, braucht man ja 
zwangsläufig kein Betriebssystem. Deshalb möchte ich einen zusätzlichen 
Hardwaretimer (Timer3) für ankommende Ethernetpacket einsetzen. Die 
Schedulerfunktionalität braucht ebenfalls einen eigenen Hardwaretimer 
(Timer2 oder SysTick). Ist diese Vorgehensweise sinnvoll oder verbirgt 
diese ein Problem ?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.