STM32F0 Discovery welche Library wird genutzt (HAL oder SPL)?

Gast #4522976
Lesenswert?

Hallo zusammen, ich werde mich demnächst mit meinem neuen STM32F0 
Discovery Board beschäftigen. Habe mir sämtliche Datenblätter und auch 
die Beispielprogramme heruntergeladen.
Eine Frage habe ich da nur, ST hat ja kürzlich auf die HAL Library 
umgestellt, da ich weder mit der Standard Peripherals Library noch mit 
der HAL etas zu tun gehabt habe würde es mich interessieren, ob die 
Beispiele des Discovery Boards schon in HAL sind oder noch in der alten 
SPL. An was kann man sonst noch erkennen welche Library genutzt wird?

Hier mal ein Codeausschnitt für GPIO:
1
int main(void)
2
{
3
  /*!< At this stage the microcontroller clock setting is already configured, 
4
       this is done through SystemInit() function which is called from startup
5
       file (startup_stm32f0xx.s) before to branch to application main.
6
       To reconfigure the default setting of SystemInit() function, refer to
7
       system_stm32f0xx.c file
8
     */
9

10
  /* GPIOC Periph clock enable */
11
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
12

13
  /* Configure PC8 and PC9 in output pushpull mode */
14
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
15
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
16
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
17
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
18
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
19
  GPIO_Init(GPIOC, &GPIO_InitStructure);
20

21
  /* To achieve GPIO toggling maximum frequency, the following  sequence is mandatory. 
22
     You can monitor PC8 and PC9 on the scope to measure the output signal. 
23
     If you need to fine tune this frequency, you can add more GPIO set/reset 
24
     cycles to minimize more the infinite loop timing.
25
     This code needs to be compiled with high speed optimization option.  */
26
  while (1)
27
  {
28
    /* Set PC8 and PC9 */
29
    GPIOC->BSRR = BSRR_VAL;
30
    /* Reset PC8 and PC9 */
31
    GPIOC->BRR = BSRR_VAL;
32

33
    /* Set PC8 and PC9 */
34
    GPIOC->BSRR = BSRR_VAL;
35
    /* Reset PC8 and PC9 */
36
    GPIOC->BRR = BSRR_VAL;
37

38
    /* Set PC8 and PC9 */
39
    GPIOC->BSRR = BSRR_VAL;
40
    /* Reset PC8 and PC9 */
41
    GPIOC->BRR = BSRR_VAL;
42

43
    /* Set PC8 and PC9 */
44
    GPIOC->BSRR = BSRR_VAL;
45
    /* Reset PC8 and PC9 */
46
    GPIOC->BRR = BSRR_VAL;
47

48
    /* Set PC8 and PC9 */
49
    GPIOC->BSRR = BSRR_VAL;
50
    /* Reset PC8 and PC9 */
51
    GPIOC->BRR = BSRR_VAL;
52

53
    /* Set PC8 and PC9 */
54
    GPIOC->BSRR = BSRR_VAL;
55
    /* Reset PC8 and PC9 */
56
    GPIOC->BRR = BSRR_VAL;
57

58
    /* Set PC8 and PC9 */
59
    GPIOC->BSRR = BSRR_VAL;
60
    /* Reset PC8 and PC9 */
61
    GPIOC->BRR = BSRR_VAL;
62

63
    /* Set PC8 and PC9 */
64
    GPIOC->BSRR = BSRR_VAL;
65
    /* Reset PC8 and PC9 */
66
    GPIOC->BRR = BSRR_VAL;
67

68
    /* Set PC8 and PC9 */
69
    GPIOC->BSRR = BSRR_VAL;
70
    /* Reset PC8 and PC9 */
71
    GPIOC->BRR = BSRR_VAL;
72

73
    /* Set PC8 and PC9 */
74
    GPIOC->BSRR = BSRR_VAL;
75
    /* Reset PC8 and PC9 */
76
    GPIOC->BRR = BSRR_VAL;
77
  }
78
}
Gast #4522985
Lesenswert?

Mit HAL werden GPIO Ports über die Funktionen HAL_GPIO_ReadPin(), 
HAL_GPIO_WritePin(), HAL_GPIO_TogglePin(), HAL_GPIO_LockPin(), etc. 
genutzt.
Bsp.
1
HAL_GPIO_WritePin(LD6_GPIO_Port, LD6_Pin, GPIO_PIN_SET);
2
//oder auch
3
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);

