Ich möchte mich mal kurz mit MicroPython beschäftigen. Deshalb habe ich mir vom Chinesen das unten aufgeführte PBYv1.1 Board welches einen STM32F405 beherbergt gekauft.
Nach dem Anstecken an den Mikro-USB meldet sich die Platine als USB-Laufwerk an. Damit man die virtuelle serielle Schnittstellen nutzen kann, muss man im Gerätemanager den Treiber aktualisieren mit der auf dem USB-Laufwerk bereitgestellte Datei: pybcdc.inf
Der migelieferte Treiber verursacht unter folgenden Fehler:
Die INF-Datei … enthält keine Digitalsignaturinformationnen
Da ab Windows 8 normalerweise nur Treiber mit einer digitalen Signatur installierte werden können. Abhilfe siehe folgendes Dokument:
Micro-Python-Windows-Setup.pdf
Nach der Installation des Treibers (mit gedrückter Shift-Taste Neustart auswählen , und dann bei Adavanced mit F7 nach dem Neustart..) meldet sich das Board im Terminal (aber erst einem Board reset):
MicroPython v1.9.4-85-gdf9b7e8f on 2018-05-24; PYBv1.1 with STM32F405RG Type "help()" for more information. >>>
Soweit so gut, allerdings konnte ich mit meinem übliche Terminal Programm keine Befehl senden, bzw. ich bekam keine Antworten zurück. (Handshaking RTS/CTS aktivieren dann gehts auch mit Terminal)
Erst nachdem ich PuTTY ( 115200 8N1 ) verwendet hatte, konnte ich mit dem Board interagieren.
Und hier noch ein kurzes Demo des Beschleunigungssensors:
import pyb accel = pyb.Accel() while True: print(accel.filtered_xyz()) pyb.delay(250)
Brücke zwischen +3V3 und DFU-Pin (boot0) setzen und dann mit USB verbinden. Wenn der Bootloader aktiviert ist leuchten die rote, gelb und blaue LED dunkel.
Als erstes mal eine Sicherung durchführen (512kByte sollten reichen):
Sicherung erstellen mit (Upload): dfu-util.exe -a 0 -s 0x08000000:524288 -U test_orig_512k.bin dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Opening DFU capable USB device... ID 0483:df11 Run-time device DFU version 011a Claiming USB DFU Interface... Setting Alternate Setting #0 ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 011a Device returned transfer size 2048 DfuSe interface name: "Internal Flash " Upload [=========================] 100% 524288 bytes Upload done.
und jetzt die aktuellste Firmware (Stand 02.01.2018) auf spielen:
dfu-util.exe -a 0 -D pybv11-20190102-v1.9.4-771-gb33f108cd.dfu dfu-util 0.9 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/ Match vendor ID from file: 0483 Match product ID from file: df11 Opening DFU capable USB device... ID 0483:df11 Run-time device DFU version 011a Claiming USB DFU Interface... Setting Alternate Setting #0 ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 011a Device returned transfer size 2048 DfuSe interface name: "Internal Flash " file contains 1 DFU images parsing DFU image 1 image for alternate setting 0, (2 elements, total size = 331280) parsing element 1, address = 0x08000000, size = 14720 Download [=========================] 100% 14720 bytes Download done. parsing element 2, address = 0x08020000, size = 316544 Download [=========================] 100% 316544 bytes Download done. done parsing DfuSe file
Das Modul meldet sich dann mit:
MicroPython v1.9.4-771-gb33f108cd on 2019-01-02; PYBv1.1 with STM32F405RG Type "help()" for more information. >>>
Hmm meine modifizierte main.py blieb erhalten und wurde nicht zurückgesetzt.
Achtung: Jetzt funktioniert auch mein standard Terminal wieder, ohne das das Handshaking aktiviert ist. (muss nun wieder entfernt werden).
Kurzes Beispiel, wie man sich den Inhalt der SD-Karte anschauen kann (root Verzeichnis)
import os sd = pyb.SD #sd = pyb.SDCard() os.mount(sd, '/sd') os.listdir('/sd') os.umount('/sd')