STM32 F103 startet nicht

OP #2232371
Lesenswert?

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
Angehängte Dateien:
(Firma: Raich Gerätebau & Entwicklung) #2232774
Lesenswert?

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
OP #2233512
Lesenswert?

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ß
Gast #2233518
Lesenswert?

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 ;-)
OP #2233656
Lesenswert?

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... ;-)
OP #2233882
Lesenswert?

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.

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