BluePill

Da wiki.piffa.net.
STM32 generica BluePill

LA BluePill e' la scheda STM32 generica stm32f103c8t6 piu' economica disponibile a un prezzo di poco superiore a 2euro, e' parzialmente compatibile con Arduino Core grazie al progetto http://www.stm32duino.com/ . Ai principianti si consiglia comunque una MapleMini, nel caso si voglia acquistare una di queste schede e procedere a modificare la resistenza onboard per poter fare l'UPLOAD di sketch via USB e' buona norma comprarne due in modo da averne una "originale" da tenere come confronto per debug.

La scheda senza modifiche si puo' programmare con un FTDI o STDLINK (da comprare separatamente).

Utilizzo con Arduino Core[modifica]

Scaricare e installare secondo le istruzioni Arduino STM32 da https://github.com/rogerclarkmelbourne/Arduino_STM32 .

La scheda e' a 3.3v quindi potra' essere alimentata dalla porta USB o da un FTDI che sia regolato a 3.3v. Per poter uploadre uno sketch il ponticello in alto (vedi foto sopra) dovra' essere spostato a 1 - DX, terminato l'upload lo sketch verra' eseguito direttamente, successivamente andra' rimesso a 0 per esecuzione. Prima di poter caricare si dovra' resettare la scheda.

Per utilizzare un FTDI il pin RX e': A10 - TX: A9. Collegare GND e 3.3 all'adattatore FTDI.

Per lanciare uno sketch di esempio Blink si tenga conto che il LED onboard e' PC13 . Esempio di una sessione di UPLOAD da Arduino IDE:

Sketch uses 6,540 bytes (9%) of program storage space. Maximum is 65,536 bytes. Global variables use 1,720 bytes of dynamic memory. /usr/local/software/arduino-1.6.5/hardware/Arduino_STM32/tools/linux/serial_upload ttyUSB0 {upload.altID} {upload.usbID} /tmp/build4607193211824909950.tmp/blink_stm32.cpp.bin stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY Interface serial_posix: 230400 8E1 Version  : 0x22 Option 1  : 0x00 Option 2  : 0x00 Device ID  : 0x0410 (Medium-density) - RAM  : 20KiB (512b reserved by bootloader) - Flash  : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory

Wrote address 0x08000100 (3.91%) ... Wrote address 0x08001900 (97.86%) Wrote address 0x0800198c (100.00%) Done.

Starting execution at address 0x08000000... done.

Blupins.png

Nella cartella Arduino_STM32/examples/ sono presenti vari esempi. // Blink for BluePill on STM32 const int LED = PC13 ; // That's where the onboard LED is found

// the setup function runs once when you press reset or power the board void setup() {

 // initialize digital pin PB1 as an output.
 pinMode(LED, OUTPUT);

}

// the loop function runs over and over again forever void loop() {

 digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(200);              // wait for a second
 digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
 delay(200);              // wait for a second

}

Upload tramite USB[modifica]

Per poter caricare sketches tramite USB si dovra' provvedere a sostituire la resistenza da 10k SMD collegata a PA12 (marchiata R10) con una da circa ~1.5k . Alcuni PC sono tolleranti con le specifiche USB e potrebbero essere un grado di scrivere sulla scheda senza modificare la resistenza. Si dovra' poi caricare il bootloader sulla scheda usando il tool stm32flash presente in Arduino_STM32/tools/linux/stm32flash .

/tmp:$ wget https://raw.githubusercontent.com/rogerclarkmelbourne/STM32duino-bootloader/master/STM32F1/binaries/generic_boot20_pc13.bin

Arduino_STM32/tools/linux/stm32flash:$ ./stm32flash -w /tmp/generic_boot20_pc13.bin -v -g 0x0 /dev/ttyUSB0

1.5k con due resistenze in serie :)

Il bootloader andra' caricato via FTDI, dopodiche si potra' caricare i programmi via porta USB.

Come viene vista la board prima della modifica dal comando dmesg: [22646.262635] usb 3-11: new full-speed USB device number 47 using xhci_hcd [22646.374810] usb 3-11: device descriptor read/64, error -71 [22646.591150] usb 3-11: device descriptor read/64, error -71 [22646.807541] usb 3-11: new full-speed USB device number 48 using xhci_hcd [22646.919762] usb 3-11: device descriptor read/64, error -71 [22647.136078] usb 3-11: device descriptor read/64, error -71 [22647.352429] usb 3-11: new full-speed USB device number 49 using xhci_hcd [22647.352552] usb 3-11: Device not responding to setup address. [22647.556888] usb 3-11: Device not responding to setup address. [22647.761104] usb 3-11: device not accepting address 49, error -71 [22647.873307] usb 3-11: new full-speed USB device number 50 using xhci_hcd [22647.873441] usb 3-11: Device not responding to setup address. [22648.077749] usb 3-11: Device not responding to setup address. [22648.281970] usb 3-11: device not accepting address 50, error -71 [22648.281994] usb usb3-port11: unable to enumerate USB device (END) Dopo la modifica il ponticello BOOT0 resta sempre su 0 in modalita' esecuzione.

