Forum: Mikrocontroller und Digitale Elektronik STM32F334 HR Timer Reset event from other Timer


von T. F. (sar)


Lesenswert?

Hallo,

mein Ziel es ist mit dem HRTimer 4 Signale zu generieren. Dies möchte 
ich aber mit voller Auflösung alle 1 kHz machen.

Meine Idee war den HRTimer im one shot mode, non retriggerable laufen zu 
lassen und per TIM2 über die external Events das Update von TIM2 als 
reset für den HRTIM zu verwenden.

Die Erzeugung der Signale in der HRTIM funktioniert. Auch der one shot 
mode funktioniert (getriggert per Software über Timer Reset Flag).

Jetzt habe den Reset über External Event Channel 2, Source 3 
konfiguriert welches dem TIM2_TRGO Signal entspricht. TIM2 initialisiere 
ich im Master Mode und MMS=010, sodass ein update event das TRGO Signal 
generiert.

Funktioniert leider nicht. Auch wenn ich den Trigger per Software 
auslöse (TIM2->EGR |= TIM_EGR_TG) erzeugt der HRTIM keine Signale.
1
    __TIM2_CLK_ENABLE();
2
3
    // generate TRGO on update
4
    TIM2->CR2 = TIM_CR2_MMS_1;
5
    TIM2->PSC = 1;
6
    TIM2->ARR = 72000;    
7
    TIM2->EGR = TIM_EGR_UG;
8
    
9
    // enable Timer2
10
    TIM2->CR1 |= TIM_CR1_CEN;
11
    
12
            
13
    HRTIM_Minimal_Config();
14
    
15
    // enbale TimerA in one shot non retriggerable mode with preload enable
16
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].TIMxCR = HRTIM_TIMCR_PREEN;
17
    
18
    // reset on external event channel 2, source 3 -> TIM2_TRGO
19
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].RSTxR = HRTIM_RSTR_EXTEVNT2;    
20
    HRTIM1->sCommonRegs.EECR1 = HRTIM_EECR1_EE2SRC_1;
21
    
22
    // set period and compare registers
23
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].PERxR = 0xF000;
24
    
25
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP1xR = 0x0001;    
26
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP2xR = 0x5000;    
27
    
28
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP1xR = 0x4000;    
29
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP2xR = 0x8000;
30
31
    // set set and reset conditions
32
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].SETx1R = HRTIM_SET1R_CMP1;
33
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].RSTx1R = HRTIM_RST1R_CMP2;
34
35
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].SETx2R = HRTIM_SET1R_CMP3;
36
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].RSTx2R = HRTIM_RST1R_CMP4;
37
    
38
    /* Enable TA1 and TA2 outputs */
39
    HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TA1OEN + HRTIM_OENR_TA2OEN;     
40
  
41
    // start master timer and timer A
42
    HRTIM1->sMasterRegs.MCR |= HRTIM_MCR_MCEN + HRTIM_MCR_TACEN;
43
    
44
    GPIO_HRTIM_outputs_Config();

Ich muss gestehen ich bin noch recht neu in der Welt der ARM und bin mir 
sicher irgendwo was vergessen zu haben, leider finde ich nicht wo...

Vielen Dank für eure Hilfe!

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.