Macht letztendlich aber auch nichts Anderes als in deinem Codeausschnitt

stm32f4xx_hal_gpio.c:
1
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
2
{
3
  /* Check the parameters */
4
  assert_param(IS_GPIO_PIN(GPIO_Pin));
5
  assert_param(IS_GPIO_PIN_ACTION(PinState));
6

7
  if(PinState != GPIO_PIN_RESET)
8
  {
9
    GPIOx->BSRR = GPIO_Pin;
10
  }
11
  else
12
  {
13
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
14
  }
15
}
Gast #4522986
Lesenswert?

Und noch eine Frage zwischendurch, benötige ich das Reference Manual / 
Programming Manual wenn ich die HAL nutze? So wie ich das verstanden 
habe ist es nicht nötig den Controller im Detail zu verstehen wenn ich 
die HAL nutze.
#4523086
Lesenswert?

vs schrieb:
> Und noch eine Frage zwischendurch, benötige ich das Reference Manual

Ja

> So wie ich das verstanden habe ist es nicht nötig den Controller
> im Detail zu verstehen wenn ich die HAL nutze.

Wenn du der Meinung bist, es wäre zu kompliziert oder aufwendig oder 
sonstwie unnötig, den verwendeten µC im Detail zu verstehen, dann 
solltest du am besten gleich die Finger davon lassen und dir ein 
anspruchsloseres Hobby suchen. Vielleicht Briefmarken sammeln.
(Firma: HEGRO GmbH) #4523093
Lesenswert?

Auch wenn Axel teilweise recht hat, eine schöne und treffende 
Formulierung gewählt hat, lass die Definition von "im Detail" mal ausser 
acht. Jeder hat einmal angefangen. Was du brauchst sind auf jeden Fall 
die Manuals und du musst anfangen dich in die Materie einzuarbeiten. 
Ohne die Manuals wirst du nicht viel mehr wie ein paar LEDs zum Blinken 
bringen können. Und wie gesagt, ich empfehle dir mit der SPL anzufangen.
#4523096
Lesenswert?

Reginald L. schrieb:
> Vor allem als Anfänger empfehle ich dir die SPL zu nutzen.

Ich empfehle Anfängern eher, das Datenblatt zu lesen und (wenn nötig) 
den Artikel Bitmanipulation und dann direkt mit den Registern des µC 
und den Bits darin zu arbeiten. Eine HAL im eigentlichen Sinn sind ja 
weder SPL noch das was ST neuerdings HAL nennt. Denn abstrahiert wird 
da gar nichts [1].

Es ist auch nicht wirklich einfacher. Statt den magischen Namen eines 
Registers zu kennen, muß man jetzt einen magischen Funktionsnamen 
kennen. Statt des magischen Namens des Konfigurationsbits den magischen 
Namen des äquivalenten Funktionsparameters. Und natürlich sind beide 
Namen nicht gleich. Ähnlich, aber doch hinreichend verschieden daß man 
trotz Kenntnis des einen den anderen nicht erraten kann. Irgendwie kein 
Vorteil. Außer daß man zusätzlich zum Datenblatt auch noch die 
Beschreibung der Library lesen muß.

[1] Das Kennzeichen einer HAL ist (zumindest nach meinem Verständnis) 
daß die Bedeutung der Funktionsnamen und Parameter von der Hardwareebene 
auf die Applikationsebene verschoben wird. Also statt GPIO_Write(Port, 
Pin, Wert) eine Funktion LED_Error_On(). Statt GPIO_PortA_Write(Byte) 
eine Funktion LCD_Command(Byte). etc. pp.
Die logische Folge ist, daß eine solche HAL nicht generisch sein kann, 
sondern spezifisch für jede Applikation sein muß.
Gast #4523099
Lesenswert?

