Forum: Mikrocontroller und Digitale Elektronik Hardfault Fehler in Keil mit STM32F103 (cortex m3)


von Alexander S. (dazeki)


Angehängte Dateien:

Lesenswert?

Hallo,
ich benutze ein eigenes Eval Board und hab versucht mit ein paar Zeilen 
Code aus dem Blinky Beispiel ein Programm zu schreiben das LED's mittels 
der GPIO's PE4 und PE5 ansteuert bzw. ein und ausschaltet.

Ich benutze keil und wenn ich das Prog auf die Hardware (STM32F103ZE 
512k) flashe dann gehen zwar die LED's an weil ich sie initialisiere 
aber das Programm läuft nicht an.

Ich hab hierzu mal den Fault Reports Dialog angehängt.

Das Programm läuft irgendwie nicht an , ich hatte auch mal einen Hard 
fault bei R15 (PC) = Programm Counter...

screenshot: http://s7.directupload.net/file/d/2635/zwqcc6kv_png.htm

Ich bin wirklich relativ neu in der Materie. Kann es sein das ich mein 
Projekt falsch aufgebaut habe ? bzw. die ST Std Periph Lib falsch 
eingebunden habe oder irgendwas beachten muss ?

ich füge hier mal auch das Projekt aus Keil an, ich benutz die Version 
4.21:
http://www.mediafire.com/?fmxdytnhibvvqh4      (Zip File, 600Kb)


Vielleicht könnte mir jemand helfen.

LG
Alex


PS. gibts vielleicht irgendwo eine anleitung wie ich ein STM32 Projekt 
mit der ST Std. lib erstelle in Keil also praktisch die Grundlage 
richtig schaffe damit ich richtig loslegen kann?

Ich will erstmal nur GPIO's für LED's benutzen und via SPI, I2C paar 
Sensoren auslesen.
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

In der ST Lib im Ordner Projekts/Template ist ein Beispiel Keil Projekt 
->
Ordner  kopieren/umbenennen und code in der Main ändern.

Grund sätzlich ist es aber nicht schwer so ein Projekt selber 
einzurichten.

1. Projekt erstellen. Aus dem Template Ordner die Main usw c und h 
Dateien in den Projekt ordner kopieren. Die c Dateien aus dem ST Lib ins 
Projekt ein binden, und den Startup code von ST verwenden nicht den Von 
Keil. Dann noch die include verzeichnisse setzen und die Defines 
"USE_STDPERPHLIB_DRIVER" und "STM32....MD" oder so definieren. das wars 
schon.

Versuchs erst mal so

MfG

Tec
von Alexander S. (dazeki)


Lesenswert?

ja das hab ich jetzt auch herausgefunden! danke trotzdem ;)

dennoch hab ich das problem mit dem fehler ... ich glaub irgendwas 
stimmt mit meinem code nicht.
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Dein Projekt baut mein Keil garnicht erst.
Die STLib.lib ist das die von Keil? denn istes lediglich V2.01 oder hast 
du die selber gebaut.

öffne mal dieses Projekt, lösche den Code in der Main und Kopier deinen 
darein. in deinem anderen Projekt war nicht mal Startup Code drin.

STM32\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Templat 
e\MDK-ARM

So ist der Ordner bei mir.

MfG

Tec
von Alexander S. (dazeki)


Lesenswert?

die ist selbst gebaut aber nicht von mir, ich hab die stlib mal 
hochegaleden falls es dich interessiert.

http://www.mediafire.com/?5f9pghmwsf71ij7  ca. 4MB
von Alexander S. (dazeki)


Angehängte Dateien:

Lesenswert?

Tec Nologic schrieb:


> öffne mal dieses Projekt, lösche den Code in der Main und Kopier deinen
> darein. in deinem anderen Projekt war nicht mal Startup Code drin.
>
> STM32\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Templat 
e\MDK-ARM
>


hab alles aus der main gelöscht , auch das inclode von dem ST Eval ...

mein code:
1
#include "stm32f10x.h"
2
#include <stdio.h>
3
4
GPIO_InitTypeDef GPIO_InitStructure;
5
6
int main (void)
7
{
8
 /* GPIOE Periph clock enable */
9
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
10
11
 /*LED blinken lassen an PE4 und PE5*/
12
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5 | GPIO_Pin_4;
13
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
14
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
15
  GPIO_Init(GPIOE, &GPIO_InitStructure);
16
  
17
         while(1){
18
19
    /* Set PE4 5 */
20
    GPIOE->BSRR = GPIO_Pin_4;
21
    GPIOE->BSRR = GPIO_Pin_5;
22
  
23
    /* Reset PE4 5 */
24
    GPIOE->BRR  = GPIO_Pin_4;
25
  GPIOE->BRR  = GPIO_Pin_5;
26
          }
27
28
  }
Frage: muss ich noch timer, pll oder irgendwelche clocks einstellen oder 
wird das mit der vorlage bereits erledigt?

in den preprocessor symbol steht:
USE_STDPERIPH_DRIVER, STM32F10X_HD, USE_STM32100E_EVAL

STM32F10X_HD , da ich einen STM32F103ZE mit 512k benutze.

kann ich das USE_STM32100E EVAL rauslöschen? weil ich ja ein eigenes 
board hab?

... jedenfalls hab ich den code mal ausgeführt, schön ist das dort die 
hardfault handler schleifen existieren.

hab allerdings immer noch die probleme (siehe bild).

Kanns ein hardwaredesign fehler sein?
von Alexander S. (dazeki)


Angehängte Dateien:

Lesenswert?

hab wenn ich ST-Link benutze und die MCU Register auslese die im bild zu 
sehenden werte.

ich hab die mcu erased und auf RUN->HALT geklickt.
dabei entstanden die im bild zu sehenden werte.

jemand eine idee?

soll ich mal das schematic hochladen ?
von Alexander S. (dazeki)


Angehängte Dateien:

Lesenswert?

UPDATE:
wenn ich das board resete dann springt er in den code und ich kann die 
schleife ausführen, die LED's blinken.
Aber was ist das problem dafür das er am anfang die fehler anzeigt und 
die kangsten Core Registerwerte?
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.