STM32 USB HID und Timer

Gast #1984539
Lesenswert?

Hallo,

ich habe das Phytec nanomodul Stm32F103 mit zugehöriger Basisplatine und 
programmiere mit Keil uvision4.
Ich möchte ein Programm schreiben, welches eine Kommunikation des 
Microcontrollers mit dem PC über USB ermöglicht und gleichzeitig noch 
mehrere ADC-Kanäle auslesen und eine PWM erzeugen kann.

Die einzelnen Programmteile laufen einzeln einwandfrei, also das USB HID 
Programm von Keil läuft einwandfrei, genauso wie eine PWM mit Timer 1 
oder das Auslesen der ADCs.
Versuche ich die Programmteile aber nun zu verbinden funktioniert der 
USB nicht mehr (Meldung: USB Gerät kann nicht erkannt werden).
Der einzige Timer der zusammen mit dem USB Programm funktioniert ist 
Timer 8. Sobald ich einen anderen Timer aktivieren möchte funktioniert 
der USB nicht mehr. Es reicht aus das Enable Bit des Timers zu setzen 
ohne dass irgendein anderes Register gesetzt wurde um den USB 
lahmzulegen.

Hat von euch jemand eine Idee an was das hängen kann??
Ich wäre euch sehr dankbar für eure Hilfe.

Gruß Tobias
Gast #1985081
Lesenswert?

Gast #1987482
Lesenswert?

Hallo,

also hier habe ich mal meine Konfiguration der Timer, bin extra noch 
einmal alles durchgegangen konnte aber keine Fehler finden.
Mittlerweile benutze ich auch das USB-Programm von STM, es ergeben sich 
aber die gleichen Fehler.

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);  //Erlauben der 
Clock
    TIM1->RCR = 0x0000;
      TIM1->PSC = 0x0047;                               // set prescaler
      TIM1->ARR = 0x03E7;                               // set 
auto-reload
    TIM1->CCR1  = 0x00F0;                            //    0x02EE 
//
      TIM1->CCMR1 |= 0x00F0;                           //
      //TIM1->CCMR2 = 0x0000;                           //
      TIM1->CCER  |= 0x0005;                            // set 
capture/compare enable register
      TIM1->SMCR  |= 0x0040;                            // set slave 
mode control register
      TIM1->BDTR  |= 0xC000;                            // set break and 
dead-time register

      TIM1->CR1 = 0x0005;                               // set command 
register 1
      TIM1->CR2 = 0x0040;                               // set command 
register 2
                           // interrupts used
      TIM1->DIER |= 0x0003;                             // enable 
interrupt
      NVIC->ISER[0] |= (1 << (TIM1_UP_IRQChannel & 0x1F));  // enable 
interrupt

      TIM1->CR1 |= 0x0001;                              // enable timer

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, 
ENABLE);
    GPIOA->CRH = 0x0000000B;              //PA 8  auf Alternate 
Function, 50Mhz
    GPIOB->CRH = 0x00B00000;

Ich habe mittlerweile auch einmal versucht den Timer zu remappen.
Dabei passiert aber dann am Ausgang entweder garnichts wenn ich 
folgenden Programmtext nehme:

GPIO_PinRemapConfig( GPIO_FullRemap_TIM1, ENABLE );

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    GPIOE->CRH =0x000000BB;

oder ich habe auf dem negierten Ausgang 3,3 V und auf dem normalen 
Ausgang 0V wenn ich folgenden Programmtext benutze:

GPIO_PinRemapConfig( GPIO_FullRemap_TIM1, ENABLE );

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    GPIOE->CRH =|0x000000BB;

Irgendwo muss da ja etwas sein das mir entweder den Timer oder die 
Ausgangspins verändert, das muss aber dann schon im ursprünglichen 
stm-Programm für USB oder im ursprünglichen Keil-Programm für die 
USB-HID vorhanden sein.

Leider finde ich den Punkt einfach nicht.
So langsam verliere ich den Durchblick

Gruß Tobias

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