Axel S. schrieb:
> Wenn du der Meinung bist, es wäre zu kompliziert oder aufwendig oder
> sonstwie unnötig, den verwendeten µC im Detail zu verstehen, dann
> solltest du am besten gleich die Finger davon lassen
Wie maschst du dass aufm PC? Schreibst du deine Programme speziell für 
Core i-5? Und nur für ein spezielles Mainboard, bei dem du jede 
Kleinigkeit ganz genau kennst?
Lass das mal sacken, denk mal darüber nach. ;-)
Gast #4523116
Lesenswert?

no name schrieb:
> Wie maschst du dass aufm PC? Schreibst du deine Programme speziell für
> Core i-5?

Natürlich, ein Treiber - nichts anderes schreibt man ja bei uC 
Peripherie Zugriffen ja - ist auch auf dem PC an die Hardware angepasst. 
Die PC Programme, die nicht an die Details der Hardware angepasst sind, 
benutzen die Hardware Abstraktion des OS. Nur wenn man ein OS mit 
ähnlich vollständiger Abstraktion auf dem uC nutzt, kann man die Details 
der Hardware ignorieren. Allerdings kann man dann auch meistens nicht 
die Spezial Features  einiger uC-spezifischer Peripherie nutzen...
(Firma: HEGRO GmbH) #4523155
Lesenswert?

Axel S. schrieb:
> Ich empfehle Anfängern eher, das Datenblatt zu lesen und (wenn nötig)
> den Artikel Bitmanipulation und dann direkt mit den Registern des µC
> und den Bits darin zu arbeiten.
Vor allem Anfänger wollen möglichst schnell Erfolge sehen. Das bedeutet 
nach einigen Minuten programmieren soll man etwas "sehen" können. Das 
fördert das Selbstbewusstsein und man bleibt am Ball anstatt frustriert 
aufzugeben (der eine früher der andere wesentlich später). Deshalb mein 
Verweis auf die SPL: Es gibt viele Beispielcodes hierzu. Änderungen 
lassen sich aufgrund der Lesbarkeit leichter und schneller 
bewerkstelligen. Mit der nötigen Übung kann man dann auf direkte 
Bitänderungen umsteigen.
Ist natürlich Ansichtssache, welche Methoden man zum Erlernen einer 
Aufgabe bevorzugt, genauso wie beispielsweise bei der Kindererziehung 
oder dem Schulsystem.

no name schrieb:
> Wie maschst du dass aufm PC? Schreibst du deine Programme speziell für
> Core i-5? Und nur für ein spezielles Mainboard, bei dem du jede
> Kleinigkeit ganz genau kennst?
Der Vergleich hinkt etwas. Wenn du ein eigenes OS programmierst, dann 
ja. Falls du auf Windows einen Kreis zeichnen möchtest, eher weniger. 
Auf einem µC programmierst du in Richtung OS. Ansonsten ist es absolut 
so wie Dr.Sommer sagt.
(Firma: HEGRO GmbH) #4523228
Lesenswert?

No name schrieb:
> Nö, die Meisten schreiben Anwendungen. Unsinniger Weise erfinden sie
> dabei das Rad jedesmal neu, weil sie keine libs nutzen. Und genau wie
> heute die C Runtimes normal sind, wird morgen Cube und Co. normal.
Na dann viel Spaß mit deinem Cube und zeitkritischen Anwendungen. Ich 
komme nicht aus der Elektronikerbranche, aber ich kann mir kaum 
vorstellen, dass ein ernsthafter Entwickler Cube benutzt.
#4523268
Lesenswert?

Naja, die Diskussion über den (Un-)Sinn der STM SPL (Standard Peripheral 
Library) bzw. der neuen HAL hatten wir ja schon ein paar mal. Ich habe 
bisher ganz ohne dies Programmiert und nur die HW-Definitionen aus dem 
CMSIS verwendet.

Ich habe mich jetzt bei meinem letzten kleinen Projekt auf dem STM32F030 
mal selbst gezwungen, die SPL zu verwenden.

Positiv:

- Ein paar Kleinigkeiten bei der Initialisierung mit den Init-Funktionen 
werden automatisch beachtet, so dass man sich nicht selbst darum kümmern 
muss

- Es sind auch für Sachen Definitionen vorhanden, die in den normalen 
Standard CMSIS Header-Files fehlen

Negativ:

- Die Strukturen für die Initialisierung nehmen evtl. Speicher (Stack) 
weg

