Forum: Mikrocontroller und Digitale Elektronik STM32F0 Discovery welche Library wird genutzt (HAL oder SPL)?


von vs (Gast)


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
}

von hp-freund (Gast)


Lesenswert?

vs schrieb:
> An was kann man sonst noch erkennen welche Library genutzt wird?

am HAL_Init(); in main und diversen MX Funktionen

Wenn Du STM32CubeMX benutzen willst werden die Projekte mit HAL erzeugt.
Soll sich aber demnächst evtl. ändern.

von Jemand (Gast)


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
}

von vs (Gast)


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.

von Harry L. (mysth)


Lesenswert?

vs schrieb:
> benötige ich das Reference Manual /
> Programming Manual wenn ich die HAL nutze?

Ja!

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Vor allem als Anfänger empfehle ich dir die SPL zu nutzen.

von Axel S. (a-za-z0-9)


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.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von Axel S. (a-za-z0-9)


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

von no name (Gast)


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

von Dr. Sommer (Gast)


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

von No name (Gast)


Lesenswert?

Treiber, Abstraktion? Und was bewirkt HAL, was SPL?
Was ist los heute, fehlt ne Stunde Schlaf? ?

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von No name (Gast)


Lesenswert?

Reginald L. schrieb:
> Auf einem µC programmierst du in Richtung OS.

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.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von No name (Gast)


Lesenswert?

Wenn es bei zeitkritischen Anwendungen auf den einzelnen Befehl ankommt, 
hast du einen schwerwiegenden Designfehler. Da solltest du an anderer 
Stelle mehr Hirnschmalz einsetzen.

von Markus M. (adrock)


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.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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?

von No name (Gast)


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.

von ./. (Gast)


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

von vs (Gast)


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?

von Markus M. (adrock)


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

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von vs (Gast)


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.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


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.

von klausr (Gast)


Lesenswert?

vs schrieb:
> Wie sieht es aus wenn ich zB
> weder die SPL noch die HAL  nutzen will, sondern direkt die Register
> beschreiben will?

Guckst du hier: http://hertaville.com/stm32f0-gpio-tutorial-part-1.html

Geht natürlich auch in C.

von ./. (Gast)


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!

von vs (Gast)


Lesenswert?

Kennt jemand ne gute HAL Tutorial Seite für den stm32f05?

von Bernd K. (prof7bit)


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.

von vs (Gast)


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.

von Wad W. (wad_wer)


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 :)

: Bearbeitet durch User
von aSma>> (Gast)


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.

von ./. (Gast)


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.

von No name (Gast)


Lesenswert?

aSma>> schrieb:
> Du bist echt eine Prothese!
> Ahmen.

Tja, wenns keine Argumente mehr gibt ... ?
Und das zu Ostern ...?

von Wad W. (wad_wer)


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.

von Nino (Gast)


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.

von vs (Gast)


Lesenswert?

Die Seite Hertaville.com ist echt interessant, hier wird gezeigt wie man 
das gpio Thema komplett ohne Libs und in C angehen kann.

von W.S. (Gast)


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.

von Axel S. (a-za-z0-9)


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.

von ./. (Gast)


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.

von klausr (Gast)


Lesenswert?

./. schrieb:
> Fuer die STM32F0 gab es, wenn mich recht entsinne, auch eine
> "freie" Version eines kommerziellen Compilers.

Keil -> http://www2.keil.com/stmicroelectronics-stm32/mdk

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.