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
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.