mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [STM32_StdPeriph] Verzweiflung mit makefile


Autor: Matthias Blaicher (mabl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Zuerst mal mein Problem:

Ich weiss nicht wie wie ich mit stm32f10x_conf.h umzugehen habe. Die 
StdPeriph Lib setzt die Definition des assert_param Makros in *.c Files 
voraus, ohne dass stm32f10x_conf.h (aus meiner Sicht) eingebunden wird.


Und jetzt die Schritt fuer Schritt beschreibung meines Problems:

Ich bin gerade dabei mich in STM32 Entwicklung einzuarbeiten, und habe 
inzwischen auch einen funktionierenden gcc Toolchain (Das Olimex 
Blinking Light Beispiel tut).

Ich wollte nun die neuste Version STM32F10x_StdPeriph_Lib_V3.3.0 der 
Standard Peripherals Library benutzten, und habe dazu ein makefile 
Template von Micromouser[1] auf mein ETT STM32F103 Development Board [2] 
angepasst.

Das Template compiliert auch soweit, alles gut. Wenn ich jetzt anfange 
Funktion zum Quelltext hinzuzufuegen, geht irgendetwas schief.

Als erstes wollte ich  stm32f10x_rcc.h nutzen, also das mal schnell in 
der stm32f10x_conf.h auskommentiert. Allerdings sehe ich nirgends, wo 
stm32f10x_conf.h includiert wird => Also habe ich sie auch zu meinem 
Hauptfile wo auch die main() drin ist mit aufgenommen.

Das wirft mir dann beim Linken ein
/home/mabl/arm/srcs/STM32_Blinklight/Application.cpp:14: undefined 
reference to `RCC_APB2PeriphClockCmd'

Klar, denn stm32f10x_rcc.c wurde ja nicht compiliert. Also das noch 
schnell zu SRC im makefile hinzu gefuegt. Der naechste Fehler ist dann:
Compiling C: ./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c \
arm-none-eabi-g++ -c -mthumb -mcpu=cortex-m3 -mthumb-interwork -I. \
-gdwarf-2 -Dgcc -DSTM32F10X_MD   -Os -ffunction-sections -fdata-sections \
-Wall -Wimplicit  -Wcast-align -Wpointer-arith -Wswitch -Wredundant-decls \
-Wreturn-type -Wunused -Wa,-adhlns=\
./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.lst  \
-I./Libraries/STM32F10x_StdPeriph_Driver/inc \
-I./Libraries/CMSIS/CM3/CoreSupport \
-I./Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -MD -MP \
-MF .dep/stm32f10x_rcc.o.d -fno-rtti -fno-exceptions \
./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c -o stm32f10x_rcc.o 
./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c: In function 'void RCC_HSEConfig(uint32_t)':
./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c:282: error: 'assert_param' was not declared in this scope

Gut er kennt also das assert_param macro nicht, was in stm32f10x_conf.h 
definiert ist. Leider gibt es aber kein include in stm32f10x_rcc.c 
welches stm32f10x_conf einbindet. Da ich die Library aber ungern 
modifizieren will, kann ich in stm32f10x_rcc.c ja kein #include 
stm32f10x_conf.h einfuegen.

Irgendwie bin ich also zu doof dazu herauszufinden wie man mit 
stm32f10x_conf.h umgeht. Ich habe auch schon das CHM Manual (doofes 
Format..) durchgeschaut und nichts gefunden. Die Beispiele die bei der 
Lib dabei sind, nutzen leider auch kein makefile.


Ich hoffe, dass mein Problem irgendwie etwas verstaendlich wird,

Matthias

[1] 
http://www.micromouseonline.com/blog/2009/10/19/an...
[2] http://www.futurlec.com/STM32_Development_Board.shtml

Autor: Hinweis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Füg mal ein -DUSE_STDPERIPH_DRIVER zur Makefile hinzu

Autor: Matthias Blaicher (mabl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, vielen Dank! Das war der Fehler. Zumindest compiliert es jetzt 
durch.

Komisch, dass ich USE_STDPERIPH_DRIVER nicht im CHM finden kann... In 
steht:
#if !defined  USE_STDPERIPH_DRIVER
/**
 * @brief Comment the line below if you will not use the peripherals drivers.
   In this case, these drivers will not be included and the application code will 
   be based on direct access to peripherals registers 
   */
  /*#define USE_STDPERIPH_DRIVER*/
#endif

Der Einstieg in M3 ist definitiv um einiges härter als ich dachte...

Autor: Sebastian M. (noobuntu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder fügst du im Makefile -DUSE_STDPERIPH_DRIVER ein oder
entfernst die Kommentarzeichen im File stm32F10x.h sodass dort
#if !defined  USE_STDPERIPH_DRIVER
/**
 * @brief Comment the line below if you will not use the peripherals drivers.
   In this case, these drivers will not be included and the application code will 
   be based on direct access to peripherals registers 
   */
  #define USE_STDPERIPH_DRIVER
#endif
steht.

Ich finde das bei der STM Lib ein bisschen blöd, dass man sich am Anfang 
mal das stm32f103_conf.h und stm32f10x.h File vornehmen und einige 
Zeilen auskommentieren muss, damit sie funktioniert. Ging bei mir auch 
ne Weile bis ich das kapiert habe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.