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
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
schaust du hier: https://my.st.com/public/STe2ecommunities/mcu/Lists/ARM%20CortexM3%20STM32/Flat.aspx?RootFolder=%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fARM%20CortexM3%20STM32%2fUSART1%20%20TIM1%20working%20parallel&FolderCTID=0x01200200770978C69A1141439FE559EB459D758000626BE2B829C32145B9EB5739142DC17E&TopicsView=https%3A%2F%2Fmy.st.com%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2FARM%2520CortexM3%2520STM32%2FAllItems.aspx¤tviews=34 Timer 1 schaltet den Ausgang PA11 USBDM ab, wenn er nicht richtig konfiguriert wurde.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.