Hallo zusammen, ich baue gerade meinen ersten C Code für ein STM32F0Discovery zusammen und versuche eine LED zum leuchten zu bringen. Als Software verwende ich Keil uVision V5.12 Beim Compilieren kommt folgende Fehlermeldung: Rebuild target 'Target 1' compiling main.c... compiling Buttons_STM32F0-Discovery.c... compiling LED_STM32F0-Discovery.c... compiling RTX_Conf_CM.c... assembling startup_stm32f051.s... compiling system_stm32f0xx.c... linking... .\Objects\gpiotest.axf: Error: L6218E: Undefined symbol GPIO_Init (referred from main.o). .\Objects\gpiotest.axf: Error: L6218E: Undefined symbol GPIO_WriteBit (referred from main.o). .\Objects\gpiotest.axf: Error: L6218E: Undefined symbol RCC_AHBPeriphClockCmd (referred from main.o). Not enough information to list image symbols. Finished: 1 information, 0 warning and 3 error messages. ".\Objects\gpiotest.axf" - 3 Error(s), 0 Warning(s). Target not created. Kann mir jemand auf die Sprünge helfen wo das herkommen könnte? Anbei noch mein Code: #include "stm32f0xx_gpio.h" #include "stm32f0xx_rcc.h" int main(void) { GPIO_InitTypeDef GPIO_InitStructure; SystemInit(); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_SET); while(1) { }}
Muss da evtl. noch die Library in das Projekt mit eingebunden werden?
Die jeweiligen ".h"-Dateien liegen bereits im selben Ordner in dem das Projekt hinterlegt ist.
Die .h Datei ist ja nur der Header für die Lib damit der Compiler wieß welche Funktionen usw. in der Lib vorhanden sind. Der Linker, welcher ja die Fehler auswirft, brauch dann aber die eigentliche Lib um sie mit in den Maschinencode zu linken. Die scheint er nicht zu finden.
Also die jeweils zugehörigen ".c"-Dateien? Die liegen auch im selben Verzeichnis wie die ".h"-Dateien und das Projekt selbst.
Mittlerweile bekomm ich folgenden Fehler: Rebuild target 'Target 1' compiling main.c... linking... .\Objects\gpiotest.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST. Not enough information to list image symbols. Not enough information to list the image map. Finished: 2 information, 0 warning and 1 error messages. ".\Objects\gpiotest.axf" - 1 Error(s), 0 Warning(s). Target not created. Nach dem Doppelklick auf .\Objects\gpiotest.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST. Erscheint folgendes Fenster mit diesem Inhalt: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00010000 { ; load region size_region ER_IROM1 0x08000000 0x00010000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00002000 { ; RW data .ANY (+RW +ZI) } } Mittlerweile bin ich ratlos. Ich glaube Mikrocontroller sind nichts für mich. Dass das überhaupt jemand macht bei dem komplizierten **** :/
Wenn's .c Datein sind, dann ja. Nur dadurch dass sie im selben Ordner liegen werden sie noch lange nicht in das Projekt eingebunden. Die musst du sicher noch manuell zum Projektbaum hinzufügen. Kenn mich war mit Keil nicht aus, denke aber dass es hier genau so ist wie bei anderen Toolchains.
Habe sie manuell hinzugefügt jetzt sind es anstatt 1 Error plötzlich 1 Error und 48 Warnings -.- stm32f0xx_rcc.c(1726): warning: #223-D: function "assert_param" declared implicitly assert_param(IS_RCC_GET_IT(RCC_IT));
Die Pfade zu den Headern müssen dem Projekt bekannt gemacht werden: Rechter Mausklick auf Projekt -> Options for Target -> C/C++ -> Include Paths
Nachtrag: Zum Benutzen von Assert muss ein define USE_FULL_ASSERT vorhanden sein.
Bringt leider auch keine Besserung, ein Error jagt den nächsten: Rebuild target 'Target 1' compiling main.c... ..\gpiotest\core_cm0.h(127): error: #5: cannot open source input file "core_cmInstr.h": No such file or directory #include <core_cmInstr.h> /* Core Instruction Access */ main.c: 0 warnings, 1 error compiling stm32f0xx_gpio.c... ..\gpiotest\core_cm0.h(127): error: #5: cannot open source input file "core_cmInstr.h": No such file or directory #include <core_cmInstr.h> /* Core Instruction Access */ stm32f0xx_gpio.c: 0 warnings, 1 error compiling stm32f0xx_rcc.c... ..\gpiotest\core_cm0.h(127): error: #5: cannot open source input file "core_cmInstr.h": No such file or directory #include <core_cmInstr.h> /* Core Instruction Access */ stm32f0xx_rcc.c: 0 warnings, 1 error ".\Objects\gpiotest.axf" - 3 Error(s), 0 Warning(s). Target not created. Ich gebs auf...
Es steht doch alles da. Er findet die Dateien nicht. Entweder weil es sie nicht gibt oder der Include-Path nicht vorhanden bzw. falsch ist. Es empfiehlt sich, den kompletten "inc"-Ordner der Lib einzutragen, dann muss man auch nicht einzelne Header in das eigene Codeverzeichnis kopieren. core_cm0.h hat er ja nun bereits gefunden. Darin wird dann core_cmInstr.h inkludiert, was er wiederum nicht kennt.
Habe jetzt alles aber auch wirklich alles was ich an .c und .h Dateien gefunden hab eingebunden aber es tut sich nichts. Die Errors wachsen munter weiter.... Rebuild target 'Target 1' compiling main.c... stm32f0xx_conf.h(34): error: #5: cannot open source input file "stm32f0xx_adc.h": No such file or directory #include "stm32f0xx_adc.h" main.c: 0 warnings, 1 error compiling stm32f0xx_gpio.c... stm32f0xx_conf.h(34): error: #5: cannot open source input file "stm32f0xx_adc.h": No such file or directory #include "stm32f0xx_adc.h" stm32f0xx_gpio.c: 0 warnings, 1 error compiling Driver_ETH_MAC.c... Driver_ETH_MAC.c(1): error: #5: cannot open source input file "Driver_ETH_MAC.h": No such file or directory #include "Driver_ETH_MAC.h" Driver_ETH_MAC.c: 0 warnings, 1 error compiling Driver_ETH_PHY.c... Driver_ETH_PHY.c(1): error: #5: cannot open source input file "Driver_ETH_PHY.h": No such file or directory #include "Driver_ETH_PHY.h" Driver_ETH_PHY.c: 0 warnings, 1 error compiling Driver_Flash.c... Driver_Flash.c(1): error: #5: cannot open source input file "Driver_Flash.h": No such file or directory #include "Driver_Flash.h" Driver_Flash.c: 0 warnings, 1 error compiling Driver_I2C.c... Driver_I2C.c(2): error: #5: cannot open source input file "Driver_I2C.h": No such file or directory #include "Driver_I2C.h" Driver_I2C.c: 0 warnings, 1 error compiling Driver_MCI.c... Driver_MCI.c(2): error: #5: cannot open source input file "Driver_MCI.h": No such file or directory #include "Driver_MCI.h" Driver_MCI.c: 0 warnings, 1 error compiling Driver_SPI.c... Driver_SPI.c(1): error: #5: cannot open source input file "Driver_SPI.h": No such file or directory #include "Driver_SPI.h" Driver_SPI.c: 0 warnings, 1 error compiling Driver_USART.c... Driver_USART.c(1): error: #5: cannot open source input file "Driver_USART.h": No such file or directory #include "Driver_USART.h" Driver_USART.c: 0 warnings, 1 error compiling Driver_USBD.c... Driver_USBD.c(1): error: #5: cannot open source input file "Driver_USBD.h": No such file or directory #include "Driver_USBD.h" Driver_USBD.c: 0 warnings, 1 error compiling Driver_USBH.c... Driver_USBH.c(4): error: #5: cannot open source input file "Driver_USBH.h": No such file or directory #include "Driver_USBH.h" Driver_USBH.c: 0 warnings, 1 error assembling startup_stm32f0xx.s... assembling startup_stm32f0xx_ld.s... assembling startup_stm32f030.s... assembling startup_stm32f031.s... assembling startup_stm32f042.s... assembling startup_stm32f051.s... assembling startup_stm32f072.s... assembling startup_stm32f091.s... compiling Buttons_STM32F0-Discovery.c... C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Device\Include\stm32f0xx.h( 5531): error: #5: cannot open source input file "stm32f0xx_conf.h": No such file or directory #include "stm32f0xx_conf.h" C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Boards\ST\STM32F0-Discovery \Common\Buttons_STM32F0-Discovery.c: 0 warnings, 1 error compiling LED_STM32F0-Discovery.c... C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Device\Include\stm32f0xx.h( 5531): error: #5: cannot open source input file "stm32f0xx_conf.h": No such file or directory #include "stm32f0xx_conf.h" C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Boards\ST\STM32F0-Discovery \Common\LED_STM32F0-Discovery.c: 0 warnings, 1 error compiling RTX_Conf_CM.c... assembling startup_stm32f051.s... compiling system_stm32f0xx.c... C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Device\Include\stm32f0xx.h( 5531): error: #5: cannot open source input file "stm32f0xx_conf.h": No such file or directory #include "stm32f0xx_conf.h" RTE\Device\STM32F051R8\system_stm32f0xx.c: 0 warnings, 1 error compiling FS_Config.c... C:\Keil_v5\ARM\PACK\Keil\MDK-Middleware\6.2.0\FileSystem\Include\rl_fs_l ib.h(14): error: #5: cannot open source input file "Driver_Flash.h": No such file or directory #include "Driver_Flash.h" RTE\File_System\FS_Config.c: 0 warnings, 1 error ".\Objects\test.axf" - 15 Error(s), 0 Warning(s). Target not created.
Mittlerweile bin ich wieder in der Ausgangssituation... Vielleicht erbarmt sich ja doch noch jemand von euch mir weiterzuhelfen. Rebuild target 'Target 1' compiling main.c... main.c(36): warning: #1-D: last line of file ends without a newline }} main.c: 1 warning, 0 errors compiling Buttons_STM32F0-Discovery.c... compiling LED_STM32F0-Discovery.c... assembling startup_stm32f051.s... compiling system_stm32f0xx.c... linking... .\Objects\test.axf: Error: L6218E: Undefined symbol GPIO_Init (referred from main.o). .\Objects\test.axf: Error: L6218E: Undefined symbol GPIO_StructInit (referred from main.o). .\Objects\test.axf: Error: L6218E: Undefined symbol GPIO_WriteBit (referred from main.o). .\Objects\test.axf: Error: L6218E: Undefined symbol RCC_AHBPeriphClockCmd (referred from main.o). Not enough information to list image symbols. Finished: 1 information, 0 warning and 4 error messages. ".\Objects\test.axf" - 4 Error(s), 1 Warning(s). Target not created.
DerM schrieb: > Mittlerweile bin ich ratlos. DerM schrieb: > Ich gebs auf... Mittlerweile bin ich geneigt, mit dir GANZ HEFTIG zu schimpfen! Also sorry für die folgenden Entgleisungen... Hör doch ENDLICH auf, zu allererst in irgend einer IDE herumzugeigen und irgendwelche SCHEISS-Libs benutzen zu wollen, in die du entweder noch nie einen Blick geworfen hast, oder die du beim Betrachten nicht verstanden hast. Also: Lade dir hier aus dem Forum mal die "Lernbetty" herunter und schau dir an, wie man sowohl beim Keil als auch beim GCC die eigentlichen Tools (Compiler, Assembler, Linker, Fromelf usw.) SELBST aufruft. Dort findest du dann auch Batch-Dateien zum Durchziehen der kompletten Übersetzungsläufe und du findest dort auch die .xcl Dateien (eXtended Command Line), wo du sehr schön sehen kanst, was alles die jeweiligen Tools angeboten kriegen müssen, um korrekt zu funktionieren. Lerne daraus. Du wirst dann sehr schnell sehen, daß du für den Fall, daß du irgend eine Fremd-Lib wie z.B. diese unsägliche ST-Lib zu benutzen gedenkst, selbige eben auch mit kompilieren mußt, um die daraus entstehenden Objektfiles ( *.o oder *.obj) zu erzeugen - und daß du diese dem Linker eben auch mit anbieten mußt. Mein Rat: Lerne zu allererst den Controller kennen, dann die eigentlichen Tools kennen und fange erst danach an, mit irgendwelcher Zusatz-Software wie IDE, Fremdlibs usw. herumzuwurschteln. W.S.
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.