Forum: Projekte & Code AVR ARM STM32F3 Discovery GPIO Einführung


von Axel S. (axelac)


Angehängte Dateien:

Lesenswert?

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.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

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

von J. T. (chaoskind)


Lesenswert?

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?

von J. T. (chaoskind)


Lesenswert?

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..

von J. T. (chaoskind)


Lesenswert?

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
Noch kein Account? Hier anmelden.