STM32F4 Discovery Board - PWM Input Interrupt

OP #4591424
Lesenswert?

Hallo,
ich experimentiere jetzt schon seit Wochen mit dem Einlesen eines PWM 
Signals.
Ich konnte jetzt den "input capture mode" vom TIM1 aktivieren.

http://www.st.com/content/ccc/resource/technical/document/reference_manual/3d/6d/5a/66/b4/99/40/d4/DM00031020.pdf/files/DM00031020.pdf/jcr:content/translations/en.DM00031020.pdf

"17.3.7 PWM input mode"

Wenn ich nun eine kostante PWM am Eingang anlegen, dann sollten doch 
rein theoretisch die Register TIMx_CCR1 & TIMx_CCR2 jeweils NAHEZU 
konstante Zahlen auspucken (TIMx_CCR1 => Periode vom PWM-Signal; 
TIM1_CCR2 => Frequenz vom PWM-Signal). Beim direkt Zugriff (ohne 
Interrupt) auf diese Register variieren allerdings die Werte (Die Werte 
in CCR2 wechseln immer zwischen "Periode-WERT" und "Frequenz-WERT". Hab 
ich da etwa falsch initialisiert?


Ich habe mir einmal testweise die Werte aus den betroffenen 
Initialisierungsregistern ausgeben lassen:
1
trace_printf("%x | %x | %x | %x | %d | %d\n", TIM1->SMCR, TIM1->CCER, TIM1->CCMR1, TIM1->DIER, rx[0], rx[1]);


*LOG:*
1
54 | b1 | 201 | 2 | 4095 | -->2047<--
2
54 | b1 | 201 | 2 | 4095 | -->4095<--
3
54 | b1 | 201 | 2 | 4095 | -->4095<--
4
54 | b1 | 201 | 2 | 4095 | -->2047<--
5
54 | b1 | 201 | 2 | 4095 | -->2047<--
6
54 | b1 | 201 | 2 | 4095 | -->4095<--
7
54 | b1 | 201 | 2 | 4095 | -->2047<--
8
54 | b1 | 201 | 2 | 4095 | -->2047<--
9
54 | b1 | 201 | 2 | 4095 | -->4095<--
...

Der TIM1 wird folgendermaßen initialisiert:
1
void MX_TIM1_Init(void)
2
{
3
    TIM_SlaveConfigTypeDef sSlaveConfig;
4
    TIM_IC_InitTypeDef sConfigIC;
5

6
    htim1.Instance = TIM1;
7
    htim1.Init.Prescaler = 41;
8
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
9
    htim1.Init.Period = 65535;
10
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
11
    htim1.Init.RepetitionCounter = 0;
12
    HAL_TIM_Base_Init(&htim1);
13

14
    HAL_TIM_IC_Init(&htim1);
15

16
    sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
17
    sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
18
    sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE;
19
    sSlaveConfig.TriggerFilter = 0;
20
    HAL_TIM_SlaveConfigSynchronization(&htim1, &sSlaveConfig);
21

22
    // CC2NP & CC2P = 1
23
    sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
24
    sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
25
    sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
26
    HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, TIM_CHANNEL_1);
27

28
    sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE;
29
    sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
30
    sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
31
    HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, TIM_CHANNEL_2);
32
}
Ich arbeite hierbei mit der CUBE_MX LIB!
Hat vielleicht einer eine Erklärung dafür?

Vielen Dank für eure Hilfe!

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