STM32 Anfänger

OP #1941543
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!
#1983523
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.
OP #1984942
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
#1984989
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.