Come viene vista la scheda dal kernel dopo la modifica: device seriale ACM

[ 5118.142200] usb 3-4.1.4: new full-speed USB device number 86 using xhci_hcd [ 5118.231550] usb 3-4.1.4: New USB device found, idVendor=1eaf, idProduct=0004 [ 5118.231553] usb 3-4.1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 5118.231554] usb 3-4.1.4: Product: Maple [ 5118.231555] usb 3-4.1.4: Manufacturer: LeafLabs [ 5118.231635] usb 3-4.1.4: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes [ 5118.231979] cdc_acm 3-4.1.4:1.0: ttyACM0: USB ACM device Disponibile come device seriale al path /dev/ttyACM0 sara' possibile scegliere questa come porta nell'IDE per i successivi upload senza necessita' di reset manuale. Ora il caricamento / reset e' completamente automatico e gestito dall'IDE Arduino. Al momento dell'UPLOAD l'IDE dovrebbe resettare la scheda (un secondo di lampeggio veloce) che ripartira' dal bootloader, la scheda entrera' in modalità' DFU (lampeggio piu' lento per 3 secondi in modalita' DFU, caricamento) e al termine del caricamento verra' eseguito lo sketch, eventualmente dopo qualche secondo la scheda dovrebbe ripresentarsi al kernel come device seriale, pronto per un nuovo ciclo di caricamento automatico.

Debug: niente seriale[modifica]

[22704.551324] usb 3-11: new full-speed USB device number 51 using xhci_hcd [22704.688297] usb 3-11: New USB device found, idVendor=1eaf, idProduct=0003 [22704.688299] usb 3-11: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [22704.688301] usb 3-11: Product: Maple 003 [22704.688301] usb 3-11: Manufacturer: LeafLabs [22704.688302] usb 3-11: SerialNumber: LLM 003

In questo stato la scheda e' vista solo come device DFU, non essendo disponibile come device seriale (ttyUSB# / ttyACM#) lo scirpt upload-reset non procedera' al reset automatico necessario prima del caricamento di uno sketch. Suggerimento: provate prima a usare un hub USB (vedi dopo). Si puo' provvedere manualmente a resettare la scheda con il tasto onboard RESET: dopo una serie di lampeggi molto veloci per un secondo il LED comincia a lampeggiare piu' lentamente per circa 3 secondi: questa e' la finestra per l'UPLOAD.

Upload via USB[modifica]

Sessione di upload USB seriale da Arduino IDE: Ponticello BOOT0 su 0, bootloader caricato. Sketch uses 12,412 bytes (18%) of program storage space. Maximum is 65,536 bytes. Global variables use 2,560 bytes of dynamic memory. /usr/local/software/arduino-1.6.5/hardware/Arduino_STM32/tools/linux/maple_upload ttyUSB0 2 1EAF:0003 /tmp/build4607193211824909950.tmp/blink_stm32.cpp.bin Failed to open serial device. dfu-util: Invalid DFU suffix signature dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!

dfu-util 0.8

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2014 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to dfu-util@lists.gnumonks.org

Opening DFU capable USB device... ID 1eaf:0003 Run-time device DFU version 0110 Claiming USB DFU Interface... Setting Alternate Setting #2 ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 0110 Device returned transfer size 1024 Copying data from PC to DFU device

Download [ ] 0% 0 bytes ... Download [=========================] 100% 12412 bytes Download done. state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present Done! Resetting USB to switch back to runtime mode

Al termine del caricamento (eventualmente dopo qualche secondo) la scheda dovrebbe ripresentarsi al kernel come device seriale ACM (emula il comportamento di un modem) invece che come device solo DFU: [ 5118.142200] usb 3-4.1.4: new full-speed USB device number 86 using xhci_hcd [ 5118.231550] usb 3-4.1.4: New USB device found, idVendor=1eaf, idProduct=0004 [ 5118.231553] usb 3-4.1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 5118.231554] usb 3-4.1.4: Product: Maple [ 5118.231555] usb 3-4.1.4: Manufacturer: LeafLabs [ 5118.231635] usb 3-4.1.4: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes [ 5118.231979] cdc_acm 3-4.1.4:1.0: ttyACM0: USB ACM device


HUB USB[modifica]

Nota: e' stato riportato in piu' casi (me compreso!) che la scheda non ritorni ad essere disponibile come seriale se collegata a una particolare porta USB: nel caso si abbiano problemi si provi a connetterla a un hub USB o a un'altra porta. In caso nulla di questo funzioni potete comunque caricare via USB resettando manualmente la scheda ad ogni upload.

  • Lo script che gestisce l'upload e': Arduino_STM32/tools/linux/serial_upload
  • Questo chiama un file binario: arduino-1.6.5/hardware/Arduino_STM32/tools/linux/upload-reset che e' possibile invocare manualmente per debug (fin tanto che alla vostra scheda e' stata assegnata a un device come /dev/ttyACM0 , altrimenti dovrete usare un FTDI o simile).

Links[modifica]