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.