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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren