STM8S Timer1

OP #3342499
Hi,

bekomme nun seit Stunden den Timer1 vom STM8S nicht zum laufen wie ich 
es mir vorstelle.

Ich möchte am PC3 !TIM1_CH1 mittels dem Timer1 Channel1 ein Takt 
generieren.
ca 1Mhz. Der STM läuft noch auf dem internen 16Mhz.

Ich mache folgendes:
1
void TIM1_Configuration()
2
{
3
  TIM1_DeInit();
4
  TIM1_InternalClockConfig();
5
  TIM1_TimeBaseInit(100, 
6
                    TIM1_COUNTERMODE_DOWN,
7
                    100,
8
                    0);
9
  //TIM1_SetAutoreload(450);
10
  TIM1_OC1Init(TIM1_OCMODE_TOGGLE,
11
               TIM1_OUTPUTSTATE_DISABLE,
12
               TIM1_OUTPUTNSTATE_ENABLE,
13
               50,
14
               TIM1_OCPOLARITY_LOW,
15
               TIM1_OCPOLARITY_LOW,
16
               TIM1_OCIDLESTATE_RESET,
17
               TIM1_OCNIDLESTATE_RESET);
18
  TIM1_OC1PreloadConfig(ENABLE);
19
  TIM1_Cmd(ENABLE);
20
}

Was mache ich falsch, und was fehlt?
Habe die Zeit noch nicht berechnet, also die 1Mhz sind noch nicht das 
Thema, erstmal möchte ich einen Takt am Ausgang messen...

Danke im Voraus.
Schau Dir doch mal die ST-Beispiele an.
Under TIM1\TIM1_PWMOutput\readme.txt:

This example shows how to configure the TIM1 peripheral to generate 
three   signals with three different frequencies.
(...)
The TIM1 waveform can be visualized using an oscilloscope.
Ne, gibt es nicht.
Ich habe mir mit TIM4 sowas aehnliches zusammengebastelt.
1
//=================================
2
// Init       100usec
3
//=================================
4
void Tim4_Init (void )
5
{
6
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);
7

8
  /* TIM4 configuration:
9
   - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 64 so the TIM4 counts with 250kHz
10
  - With 250 000 Hz we can generate time base:
11
      max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 250000 = 1024 us
12
      min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 =    8 us
13
  - In this example we need to generate a time base equal to 100 us
14
   so TIM4_PERIOD = (0.0001 * 250000 - 1) = 24 */
15

16
  TIM4_TimeBaseInit(TIM4_Prescaler_64, 24);
17
  TIM4_ClearFlag(TIM4_FLAG_Update);
18
  TIM4_ITConfig(TIM4_IT_Update, ENABLE);
19

20
  /* Enable TIM4 */
21
  TIM4_Cmd(ENABLE);
22
}

Und dann in der stm8l15x_it.c Datei:
1
(...)
2
//=====================================
3
// TIM4   Update/Overflow/Trigger Interrupt routine.
4
//=====================================
5
INTERRUPT_HANDLER(TIM4_UPD_OVF_TRG_IRQHandler, 25)
6
{
7
  static volatile uint8_t usec_100;
8

9
  usec_100++;
10
  tim4_status.f100us_task_request = true;
11

12
  if (usec_100 == 10)
13
  {
14
    usec_100 = 0;
15
    tim4_status.f1ms_task_request = true;
16
  }
17
  TIM4_ClearITPendingBit(TIM4_IT_Update);
18
}
19
(...)

In der Main-Loop wird dann tim4_status.f100us_task_request und 
tim4_status.f1ms_task_request kontrolliert. Unter anderem werden dann 
verschiede Delay-Funktionen bedient.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.