STM32 - One Pulse Mode - ohne Trigger??

Gast #2289603
Lesenswert?

Hallo Leute,

ich möchte mit dem STM32F103RBT6 den One Pulse Mode mit dem 
Advanced-Control Timer 1 nutzen um einen genauen Puls von 1,5ms zu 
erzeugen. Ich habe die 5 Schritte im Datenblatt One Pulse Mode (Output 
Compare Mode) eingehalten und so wie ich es da verstanden habe, wird 
dann der Counter einfach dadurch gestartet dass man das CEN Bit im 
TIM1_CR1 Register setzt. Geht das so oder muss man einen Trigger 
verwenden??

Meine Initalisierung des Timer1 sieht wie folgt aus:

void init_TIMER1(void)
{
  RCC->APB2ENR |= (RCC_APB2ENR_TIM1EN);
  RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN);
  RCC->APB2ENR |= (RCC_APB2ENR_AFIOEN);

  //Values
  TIM1->CR1 = 0x0;
  TIM1->ARR = (u16)36000;    //set auto-reload value
  TIM1->CCR1 = (u16)540;    //compare value (1,5ms)
  TIM1->CNT = 0x0;      //counter reset

  TIM1->EGR |= 0x0001;    //register update

  TIM1->PSC = (u16)101;    //set prescaler

  //Configuration (One Pulse Mode, Capture/Compare) for a single pulse
  TIM1->CR1 |= 0x000C;    //select one pulse mode(UEV: counter 
under/overflow)
  TIM1->CCMR1 |= 0x0020;    //select compare mode(channel 1 inactive on 
match)
  TIM1->CCER |= 0x0001;    //set channel 1 to output active high

  //PA8 Configuration as output AF-PP
  GPIOA->CRH &= ~(0x0000000B);
  GPIOA->CRH |= 0x0000000B;
}

Wenn nun der CCR1 Wert erreicht wird müsste ja das CEN Bit zurückgesetzt 
werden und der Ausgang TIM1_CH1 Low gesetzt werden, da ich es so 
konfiguriert habe dass der Ausgang solange High ist bis ein counter 
match erfolgt.

Ich habe dann mal getestet ob der counter überhaupt startet bzw. der 
counter match erfolgt und nach dem starten eine while schleife eingefügt 
die das CEN Bit abfragt wann es 0 wird. Das Programm bleibt dann da 
hängen, da ich die counter und clock einstellungen bereits überprüft 
habe frage ich mich ob der counter überhaupt startet??!

Bin um jeden Tip dankbar! ;-)

Mfg

Hans-Dieter
Gast #2289891
Lesenswert?

Im RM0008 steht:
1
Starting the counter can be controlled through the slave mode controller.
2
Generating the waveform can be done in output compare mode or PWM mode.
3
You select One-pulse mode by setting the OPM bit in the TIMx_CR1 register.
Was auch immer der slave-mode controller ist...
Vielleicht kann man auh irgendwie tricksen, in dem man manuell die 
Delayzeit auf 0 setzt.

Grüße
Sven
Gast #2291350
Lesenswert?

Danke für die Info, wusste ich zwar auch schon aber trotzdem! ;-)
Ich habe den Slave Mode Controller jetzt benutzt und so konfiguriert 
dass ich ITR0 als internen Trigger benutze. Mein Problem ist jetzt dass 
ich nicht weiß wie man ITR0 ansprechen kann! Weiß da jemand einen Rat?

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