- Natürlich bekomme ich als ehem. ASM-Coder Krätze, wenn ich mir 
überlege, dass ich z.B. zum Setzen oder Abfragen eines Bits ein 
Unterprogramm aufrufe, welches teilweise auch noch relativ sinnfreie 
IF-Abfragen enthält.

Neutral:

- Keine echte HW-Abstraktion, man muss die Beschreibung der Funktionen 
und Register im Ref.manual auf jeden Fall verstanden haben.

- Mit dem SPL bzw. HAL wird es nicht unbedingt einfacher. Letzten Endes 
musste ich nun nicht nur die Funktionen und Bits anhand des Ref.manuals 
verstehen, sondern auch noch zusätzlich die Definitionen bzw. teilweise 
auch die Implementierung(!) der entsprechenden SPL-Funktion anschauen um 
sie einsetzen zu können.

Da aber viele Leute die SPL/HAL einsetzen, werde ich wohl jetzt dabei 
bleiben und im Zweifelsfall die Initialisierung darüber machen und bei 
zeitkritischen Sachen direkt mit den Registern/Bits arbeiten.

Bei den Definitionen für die Bits/HW gibt es aber definitiv 
Verbesserungspotential. Zumindest beim STM32F030 gibt es für einige 
Sachen garkeine Definitionen, da hat sich Atmel beim AVR mehr Mühe 
gegeben.
(Firma: HEGRO GmbH) #4523299
Lesenswert?

No name schrieb:
> Wenn es bei zeitkritischen Anwendungen auf den einzelnen Befehl ankommt,
> hast du einen schwerwiegenden Designfehler. Da solltest du an anderer
> Stelle mehr Hirnschmalz einsetzen.
Nö. Man entscheidet sich immer für einen bestimmten Weg eine 
Problemstellung zu lösen. "Hirnschmalz" kannst du genauso gut mit "Geld" 
ersetzen.
Schwerwiegender Designfehler... neuer Begriff für effizienten Code?
Gast #4523319
Lesenswert?

Was machst du morgen, wenn eine Kleinigkeit ergänzt oder geändert werden 
muss? Du fängst wieder von ganz Vorne an?
Nee, da wirst du nicht weit kommen. Du denkst zu kurz. Die meisten 
Projekte enden nicht mit dem Roll out.
Gast #4523341
Lesenswert?

> auf den einzelnen Befehl ankommt

Das SPL- und besonders das HAL-Gedoehns ist nicht nur einzelner
Befehl mehr.
Da wird teilweise auch voellig ungefragt Funkionalitaet
angeworfen, die man weder braucht noch will.

Fuer die STM32F0 braucht man nicht mehr als das typspezifische
Headerfile (und die Referenzmanuals vom Controller/M0).
Gast #4523366
Lesenswert?

Da ich Anfänger bin stellt sich für mich halt die Frage was ich alles 
lesen muss um den Controller zu programmieren.
Ich will definitiv NICHT in Assembler programmieren sondern in C. Reicht 
das Reference Manual u. Controllerspezifische Datenblatt dafür aus? Wozu 
gibt es das Programmen Manual?

Kurz und knapp gefragt: Was brauche ich mindestens um den STM32F0 in C 
zu programmieren?
#4523373
Lesenswert?

Im controllerspeufisichen Datenblatt sind die einzelnen Pins und ihre 
Spezialfunkionen ("Alternate Functions") definiert. Auch die 
elektrischen Eigenschaften sind dort festgelegt.

Für die Programmierung benötigst Du das Reference Manual zu der Serie.

Im Reference Manual solltest Du Dir auf jeden Fall den Abschnitt zum RCC 
(Clockverteilung) und dann zu der jeweiligen Peripherie anschauen.

Also für den Anfang dann am besten den Abschnitt über die GPIOs.

Viele Peripherieeinheiten haben wirklich viele Features, so dass man 
schnell das Gefühl hat erschlagen zu werden. Aber ich würde mir das 
alles ruhig einmal durchlesen um einen Überblick zu haben und danach 
dann die Stellen mit den wirkich benötigten Funktionen.

Die eigentlichen Einstellungen für die Taktberechnung musst Du nicht 
selbst machen. Das ist alles schon im Startup-File enthalten bzw. Du 
kannst dieses File generieren lassen (dafür gibt es bei STM ein 
Excelsheet mit Makros).
(Firma: HEGRO GmbH) #4523391
Lesenswert?

