Hallo an alle! Leider habe ich ein Problem mit meinem STM32F103RB und Keil uVision4. Ich habe die ganze Zeit ein etwas größeres Programm auf dem STM32 Developper-Board (MCBSTM32) von Keil entwickelt, was soweit auch sehr gut läuft (Prozessor läuft, debuggen funktioniert einwandfrei). Wenn ich das ganze nun auf das eigentliche Tagetboard spiele, so klappt das auch einwandfrei, allerdings rührt sich der Prozessor kein bisschen. Ich vermute das es daran liegen könnte, dass auf dem Developperboard ja ein externer Quarz verwendet wird, auf dem eigentlichen Target aber ein externer Oszillator (16 MHz) bestückt ist, dessen Taktsignal ausschliesslich auf "OSC_IN" gelegt ist. "OSC_OUT" ist nicht beschaltet. Jetzt stehe ich leider total auf dem Schlauch und habe keine Ahnung, wieso nun bei dieser Konstellation kein Debug und nichts funktioniert. Ich nutze die Initialisierungsroutine von Keil "STM32_Init.c" (s. Anhang), allerdings wird diese ja nicht mal bearbeitet, da die Mainroutine ja auch nicht startet. Die Zeitanzeige im Debugmodus bleibt immer auf null stehen. Habe auch schon verzweifelt versucht den internen Oszillator zu benutzen, was aber auch nicht so recht gelingen mag. Hab mal den Schaltplan vom Targetboard mitgepostet, vielleicht kann mir ja einer von euch weiter helfen... :-) Wäre echt super! Gruß Andi
Als erstes schau mal mit dem Oszi, ob der Oszillator das Signal wie erwartet liefert. Im Manual steht folgendes: External source (HSE bypass) In this mode, an external clock source must be provided. It can have a frequency of up to 25 MHz. You select this mode by setting the HSEBYP and HSEON bits in the Clock control register (RCC_CR). The external clock signal (square, sinus or triangle) with ~50% duty cycle has to drive the OSC_IN pin while the OSC_OUT pin should be left hi-Z. See Figure 8. hoffe das hilft Grüsse
Wenn ich das richtig gesehen hab ist auf dem Keil Board ein 8 Mhz Quarz rauf und zu gehst jetzt aber mit einem 16 Mhz Oszillator auf den Chip. Da solltest du vorher die PLL noch anpassen: 16 * 9 = 144 Mhz -> STM32F103 geht aber nur bis 72 Mhz lt. DB.
Lass mal zum testen den internen Oszillator, 8MHz laufen, wenn es auf beiden Systemen dann geht, weißt Du erstmal, dass es wirklich ein Oszillatorproblem ist.
Guten Morgen an alle und danke erst mal für die Antworten. :-) Also mit dem Oszi habe ich den OSZ_IN Eingang schon überprüft, dort liegt ein sauberes 16 MHz Taktsignal an (auch wenn auf der Schematic irrtümlich 8 MHz angegeben ;-)). Habe jetzt mal die PLL angepasst. Den Multiplikationsfaktor habe ich auf PLLSRC * 4 gesetzt, womit ich ja auf 16MHz * 4 = 64MHz komme. Damit sollte der STM32F103 ja klar kommen. Allerdings ist damit immer noch das gleiche Problem. Das mit dem internen Oszillator habe ich schon versucht, allerdings kann ich an der "Clock Configuration" einstellen was ich will, nichts tut sich. Habe auch schon andere Tagetboards genommen, da ich dachte der Controller hätte nen Schlag, aber auch ohne Erfolg. Das eigentliche Problem ist, dass der Prozessor irgendwie überhaupt nicht startet. Eigentich sollte doch beim Start zunächst der interne Oszillator verwendet werden, bis über die "Clock Configuration" etwas anderes eingestellt wird. Oder habe ich das falsch verstanden? Nicht mal die main-Funktion startet:
1 | int main (void) |
2 | {
|
3 | stm32_Init (); /* Hier STM32 initialisieren */ |
4 | RCC_Initial(); /* Enable periperal clock for DMA */ |
5 | |
6 | //ADC_Initial(); /* Analogeingang initialisieren */
|
7 | |
8 | USB_Init(); /* USB Initialization */ |
9 | USB_Connect(__TRUE); /* USB Connect */ |
10 | |
11 | /* Unlock the Flash Program Erase controller */
|
12 | FLASH_Unlock(); |
13 | /* EEPROM Init */
|
14 | if ( FLASH_COMPLETE != EE_Init() ) |
15 | return FALSE; |
16 | |
17 | os_sys_init(Init); /* Realtime-Kernel starten (starten der Task 'init') */ |
18 | }
|
Könnte es denn sein, dass ich an den Pinnen noch etwas vergessen habe? Denn wie gesagt, die Initialisierungsroutine für die Clock Configuration wird ja nie gestartet, da der Prozessor nicht läuft. Gruß
Andreas K. schrieb: > dass ich an den Pinnen noch etwas vergessen habe? Was hat denn das jetzt mit Segeln zu tun? - BOOT0 Pin überprüft? - !RST Pin überprüft? - JTAG-Gedöne mal abgezogen? - direkt in main() mal Pins "getoggelt" (ohne den ganzen Konfig-Mist)
1 | int main (void) |
2 | {
|
3 | ...
|
4 | return ...; |
5 | ...
|
6 | }
|
hübsch ;-)
Also den Takt für USB musst du auch anpassen (48MHz), sonst geht nichts. Ist die CPU über JTAG ansprechbar?. Wie überprüfst du ob er funktioniert? ciao, Philipp
AS schrieb: >> dass ich an den Pinnen noch etwas vergessen habe? > > Was hat denn das jetzt mit Segeln zu tun? Ich meinte natürlich ob an der Beschaltung der PINS irgendetwas fehlt. ;-) Also ich habe mal mit dem Oszi nachgemessen: -BOOT0 ist kontinuierlich auf NULL (Soll auch so sein, da ja vom Flash gebootet werden soll) -!RST ist NULL, beim übertragen der Software via SWJ kurzzeitig auf HIGH Allerdings ist mir auf gefallen, dass !RST nicht komplett auf 0 V ab fällt, sondern nur auf ca. 1,5V. Vieleicht könnte das ja das Problem sein. Wenn ich die GPIOs direkt in der Main toggel tut sich am Oszi rein gar nichts. Die CPU ist über JTAG bzw. über SWJ ansprechbar. Kann mein Programm ja ohne Probleme in den Flash laden. Am besten spreche ich mal mit dem Hardwareentwickler, der hat zwar vom Cortex keine Ahnung, aber vieleicht weiß er ja noch was... Achso... AS schrieb: > int main (void) > { > ... > return ...; > ... > } > > hübsch ;-) Das "return" wurde schon entfernt... ;-)
Wenn RST Null ist, dann ist doch alles in ordnung. RST ist 0 aktiv. Das heißt bei 0 V macht er nen Reset. Der muß auf 1 gezogen werden für den normalen Betrieb.
Andreas K. schrieb: > Allerdings ist mir auf gefallen, dass !RST nicht komplett auf 0 V ab > fällt, sondern nur auf ca. 1,5V. Vieleicht könnte das ja das Problem > sein. ...
Was ist denn am /RST pin angeschlossen ? Der hat nur nen schwachen internen Pullup von ca. 40 KOhm.
Also der !RST ist mit einem 10k Pulup an 3,3V angeschlossen. Zusätzlich ist noch ein 100nF KeKo zwischen !RST und GND. Habe vorhin mal mit dem Entwickler des Boards telefoniert, der mir sagte, dass der LOW-Pegel maximal 0,8V betragen darf. In meinem Fall sind es aber ca. 1,5V. Also viel zu viel für einen sauberen Reset. Ich versuche mal die !RST Leitung per Hand kurz auf 0V zu legen und schaue ob der Prozessor dann läuft.
Problem gelöst!! :-) Da die Resetleitung im Resetzustand nicht unter 0,8V fällt, wird der Prozessor auch nicht resettet. Resetleitung per Hand mal auf 0V gelegt und siehe da, es funktioniert. :-) Danke an alle für die Hilfe! Gruß Andi
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.