Gast
#2289603
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