vs schrieb:
> Kurz und knapp gefragt: Was brauche ich mindestens um den STM32F0 in C
> zu programmieren?
Zuerst mal eine geeignete IDE mit Toolchain, EmBlocks oder CooCox 
benutzen viele. Ich benutze VisualStudio mit VisualGDB.
Dann brauchst du natürlich noch die SPL- (bzw. HAL-) Library. Für die 
Einrichtung einer IDE gibt es massig Tutorials, -> Google.
Wenn du Erfolge sehen willst (und wirklich Anfänger bist(!)), fang bloß 
nicht an die Manuals "durchzulesen" wie hier so mancher empfiehlt. Du 
wirst eh kaum kapieren was da drin steht. Ich spreche aus eigener 
Erfahrung, bin Maschinenbauer und hatte vor einem Jahr meinen ersten 
Kontakt mit µCs. Lade dir trotzdem schon mal das ReferenceManual für 
deinen µC runter. Das ist das wichtigste Dokument, dass du dann immer 
wieder und immer öfter durchblättern wirst. Das ProgrammingManual 
brauchst du auch, dort sind die Hardware-Fakten hinterlegt, wie zb. 
maximale ADC-Taktrate etc.
Einfach mal googlen nach deinem µC und den o.g. Manuals.
Google ist, neben den Manuals, dein wichtigster Begleiter.
Es empfiehlt sich, sich an irgendwelche Examples oder Tutorials zu 
halten und die den Entsprechenden Wünschen anzupassen.

Just my 2cents.
Gast #4523407
Lesenswert?

Ok danke erstmal für die Empfehlungen. Wie sieht es aus wenn ich zB 
weder die SPL noch die HAL  nutzen will, sondern direkt die Register 
beschreiben will? Geht das dann nur noch mit Assembler oder auch mit C? 
Ich frage weil es wohl leute gibt die auf diese Weise ihre eigenen 
kleinen Bibliotheken zusammenbasteln und somit unabhängig von der SPL / 
HAL sind oder was auch immer noch kommen mag.
(Firma: HEGRO GmbH) #4523413
Lesenswert?

vs schrieb:
> Wie sieht es aus wenn ich zB
> weder die SPL noch die HAL  nutzen will, sondern direkt die Register
> beschreiben will? Geht das dann nur noch mit Assembler oder auch mit C?
Das sind zwei verschiedene Paar Stiefel. Du kannst die Register 
natürlich selbst setzen. Ob in Assembler oder in C ist dir überlassen. 
Was natürlich nicht geht, ist SPL in Assembler. Als Anfänger würde ich 
erst mal die Finger vom Assembler lassen. Mag sein, dass man hier mehr 
über die Funktionsweise eines µCs kennenlernt. Für mich wäre das zuviel 
auf einmal.

vs schrieb:
> Ich frage weil es wohl leute gibt die auf diese Weise ihre eigenen
> kleinen Bibliotheken zusammenbasteln und somit unabhängig von der SPL /
> HAL sind oder was auch immer noch kommen mag.
Klar, es gibt auch eine C++ Lib ("STM32plus"). Wie gesagt, für den 
Einstieg empfehle ich SPL.
Gast #4523437
Lesenswert?

Was bei der lesenswerten Dokumentation immer gerne weggelassen wird,
ist die "technische Referenz" von ARM selber.

Nur in Ausnahmefaellen, z.B. Philips, ist das in die Manuals
eingefuegt worden.

Fuer die STM32F0 waere das:
Cortex™-M0
Technical Reference Manual
ARM DDI 0432C

Viel Erfolg!
#4523665
Lesenswert?

vs schrieb:
> Kurz und knapp gefragt: Was brauche ich mindestens um den STM32F0 in C
> zu programmieren?

* Einen PC (vorzugsweise mit Linux, Windows geht aber auch zur Not)
* Reference Manual und Datenblatt für den Controller
* OpenOCD
* GNU Arm Toolchain
* Überdurchschnittliche C-Kenntnisse
* Gute Kenntnisse der verwendeten Tools (Compiler, Linker, Debugger, 
etc)
* Einen brauchbaren Texteditor¹
* Ein paar funktionierende Beispiele zum Einstieg
* Geduld und Ausdauer

