STM32F405 Timer captured nicht

OP #4194239
Lesenswert?

Ich versuche gerade den TIM4CH4 an STM32F405 zum Capture zu bringen, 
aber es passiert nichts. Was habe ich denn vergessen?
1
 /*pseudocode*/
2

3
 /* Clock für PORTB ist schon aktiv */
4
 GPIOB->AFRH |= (2<<4);  /* P9 Alternative Function 2 -> TIM4CH4 */
5
 GPIOB->MODER &= ~(3<<18); /*Input*/
6
 /*kein Pullup aktiv*/
7

8
 APB1ENR |= STM32_RCC_APB1ENR_TIM4EN;  /*clock für TIM4 anschalten*/
9
 TIM4->CCMR2 = (1<<8);   /* CC4 channel is configured as input, IC4 is mapped on TI4 */
10
 TIM4->CCER = (1<<13) | (1<<12);  /* falling edge + enable */
11
 TIM4->PSC = 52;    /*prescaler*/
12
 TIM4->CNT = 0;   /* counter auf 0 */
13
 TIM4->CR1 = 1;   /* start*/
Was ich im Debugger sehe:
- Der Timer läuft, TIM4->CNT ändert sich
- Ich kann manuell ein Capture auslösen wenn ich in das TIM4->EGR 
register schreibe. Dann hat das TIM4->CCR4 Register den Wert des Timers 
übernommen.
- Wenn ich High- oder Low-Pegel an PB9 anlege wird der Wert auch im 
PORTB->IDR angezeigt, aber ein Capture erfolgt nicht.
Ich habe auch schon steigende Flanke und beide Flanken probiert. Egal 
was ich an dem Port-Pin mache, es wird nicht gecaptured.

Was fehlt denn nur damit es geht? oder ist es vllt ein 
Reihenfolgeproblem?
Gast #4194326
Lesenswert?

Hi,

meiner Meinung nach ist der Timer i.O.

Du hast den Input-Pin falsch konfiguriert. Er ist als Input gesetzt 
womit nur das ISR bedient wird.
Statt dessen muß Du ihn als AF-Pin konfigurieren:
1
/* Clock für PORTB ist schon aktiv */
2
 GPIOB->AFRH |= (2<<4);  /* P9 Alternative Function 2 -> TIM4CH4 */
3
 GPIOB->MODER |= (2<<18); /* AF-Function */
4
/*Push-Pull aktiv*/

Schau Dir vorsichtshalber nochmal Figure 25 und Table 35 in RM0090 an.

Gruß
   Chris

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