Forum: Mikrocontroller und Digitale Elektronik Arduino STM32Duino


von chris (Gast)


Lesenswert?

Das aktuelle Arduino Framework von STM unterstützt mittlerweile einige 
Boards:

https://github.com/stm32duino/Arduino_Core_STM32

Leider muss man sagen, dass es immer wieder Fallstricke gibt, bei denen 
der ein- oder andere Treiber nicht läuft. Vieles läuft allerdings auch 
schon.

Nichtsdestotrotz mag es vielleicht Sinn haben, sich trotzdem einmal 
damit zu beschäftigen.

Im Moment versuche ich heraus zu kriegen, auf welche Pins man eine 
HardwareSerial Schnittstelle auf einem H743 Board umbiegen kann und 
welche am besten geeignet sind.

https://github.com/stm32duino/wiki/wiki/API#hardwareserial

Hat jemand einen Tipp?

von Christopher J. (christopher_j23)


Lesenswert?


von Guest (Gast)


Lesenswert?

Christopher J. schrieb:
> Guckst du entweder im Datenblatt oder eben z.B. hier:
> 
https://github.com/stm32duino/Arduino_Core_STM32/blob/master/variants/NUCLEO_H743ZI/PeripheralPins.c#L274

Wie kann man den armen H7 mit dem Arduino Framework nur so böse 
kastrieren :(

Mein Tipp, Wenn du schon so einen mächtigen uC benutzt dann programmier 
ihn richtig...

von chris (Gast)


Lesenswert?

>Guckst du entweder im Datenblatt oder eben z.B. hier:

Danke, habe ich schon gesehen. Irgendwo habe meine ich auch verstanden 
zu haben, dass die Standart-UART ( also die, welch mit Serial.print 
angesteuert wird ) UART3 ist, richtig?

Möglich wäre also z.B.
HardwareSerial Serial7(PE7, PA15);

Das ist ja ein multidimensionales Suchspiel, die Anschlüsse auf dem 
Board wieder zu finden. Die sind ja kreuz und quer verteilt ... und sie 
liegen nicht auf den Pfostenbuchsen.

von chris (Gast)


Lesenswert?

Autor: Guest (Gast)
>Mein Tipp, Wenn du schon so einen mächtigen uC benutzt dann programmier
>ihn richtig...

Super Idee. Und wie ziehst Du dann das gesamte 100k-Lines große Programm 
nachher auf den K210 um, der bei mir schon auf dem Tisch liegt?

von Guest (Gast)


Lesenswert?

chris schrieb:
> Super Idee. Und wie ziehst Du dann das gesamte 100k-Lines große Programm
> nachher auf den K210 um, der bei mir schon auf dem Tisch liegt?


Du "Programmierst" einen 64 Bit dual core mit der arduino IDE? Ich nehme 
es zurück, das ist ja eine noch viel schlimmere Kastration :(

Da fehlen mir jetzt etwas die Worte, viel Erfolg bei deinem Projekt.

von Bernd (Gast)


Lesenswert?

Guest schrieb:
> Da fehlen mir jetzt etwas die Worte, viel Erfolg bei deinem Projekt.

Da kann ich mich nur anschließen.

Ich kann nicht nachvollziehen wie man bei so leistungsstarken 
Controllern so eine scheiß IDE benutzen kann. Ich muss zugeben 
angefangen habe ich auch damit, bin aber schnell davon weg. Ich habe 
selten Bibliotheken mit so viel Overhead erlebt. Und der fehlende 
Debugger ist auch ein Krampf.

von Christopher J. (christopher_j23)


Lesenswert?

chris schrieb:
> Irgendwo habe meine ich auch verstanden
> zu haben, dass die Standart-UART ( also die, welch mit Serial.print
> angesteuert wird ) UART3 ist, richtig?

Default ist bei den Nucleos vermutlich immer der UART, der am ST-Link 
hängt und per USB als Virtual COM-Port durchgeschleift wird. Für dein 
Board ist das wohl UART3. Kannst du einfach in der variant.h 
nachschauen: 
https://github.com/stm32duino/Arduino_Core_STM32/blob/master/variants/NUCLEO_H743ZI/variant.h#L203


chris schrieb:
> Möglich wäre also z.B.
> HardwareSerial Serial7(PE7, PA15);

Sollte gehen, ja.


chris schrieb:
> Das ist ja ein multidimensionales Suchspiel, die Anschlüsse auf dem
> Board wieder zu finden. Die sind ja kreuz und quer verteilt ... und sie
> liegen nicht auf den Pfostenbuchsen.

Joa, einfacher ist es die Pins aus einem ordentlichen Pinout-Diagramm 
herauszuziehen. Dann siehst du auch schon direkt ob und mit welcher 
weiteren Peripherie das dann kollidiert:
https://os.mbed.com/platforms/ST-Nucleo-H743ZI/

: Bearbeitet durch User
von chris (Gast)


Lesenswert?

Autor: Guest (Gast) , Bernd (Gast)
>...

Ich habe mindestens 20 Jahre MC-Entwicklung hinter mir. Da wo ihr beide 
seit war ich vor 10 Jahren, mittlerweile interessiert mich nur noch 
Algorithmik und Signalverarbeitung. Die MCUs sind für mich nur noch 
austauschbare Platformen.

>Ich kann nicht nachvollziehen wie man bei so leistungsstarken
>Controllern so eine scheiß IDE benutzen kann.

Tu mir den Gefallen und mach dich mal kundig, bevor Du irgendwelchen 
Senf von Dir gibst.

Christopher J. (christopher_j23)
>Joa, einfacher ist es die Pins aus einem ordentlichen Pinout-Diagramm
>herauszuziehen. Dann siehst du auch schon direkt ob und mit welcher
>weiteren Peripherie das dann kollidiert:

Muchas Gracias :-)

von hochsitzcola (Gast)


Lesenswert?

Hallo zusammen,

ich habe bisher mit der Maple-Implementation von Roger Clark und den 
einfachen Blue Pill Boards gearbeitet. Hier musste man den Bootloader 
erst mal über UART oder STLink flashen, um dann über den 
Micro-USB-Anschluß vom Bluepill flashen zu können.

Im neuen STM32duino direkt von ST werden verschiedene Upload Methoden 
beschrieben.
https://github.com/stm32duino/wiki/wiki/Upload-methods

Wie kann ich denn die Methode STM32CubeProgrammer -> serial nutzen? Geht 
das über den Micro-USB Anschluß bei einem jungfräulichen Blue-Pill 
Board?

Oder geht das nur über einen USB->UART Wandler?

Gruß
hochsitzcola

von Stefan F. (Gast)


Lesenswert?

hochsitzcola schrieb:
> STM32CubeProgrammer -> serial

bedeutet, dass du einen USB-UART Adapter mit dem seriellen Port des 
Mikrocontrollers verbindest. Siehe 
http://stefanfrings.de/stm32/stm32f1.html#serialbootloader

Es gibt ein ähnliches Board mit STM32F303, der hat einen nicht 
löschbaren USB Bootloader: 
http://stefanfrings.de/stm32/stm32f3.html#stm32f3mini

von Kringel (Gast)


Lesenswert?

Bernd schrieb:
> Ich kann nicht nachvollziehen wie man bei so leistungsstarken
> Controllern so eine scheiß IDE benutzen kann.

Er hat nie erwähnt welche IDE er benutzt...

Außerdem ist die neue Arduino IDE ziemlich noice.

von hochsitzcola (Gast)


Lesenswert?

Stefan F. schrieb:
> bedeutet, dass du einen USB-UART Adapter mit dem seriellen Port des
> Mikrocontrollers verbindest

Danke für die schnelle Antwort. Ist die Micro-USB-Schnittstelle auf dem 
Bluepill mit dem STM32CubeProgrammer dann gar nicht zum Flashen 
nutzbar?!

Gruß
hochsitzcola

von Stefan F. (Gast)


Lesenswert?

hochsitzcola schrieb:
> Ist die Micro-USB-Schnittstelle auf dem
> Bluepill mit dem STM32CubeProgrammer dann gar nicht zum Flashen
> nutzbar?!

Ist sie leider nicht. Weil der Cube Programmer nichts mit dem Maple 
Bootloader am Hut hat und der STM32F103 eben keinen USB Bootloader (auch 
DFU genannt) enthält.

von hochsitzcola (Gast)


Lesenswert?

Stefan F. schrieb:
> Weil der Cube Programmer nichts mit dem Maple
> Bootloader am Hut hat

Man kann ja weiterhin die Upload Methode Maple DFU bootloader auswählen 
und darüber erfolgreich flashen. Dann erscheint aber nach dem Reboot des 
Board der Com-Port am Rechner nicht mehr :-(

Blöd.

Gruß
hochsitzcola

von Stefan F. (Gast)


Lesenswert?

hochsitzcola schrieb:
> Dann erscheint aber nach dem Reboot des
> Board der Com-Port am Rechner nicht mehr

Man muss die USB Verbindung trennen und wieder herstellen.

Dazu kann man beim Bluepill Board den ohnehin falschen R10 auslöten und 
stattdessen einen 1,5kΩ Pull-Up mit einem Transistor schalten.

Ganz mutige Schmutzfinken konfigurieren PA12 kurz als Ausgang mit Low 
Pegel, dadurch wird das Board vom PC auch neu erkannt.

von hochsitzcola (Gast)


Lesenswert?

Stefan F. schrieb:
> dadurch wird das Board vom PC auch neu erkannt

Nein, das geht eben nicht.

Es steht in den Upload methods tutorial ja auch der schöne Satz mit 
Ausrufezeichen "USB CDC have to be enable else you will not be able to 
upload anymore."

Wie man USB CDC enabled steht da aber nicht :-( Ich hab auf die schnelle 
auch nur ein Video gefunden, was die Aktivierung mit CubeMX erklärt, das 
hilft mir in Arduino herzlich wenig. Ein einfacher HAL-Befehl, der auch 
in Arduino funktkioniert wäre  schön. :-)

Gruß
hochsitzcola

von Stefan F. (Gast)


Lesenswert?

hochsitzcola schrieb:
> Es steht in den Upload methods tutorial ja auch der schöne Satz mit
> Ausrufezeichen "USB CDC have to be enable else you will not be able to
> upload anymore."

Das stimmt so aber nicht. Mann kan zu Beginn des Uploads den Reset Knopf 
drücken. Danach gibt es ein kleines Fenster von einer Sekunde, wo der 
Bootloader aktiv ist. Egal, ob das installierte Programm CDC benutzt, 
oder nicht.

Das Timing ist allerdings Tricky, mich hat es genervt. Ich nutze den 
Maple Bootloader daher nicht.

> Wie man USB CDC enabled steht da aber nicht

Beim alten STM32Duino Core von Roger Clark enthielt jedes Programm 
automatisch den CDC Treiber. Für den neuen Core guck Dir mal diesen 
Screenshot an: 
https://user-images.githubusercontent.com/7065108/58769761-71b2f980-85aa-11e9-8ffa-77991f16527d.png

von Stefan F. (Gast)


Lesenswert?

Bei all der Meckerei: Wenn du das neue schwarze Board verwendest, dass 
ich weiter oben empfohlen habe, hast du diesen Streß nicht.

von hochsitzcola (Gast)


Lesenswert?

Stefan F. schrieb:
> Bei all der Meckerei:

Ich will doch gar nicht meckern, ich will nur wissen wie es geht. Die 
Dokumentation des neuen STM32duino von ST ist echt grottig bis nicht 
vorhanden.

Danke für den Tipp mit dem Screenshot, werde ich mal ausprobieren.

Zum Glück wird man hier geholfen :-)

Gruß
hochsitzcola

von hochsitzcola (Gast)


Lesenswert?

Hm, blöd, wenn ich im Menü "Werkzeuge" CDC aktiviere, kommt die 
Fehlermeldung
1
arm-none-eabi/bin/ld.exe: region `FLASH' overflowed by 10640 bytes

selbst beim einfachen Blink example...

HAL lässt grüßen :-)

Gruß
hochsitzcola

von Stefan F. (Gast)


Lesenswert?

Komisch. Wenn ich ohne Arduino mit CubeMX ein Hello-World Programm mit 
CDC erzeuge, passt es in den Speicher. Allerdings ist das mit 19kB schon 
erschreckend groß. In deinem Fall kommt der Bootloader noch dazu.

Wenn ich "sprintf(msg,"%f",3.123);" einfüge, sind es schon 31kB.

Vielleicht nimmst du besser die alte Version von Roger.

Zusätzliche Boardverwalter-URL: 
http://dan.drown.org/stm32duino/package_STM32duino_index.json

von hochsitzcola (Gast)


Lesenswert?

:-) Den Gedanken, bei Rogers Version zu bleiben hatte ich auch schon. 
Mein letztes Projekt hab ich auch in der STM32 Workbench und CubeMX 
gemacht. Das braucht etwas mehr Einarbeitung, funktioniert dafür aber 
auch...
Ich bilde mir aber ein, daß es leichter ist Mitstreiter für ein Projekt 
zu bekommen, wenn man in Arduino arbeitet.

Gruß
hochsitzcola

von Stefan F. (Gast)


Lesenswert?

hochsitzcola schrieb:
> Ich bilde mir aber ein, daß es leichter ist Mitstreiter für ein Projekt
> zu bekommen, wenn man in Arduino arbeitet.

Ja wahrscheinlich.

Der bare-metal Code von W.S. braucht nur 8kB. Siehe 
http://stefanfrings.de/stm32/stm32f1.html#vcpnohal

Wenn man auf puts() verzichtet, wird er noch ein bisschen kleiner.

> mit CubeMX gemacht. Das braucht etwas mehr Einarbeitung,
> funktioniert dafür aber auch...

Mein erste Versuch vor 2 Jahren scheiterte schon an der Initialisierung 
der Taktversorgung. War ein Bug in Cube HAL, den hätte ich damals ohne 
die Hilfe dieses Forum nicht gefunden.

von hochsitzcola (Gast)


Lesenswert?

OK, das müsste sich ja mit überschaubarem Aufwand auf Arduino übertragen 
lassen, die Registerzugriffe sollten ja auch aus Arduino direkt gehen.

Gruß
hochsitzcola

von Stefan F. (Gast)


Lesenswert?

hochsitzcola schrieb:
> OK, das müsste sich ja mit überschaubarem Aufwand auf Arduino übertragen
> lassen

Jaein. Dir fehlt dann das Serial Objekt, mit dem du so schön bequem 
alles Mögliche ausgeben kannst. Stattdessen hast du nur das "dumme" 
UsbCharOut().

Außerdem müsstest du dem Arduino Core beibringen, die USB Schnittstelle 
nicht anzurühren.

von Christoph M. (mchris)


Lesenswert?

Na bei euch geht's ja in die Tiefe.
Leider hat Roger Clark sein Forum dicht gemacht. Dort wären ein paar 
Leute gewesen, die bei diesen Fragen sicherlich weiter geholfen hätten. 
Ich weiß nicht, wo die jetzt abgeblieben sind. Einer war auf jeden Fall 
deutsch aus München.

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.