In der beigefügten pdf Datei habe ich einmal aufgeführt, wie die GPIO Registerstruktur der ARM Prozessoren STM32F im Vergleich zu den 8 Bit AVR Prozessoren ist, um Einsteigern, die erste Versuche mit dem 32Bit STM32F Prozessoren zB. mit dem F3 Discovery Board machen möchten, eine Hilfestellung zu geben. Ein einfaches C Program zeigt die Initialisierung der GPIO Ports für elementare LED Ansteuerung und Button Abfrage und die GPIO Programmierung.
Gut geschrieben! Du könntest noch speziell/deutlicher hervorheben, dass unbedingt erst der Clock aktiviert werden muss und dann erst darf die jeweilige Periphere initialisiert werden, denn sonst klappt das nicht.
Eine gute Anleitung, vielen Dank! @Off-Topic (Fortschritt in Übersichtlichkeit und Funktionalität) I/O - Funktion einer Z80 PIO I/O – Funktion eines AVR I/O – Funktion deines ARM STM32
MoinMoin Erstmal vielen Dank für die Einführung, ich hatte mich vor einiger Zeit schonmal mit f3Disco versucht, auch mit CodeBlocks, da bin ich aber schon gescheitert, die ganzen Header und den Compiler richtig zuzuweisen. Nachdem ich einige Zeit Pause machen musste, hab ich das Board nun mal wieder rausgekramt, als ich auf das Tut hier gestoßen bin. Immerhin hab ich CodeBlocks nun so weit, das es versucht, zu compilieren. Ich hab dann das C-File in CodeBlocks eingefügt, auf compilieren geklickt, da hat über die void main (void) gemeckert, die hab ich dann zu ner int main (void) gemacht. Da waren die Warnungen schonmal auf Null.... aber dann gabs ja noch die 9 Fehlermeldungen. Hier mal ein BuildLog: -------------- Build: Debug in MalSehen (compiler: GNU ARM GCC Compiler)--------------- arm-none-eabi-gcc.exe -Wall -g -Os -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\_htmresc -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\De vice\ST\STM32F30x\Include -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\De vice\ST\STM32F30x\Source\Templates\arm -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\In clude -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Li b\ARM -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Li b\GCC -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\RT OS -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\SV D -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\STM32_US B-FS-Device_Driver\inc -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\STM32F30 x_StdPeriph_Driver\inc -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Project\Peripheral _Examples\GPIO_IOToggle -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Utilities\STM32F3_ Discovery -IC:\Programme\CodeBlocks\stm32f3-discovery-basic-template-master -IC:\Programme\CodeBlocks\Projekte\ARM\MalSehen -c main.c -o obj\Debug\main.o arm-none-eabi-g++.exe -o bin\Debug\MalSehen.exe obj\Debug\main.o C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM0b_math.lib C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM0l_math.lib C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM3b_math.lib C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM3l_math.lib C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM4b_math.lib C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM4bf_math.lib C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM4l_math.lib C:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\Libraries\CMSIS\Lib\ ARM\arm_cortexM4lf_math.lib c:/programme/codeblocks/gnu_tools_arm_embedded/bin/../lib/gcc/arm-none-e abi/4.6.2/../../../../arm-none-eabi/lib\libc.a(lib_a-exit.o): In function `exit': exit.c:(.text.exit+0x2c): undefined reference to `_exit' obj\Debug\main.o: In function `InitClock': C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:20: undefined reference to `RCC_HSEConfig' C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:21: undefined reference to `RCC_WaitForHSEStartUp' obj\Debug\main.o: In function `InitGPIOE': C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:26: undefined reference to `RCC_AHBPeriphClockCmd' C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:34: undefined reference to `GPIO_Init' obj\Debug\main.o: In function `InitGPIOA': C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:39: undefined reference to `RCC_AHBPeriphClockCmd' C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:47: undefined reference to `GPIO_Init' obj\Debug\main.o: In function `main': C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:61: undefined reference to `GPIO_SetBits' C:\Programme\CodeBlocks\Projekte\ARM\MalSehen/main.c:67: undefined reference to `GPIO_ResetBits' collect2: ld returned 1 exit status Process terminated with status 1 (0 minutes, 1 seconds) 9 errors, 0 warnings (0 minutes, 1 seconds) wo liegen denn die ganzen "GPIO_ResetBits" und vor allem die RCC_AHBPeriphClockCmd?.. die hatte mir schonmal bei nem Versuch dazwischengefunkt... MfG Chaos P.S. würde es statt den ganzen -IC:\Programme\CodeBlocks\STM32F3-Discovery_FW_V1.1.0\_htmresc usw eigentlich auch reichen einfach nur -IC:\Programme\CodeBlocks\ zu schreiben bzw anzugeben? Findet er sich dann von selbst in den Subdirectories zurecht?
P.P.S. Nun hab ich noch gelesen, das der ganze Ordner, STM32F3-Discovery_FW_V1.1.0, in das Projekt kopiert werden muss. In meinem Fall also in //Codeblock/Projekte/STM32...? oder muss der da noch in //bin oder //obj? Irgendwie ist mir das noch nicht so richtig klar... Heißt das, das ich in jedes neue Projekt immer den ganzen STM32F3-Ordner kopieren muss? mhh, irgendwie macht es keinen Unterschied, egal wohin ich den Ordner kopiere..
Sollte das lieber in nen neuen Thread? Falls ja, könnte ein OP bitte meine beiden Beiträge in nen neuen schieben?
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.