Forum: Mikrocontroller und Digitale Elektronik STM32 - One Pulse Mode - ohne Trigger??


von Hans-Dieter (Gast)


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

von Sven Wagner (Gast)


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

von Hans-Dieter (Gast)


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?

von Sven Wagner (Gast)


Lesenswert?

ITR0 ist mit TIM5 verbunden. Veruch doch einfach mal mit Timer 5 TRGO zu 
toggeln. Ein Beispiel zur Konfiguration in RM0008, p.366 /Using one 
timer as prescaler for another/.

Grüße
Sven

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.