______________
¹Den Texteditor wirst Du später (SPÄTER!) durch eine IDE ersetzen, aber 
erst wenn Du verstehst wie alles zusammenhängt, ansonsten wird es von 
Anfang an ein Blindflug im Nebel.
Gast #4523712
Lesenswert?

So langsam kommt in mir die Frage auf ob ich mich als Anfänger mit dem 
stm32 übernommen habe? Es heist doch die seien nicht schwerer als die 
kleinen Controller.    Ich frage weil der letzte Beitrag sich sehr 
abschreckend anhört, alle fangen doch mit einer IDE an, warum nicht mit 
der Zeit immer mehr in den Controller einarbeiten.
#4523733
Lesenswert?

Lass dich nicht entmutigen :) für die STM32's findest du für fast jede 
Frage eine Antwort incl. Beispielcode mit google. Am Anfang ist wichtig 
zu lernen das es wie bei allen Sachen immer Hardliner gibt die man nicht 
zu ernst nehmen sollte :D. Es seiden natürlich man hat lust auf 
Glaubenskriege...

viel Erfolg :)
Gast #4523764
Lesenswert?

no name schrieb:
> Axel S. schrieb:
>> Wenn du der Meinung bist, es wäre zu kompliziert oder aufwendig oder
>> sonstwie unnötig, den verwendeten µC im Detail zu verstehen, dann
>> solltest du am besten gleich die Finger davon lassen
> Wie maschst du dass aufm PC? Schreibst du deine Programme speziell für
> Core i-5? Und nur für ein spezielles Mainboard, bei dem du jede
> Kleinigkeit ganz genau kennst?
> Lass das mal sacken, denk mal darüber nach. ;-)

Du bist echt eine Prothese! Denk darüber nach!
_______________________________________________
@TE
Fang einfach mit der SPL an. Wenn du bei 48Mhz ein 
Geschwindigkeitsproblem findest, dann nehmst du den stm32f103 mit 72Mhz 
oder den stm32f4 discovery mit 168Mhz usw.

BZW du lehrnst effektiv zu programmieren, dann merkst du, dass fast bei 
jeden Projekt ein 8Bitter aussreichend ist.

Ahmen.
Gast #4523765
Lesenswert?

> immer Hardliner gibt

Wenn man einer Sache auf den Grund gehen will, darf man
nicht nur an der Oberflaeche herumkratzen.
Gerade die STM32F0 sind uebersichtlich genug, mit dem
Referenzmanual bewaffnet, auch mal selber an den Knoepfen
zu drehen und das nicht irgendwelchen Libs zu ueberlassen.

Ansonsten wird das Wissen oberflaechlich bleiben, sieht
man hier ja an den vielen Arduino-"Experten".

Bei komplexeren Themen sind Libraries natuerlich der richtige Weg.
Aber hier geht es um den Einstieg.
#4524169
Lesenswert?

./. schrieb:
>Ansonsten wird das Wissen oberflaechlich bleiben, sieht
>man hier ja an den vielen Arduino-"Experten".


Für mich war Arduino der richtige Einstieg. Ich hatte keine großen 
Ziele. Aber mit der Zeit wollte ich mehr und jetzt mache ich 
Zeitkritische Sachen auf dem F0 ohne irgendwelche Libraries...  Ist doch 
immer die Frage was man grade will.
Gast #4524252
Lesenswert?

> Für mich war Arduino der richtige Einstieg. Ich hatte keine großen
> Ziele. Aber mit der Zeit wollte ich mehr und jetzt mache ich
> Zeitkritische Sachen auf dem F0 ohne irgendwelche Libraries...  Ist doch
> immer die Frage was man grade will.

So in etwa habe ich das auch vor gehabt, habe auch schon eine Hand voll 
guter Tutorials. Erstmal einfach anfangen.
Gast #4524482
Lesenswert?

vs schrieb:
> So langsam kommt in mir die Frage auf ob ich mich als Anfänger mit dem
> stm32 übernommen habe?

