STM32 Timer External clock

Gast #5180623
Lesenswert?
• ▲
▼
Hallo,

ich habe Probleme auf einem STM32F030 Timer 1 mit externer Clock zum 
laufen zu bringen.
Das Ziel ist es bei jedem Update Event einen DMA zu Triggern. Das 
funktioniert mit folgender Initialisierung:

1
TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
2
TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
3
TIM_InitStructure.TIM_Period = 0xFFF;
4
TIM_InitStructure.TIM_Prescaler = 0;
5
TIM_TimeBaseInit(TIM1, &TIM_InitStructure);

Wenn ich nun Versuche PA8 als externe Clock zu verwenden, wird der DMA 
nicht mehr ausgelöst

Pin initialisierung
1
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
2

3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
5
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
6
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
7
GPIO_Init(GPIOA, &GPIO_InitStructure);
8

9
GPIO_PinAFConfig(GPIOA,GPIO_Pin_8,GPIO_AF_2);

Timer auf externe Clock
1
//Das habe ich probiert
2
//TIM_TIxExternalClockConfig(TIM1,TIM_TIxExternalCLK1Source_TI1ED,TIM_ICPolarity_Rising,0);
3
//TIM_ETRClockMode1Config(TIM1,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0);
4

5
//aber auch das hier
6
TIM_SelectInputTrigger(TIM1,TIM_TS_TI1F_ED);
7
TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_External1);
8
TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Disable);
9
TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update);

Nichts passiert. Clock liegt definitiv am Pin an. Was mache ich Falsch?
Danke
#5180916
Lesenswert?
• ▲
▼
ben schrieb:

> Wenn ich nun Versuche PA8 als externe Clock zu verwenden, wird der DMA
> nicht mehr ausgelöst
>
> Pin initialisierung
>
1
> RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
2
> 
3
> GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
4
> GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
5
> GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
6
> GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
7
> GPIO_Init(GPIOA, &GPIO_InitStructure);
8
> 
9
> GPIO_PinAFConfig(GPIOA,GPIO_Pin_8,GPIO_AF_2);
10
>

Schau Dir evtl. die letzte Zeile einmal genauer an und vergleiche Deine 
Parameter mit der Funktionsbeschreibung von "GPIO_PinAFConfig(...)" in 
"stm32f0xx_gpio.c" - sprich mit dem, was oberhalb der Funktion als 
Kommentar steht.

Lt. dieser Beschreibung sollte es also eher wie folgt lauten:
1
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2);

Jetzt hätte es per Zufall vielleicht noch passen können, wenn GPIO_Pin_8 
und GPIO_PinSource8 dieselbe Zahl referenziert hätten.
Leider ist das nicht der Fall:
1
#define GPIO_Pin_8         ((uint16_t)0x0100)
2
#define GPIO_PinSource8     ((uint8_t)0x08)

Ich hoffe, das war die Nadel im Heuhaufen ...
(ich kanns selber leider nicht testen, weil ich einen STM32F0xx habe)

Viele Grüße

Igel1

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.