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


von Matthias B. (mabl)


Angehängte Dateien:

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:
1
Compiling C: ./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c \
2
arm-none-eabi-g++ -c -mthumb -mcpu=cortex-m3 -mthumb-interwork -I. \
3
-gdwarf-2 -Dgcc -DSTM32F10X_MD   -Os -ffunction-sections -fdata-sections \
4
-Wall -Wimplicit  -Wcast-align -Wpointer-arith -Wswitch -Wredundant-decls \
5
-Wreturn-type -Wunused -Wa,-adhlns=\
6
./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.lst  \
7
-I./Libraries/STM32F10x_StdPeriph_Driver/inc \
8
-I./Libraries/CMSIS/CM3/CoreSupport \
9
-I./Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -MD -MP \
10
-MF .dep/stm32f10x_rcc.o.d -fno-rtti -fno-exceptions \
11
./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c -o stm32f10x_rcc.o 
12
./Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c: In function 'void RCC_HSEConfig(uint32_t)':
13
./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/another-stm32-project-template
[2] http://www.futurlec.com/STM32_Development_Board.shtml

von Hinweis (Gast)


Lesenswert?

Füg mal ein -DUSE_STDPERIPH_DRIVER zur Makefile hinzu

von Matthias B. (mabl)


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:
1
#if !defined  USE_STDPERIPH_DRIVER
2
/**
3
 * @brief Comment the line below if you will not use the peripherals drivers.
4
   In this case, these drivers will not be included and the application code will 
5
   be based on direct access to peripherals registers 
6
   */
7
  /*#define USE_STDPERIPH_DRIVER*/
8
#endif

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

von Sebastian M. (noobuntu)


Lesenswert?

Entweder fügst du im Makefile -DUSE_STDPERIPH_DRIVER ein oder
entfernst die Kommentarzeichen im File stm32F10x.h sodass dort
1
#if !defined  USE_STDPERIPH_DRIVER
2
/**
3
 * @brief Comment the line below if you will not use the peripherals drivers.
4
   In this case, these drivers will not be included and the application code will 
5
   be based on direct access to peripherals registers 
6
   */
7
  #define USE_STDPERIPH_DRIVER
8
#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.

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.