Kommt drauf an, wie du mental gebaut bist. Im Grunde ist alles durchaus 
einfach, wenn man sich nicht auf Aufgebauschtes stürzt und wenn man 
einigermaßen fix mit dem Kapieren ist.

Also was brauchst du wirklich:
1. eine Toolchain, also Compiler, Assembler, Linker, Hexfilegenerator 
(aka fromelf) und die Bibliotheken zum Compiler.
2. eine Hardware, also deinen Lieblingschip auf einer Leiterplatte.
3. etwas zum Brennen des erzeugten Codes in den Chip. Das hängt vom Chip 
UND von der Leiterplatte ab. Alle (mir bekannten) STM32xyz haben einen 
festeingebauten Bootlader intus, der es gestattet, selbige über eine 
poplige serielle Schnittstelle (z.B. USB->seriell) zu programmieren. 
Parallel dazu haben die meistenauch noch ein JTAG-Interface und darin 
enthalten eine SWD-Interface. Aber für die letzteren brauchst du ein 
spezielles Geschirre, also einen JTAG/SWD-Adapter - und der kann (muß 
aber nicht sein) mit auf der LP sein.
4. einen Editor.
5. ein Brennprogramm, das zu Punkt 3 paßt. Hier hakt es am ehesten. Für 
die Verwendung des Bootladers gibt es ein schlecht gepflegtes Projekt 
bei ST, für SWD könntest du dir einen Seggerschen J-Link Edu kaufen 
(aber der enthält keine Lizenz für JFlash) und ob es ein gutes 
Standalone-Programm für den ST-Link gibt, weiß ich momentan ncht. Das 
alles zusammen ist zumeist der Grund, weswegen hier viele auf irgend 
eine IDE zurückgreifen, da diese zumeist das Brennprogramm eingebaut 
haben. Aber alle diese IDE's haben ihre Nachteile, insbesondere den Hang 
zum Aufgebauschten.
6. ein klitzekleines Stückchen Kenntnis von ARM-Assembler, um einen 
ordentlichen Startupcode für deinen Chip schreiben oder adaptieren zu 
können - UND!!! um wenigstens den blutigen Anfang verstehen zu lernen.
7. Das HW-Manual zu deinem Chip, um nachlesen zu können, was wo an 
welchem Pin raus oder reingehen kann
8. Das Familien-Referenzmanual, um Kenntnis der Hardware-Register und 
systemaufbau zu erlangen
9. Die Schaltung zu deiner Leiterplatte


W.S.
#4524544
Lesenswert?

W.S. schrieb:
...
> 5. ein Brennprogramm, das zu Punkt 3 paßt. Hier hakt es am ehesten. Für
> die Verwendung des Bootladers gibt es ein schlecht gepflegtes Projekt
> bei ST, für SWD könntest du dir einen Seggerschen J-Link Edu kaufen
> ... ob es ein gutes
> Standalone-Programm für den ST-Link gibt, weiß ich momentan ncht.

Wenn man ein unixoides Betriebssystem hat oder ein passend erweitertes 
Windows, dann kann man stm32flash verwenden, um einen STM32 über den 
Bootloader zu flashen. Und stlink oder openOCD liefern einen Debug- 
server für die ST-Link Hardware. Dann kann man (s)ein Programm aus dem 
Debugger heraus auf den Chip laden und auch debuggen.

> 6. ein klitzekleines Stückchen Kenntnis von ARM-Assembler, um einen
> ordentlichen Startupcode für deinen Chip schreiben oder adaptieren zu
> können - UND!!! um wenigstens den blutigen Anfang verstehen zu lernen.

Assembler ist optional. Man kann den Startup-Code durchaus auch in C 
schreiben. Wenn man nicht ohnehin den vorgefertigten Code aus einer 
Library verwendet. Für STM32 hat man da viel Auswahl: SPL, HAL, 
libopencm3. Dazu noch die diveren IDE, die das auch alle enthalten.
Gast #4524618
Lesenswert?

Fuer die STM32F0 gab es, wenn mich recht entsinne, auch eine
"freie" Version eines kommerziellen Compilers.
Entweder wars von IAR oder von Keil.

Da musst Du mal bei ST und/oder hier im Forum mal nach suchen.

Setzt als Betriebssystem Windows voraus, erspart einem aber
am Anfang viele Klimmzuege.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren