Forum: Mikrocontroller und Digitale Elektronik STM32 Anfänger


von Matze T. (gruetzwurschd)


Lesenswert?

Hallo Leute,

Ich muss/will mich in die Materie der ARM Cortex M3 prozessoren von ST 
einarbeiten.

Ich hab mir schon die Hilfe-Artikel hier auf der Webseite durchgelesen. 
Und auch die Foren habe ich durchforstet. Aber ich habe zum Thema STM32 
noch ein paar fragen.

Ich habe hier auf meinen Tisch folgendes liegen:
-Segger J-Link
-PC mit einer kommerziellen Lizenz vom Rowley Cross Studio
-Ein Evaluationboard vom Typ STM3210E-Eval

Ich hab jetzt auch die Demo-Progrämmchen von ST auf das Board 
draufgebrannt und geschafft das die LED's blinken.

Jetzt geht es daran, die ersten kleinen Programme selber zu schreiben.

Ich habe mir Über den Package-Manager das Package für den STM32 
installiert.

Meine fragen sind:
-Was hat es mir gebracht das Package zu installieren?

-Für die STM32 bietet ST eine stdperiph lib und eine USB-FS... lib. Muss 
ich nun die darin enthaltenen dateien in irgendeinen library ordner vom 
Rowley kopieren, oder muss ich, sobald ich beispielsweise den ADC 
verwenden will die entsprechenden Dateien in den Projektordner Kopieren 
und sozusagen "vor ort" einbinden mittels #include"..."

-Wie sieht das "minimalprogramm" aus um eine LED zum leuchten zu 
bringen, bzw. einen Pin auf high, bzw auf low zu setzen.

Bitte habt bisschen Nachsicht mit meinen evtl. "dummen" fragen. Ich 
komme aus der 8 und 16 bit ecke von atmel und microchip. ARM's sind für 
mich absolutes Neuland.

Danke für eure Hilfe im Voraus

Grüße Tarkan

PS: Ich habe die anderen Controller in ANSI C programmiert. Ein Umstieg 
von C auf C++ scheint mir in diesem Kontext Ratsam. Daher beim Helfen 
bitte von einem C++ "nicht-profi" ausgehen :) Danke!

von Matze T. (gruetzwurschd)


Lesenswert?

Hallo Leute,

trotz intensiver beschäftigung mit dem Thema komme ich auf keinen grünen 
Zweig.

Weiß jemand wo man sich vielleicht ein kleines Tutorial dafür ansehen 
kann? Ich bin echt am verzewifeln!!

Grüße Tarkan

von R. A. (Gast)


Lesenswert?


von Matthias K. (matthiask)


Lesenswert?

In der Stdperiph Lib sind viele Beispiele drin und auch Projektvorlagen 
(Templates) für unterschiedliche IDE/Systeme. Da kannst Du Dir den 
Grund-Aufbau eines Projektes rausnehmen.

Ansonsten hier:
http://www.mikrocontroller.net/articles/Kategorie:STM32
Beitrag "STM32 und Rowley CrossStudio"

>Ich habe die anderen Controller in ANSI C programmiert.
Das ist gut und sollte auch bei den STM32 so bleiben.

> Ein Umstieg >von C auf C++ scheint mir in diesem Kontext Ratsam.
Nicht zu empfehlen, die M3 werden fast ausschließlich in ANSI C 
programmiert, C++ ist erst ab ARM9 zu empfehlen.

von R. A. (Gast)


Lesenswert?

Sorry falscher Lnk!!

http://www.hitex.com/index.php?id=850

Anmelden und guide herunterladen. Fand ich nich schlecht!

MfG

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


Lesenswert?

Wichtig:

Wenn man mit gcc eine C-Datei mit dem Dateiname "MeinCode.C" kompilliert 
wird diese als C++ erkannt. Wenn der Dateiname "MeinCode.c" ist, so wird 
diese als C Datei kompilliert.

Merke: Endungen von Dateinamen immer klein schreiben!

von Matze T. (gruetzwurschd)


Lesenswert?

Hallo Leute,

danke für die Antworten. Ich habe mich jetzt noch intensiver mit der 
Library auseinandergesetzt.

Ich hab es auch zum kompilieren bekommen, indem ich alles in einen 
Ordner reinkopert habe und den Preprozessor angeweisen habe dort 
ebenfalls nach headerdateien zu suchen. Außerdem habe ich alle C-dateien 
in mein Projekt eingebunden.
desweiteren war es nötig die datei stm32f10x_conf.h sobald ich die datei 
zusätlich einbinde lässt es sich kompilieren.

was mich interessieren würde wäre, was hat der folgende code zu 
bedeuten:
1
/* Exported types ------------------------------------------------------------*/
2
/* Exported constants --------------------------------------------------------*/
3
/* Uncomment the line below to expanse the "assert_param" macro in the 
4
   Standard Peripheral Library drivers code */
5
// #define USE_FULL_ASSERT    1 
6
7
/* Exported macro ------------------------------------------------------------*/
8
#ifdef  USE_FULL_ASSERT
9
10
/**
11
  * @brief  The assert_param macro is used for function's parameters check.
12
  * @param  expr: If expr is false, it calls assert_failed function
13
  *   which reports the name of the source file and the source
14
  *   line number of the call that failed. 
15
  *   If expr is true, it returns no value.
16
  * @retval None
17
  */
18
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
19
/* Exported functions ------------------------------------------------------- */
20
  void assert_failed(uint8_t* file, uint32_t line);
21
#else
22
  #define assert_param(expr) ((void)0)
23
#endif /* USE_FULL_ASSERT */
24
25
#endif /* __STM32F10x_CONF_H */

sobald ich die zeile

// #define USE_FULL_ASSERT    1

auskommentiere funktioniert alles. Wenn ich die zeile im code habe lässt 
es sich nihct kompilieren.

Danke für eure antworten
gruß Tarkan

von Simon H. (simi)


Lesenswert?

Matthias K. schrieb:
>> Ein Umstieg >von C auf C++ scheint mir in diesem Kontext Ratsam.
> Nicht zu empfehlen, die M3 werden fast ausschließlich in ANSI C
> programmiert, C++ ist erst ab ARM9 zu empfehlen.


Warum denn das? Was spricht gegen C++? Der Overhead kann's schon mal 
nicht sein, der ist nämlich marginal (vorausgesetzt, man wird nicht 
übermütig).

von Simon H. (simi)


Lesenswert?

Wegen dem // #define USE_FULL_ASSERT    1 :

Wenn Du das definierst, dann definierst Du ein Makro:

  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t 
*)__FILE__, _LINE_))

Also: Jedesmal, wenn Du im Code

assert_param(x>0)

schreibst, ersetzt der Compiler (nö, der Preprozessor) Dir das in einen 
Aufruf von

assert_failed()


In dieser Routine kannst Du nun irgendwas programmieren, das z.B. eine 
Fehlermeldung auf Deinem Supidupi-OLED-Bildschirm (den Du mal an Deinem 
Gerät dran haben wirst :-) ausgibt:
"Fehler auf Zeile 4523 von main.c! Eine Assertion ist nicht 
eingetreten!"
(obiges Beispiel assert_param(x>0) würde z.B. in einer sqrt-Funktion 
Sinn machen).

Natürlich musst Du die Methode aber noch schreiben! Ist dann praktisch 
für Debugging, und beim Release kannst Du USE_FULL_ASSERT dann wieder 
wegnehmen, um Overhead zu reduzieren.

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.