Forum: Mikrocontroller und Digitale Elektronik STM32 USB HID und Timer


von Tobias (Gast)


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

von Frank (Gast)


Lesenswert?

Hallo,

Deine Ausführung ist ein wenig dürftig.

Bein den STM32-Viechern musst Du für allen Mist irgendeinen Clock 
enablen. Ev. schaltest Du bei einer Zuweisung einen anderen Takt aus?

Gruß
Frank

von STM32User (Gast)


Lesenswert?


von Tobias (Gast)


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

von STM32User (Gast)


Lesenswert?

Hallo Tobias,

benutze bitte die Funktionen aus der STM32 Library, dann kann dir 
bestimmt
weiter geholfen werden.

Gruß

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.