Forum: Mikrocontroller und Digitale Elektronik STM32 Timer External clock


von ben (Gast)


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

von Andreas S. (igel1)


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

von Andreas S. (igel1)


Lesenswert?

Korrektur:

Falsch:
(ich kanns selber leider nicht testen, weil ich einen STM32F0xx habe)

Richtig sollte es heißen:
(ich kann's selber leider nicht testen, weil ich keinen STM32F0xx 
habe)

Viele Grüße

Igel1

von ben (Gast)


Lesenswert?

Wow, vielen Dank !!

Da hätte ich wahrscheinlich noch Tagelang gesucht!
Danke!

von Andreas S. (igel1)


Lesenswert?

ben schrieb:
> Wow, vielen Dank !!
>
> Da hätte ich wahrscheinlich noch Tagelang gesucht!
> Danke!

Ja, ja - so ist das mit der Betriebsblindheit.
Wem von uns ist das nicht auch schon einmal passiert?!

Mich würde abschließend natürlich interessieren, ob's
denn jetzt tatsächlich funktioniert ... ?

Viele Grüße

Igel1

von ben (Gast)


Lesenswert?

Ja, funktioniert jetzt, danke :)

von Andreas S. (igel1)


Lesenswert?

Na supi - dann gibt's ja heute Abend noch etwas zum Anstoßen!

Good luck weiterhin

Igel1

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.