Μικροελεγκτής STM32F103C8T6 - Λειτουργία ως Arduino - stm32duino bootloader
Μικροελεγκτής STM32F103C8T6
Ο συγκεκριμένος μικροελεγκτής είναι βασισμένος σε τεχνολογία ARM και υλοποιεί το chip STM32F103C8T6. Έχει καλύτερη απόδοση και χαρακτηριστικά από Arduino Pro Mini ή UNO. O STM32F103C8T6 έρχεται με ARM32 Cortex-M3, 72 MHz, 64K Flash, 20K SRAM, 33 I/O pins σε εξευτελιστικές τιμές περίπου των 1,5 ευρώ (ebay, AliExpress).
Για να λειτουργήσει όμως ως arduino χρειάζεται κάποια επιπλέων βήματα. Η πλακέτα έρχεται με το προκαθορισμένο USART boot loader, έστω και αν περιέχει ενσωματωμένο microUSB port. Η δυνατότητα να προγραμματιστεί μέσω του microUSB είναι ανέφικτη αφού δεν υπάρχει ο σχετικός bootloader.
Ευτυχώς άτομα και κοινότητα έχουν συνεισφέρει στην ανάπτυξη των ανοικτών εργαλείων που θα χρησιμοποιήσουμε ώστε να βάλουμε bootloader, που να δέχεται τον προγραμματισμό μέσω του περιβάλλοντος Arduino και με χρήση της θύρας του microUSB.
Θα χρειαστούμε να έχουμε ένα (1) USB to Serial/UART/TTL Converter και θα κάνουμε τις συνδεσμολογίες όπως πιο κάτω.
Στο πιο πάνω σχεδιάγραμμα προσέχουμε τους δύο κίτρινους βραχυκυκλωτήρες (Jumpers) με κόκκινη σήμανση ΒΟΟΤ0 και ΒΟΟΤ1. Στην προκαθορισμένη τους κατάσταση και οι δύο βραχυκυκλωτήρες βρίσκονται στην κατάσταση μηδέν (0). Στη κατάσταση αυτή ο μικροελεγκτής χρησιμοποιεί τη δική του flash memory bootloader, έτσι όπως τον έχουμε προμηθευτεί και είναι αδύνατη ο προγραμματισμός μέσω της θύρας microUSB. Για να μπορεί έτσι όπως έιναι να προγραμματιστεί θα πρέπει να θέσουμε το βραχυκυκλωτήρα ΒΟΟΤ0 από τη θέση μηδεν (0) στη θέση ένα (1). Το βραχυκυκλωτήρα ΒΟΟΤ1 τον αφήνουμε στη αρχική θέση μηδέν (0).
Προσέχουμε τις συνδέσεις όπως το σχεδιάγραμμα και αφού τις επιβεβαιώσουμε περνάμε στο στάδιο της εγκατάστασης και χρήσης των κατάλληλων εργαλείων λογισμικού.
Εργαλεία Λογισμικού
Θα χρειαστούμε το stm32duino bootloader του Roger Clark. Στην περίπτωση μας θα κατεβάσουμε το αρχείο generic_boot20_pc13 αφού παρατηρούμε ότι η πλάκετα μας έχει LED συνδεδεμένο στην ακίδα (pin) δεκατρία (13).
Επίσης θα χρειαστούμε το ανοικτό εργαλείο stm32flash το οποίο μπορούμε να το εγκαταστήσουμε σε λειτουργικό linux εκτελώντας τις πιο κάτω εντολές.
-
Κάτεβάζουμε το άρχειο stm32flash_0.5-1_i386.deb
-
Το εγκαθιστούμε με την εντολή
sudo dpkg -i stm32flash_0.5-1_i386.deb
To εκτελέσιμο αρχείο που θα δημιουργηθεί stm32flash θα βρίσκεται στο σύνδεσμο /usr/local/bin
Είμαστε πλέων έτοιμοι να βάλουμε τον bootloader generic_boot20_pc13.bin. Το πετυχαίνουμε εκτελώντας τις εντολές :
sudo stm32flash /dev/ttyUSB0 stm32flash 0.5 http://stm32flash.sourceforge.net/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (STM32F10xxx Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (size first sector: 4x1024) - Option RAM : 16b - System RAM : 2KiB
Σταματάμε την προστασία ανάγνωσης (Read-UnProtecting Flash)
stm32flash /dev/ttyUSB0 -k stm32flash 0.5 http://stm32flash.sourceforge.net/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (STM32F10xxx Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (size first sector: 4x1024) - Option RAM : 16b - System RAM : 2KiB Read-UnProtecting flash Done.
Σταματάμε την προστασία εγγραφής (Write-unprotecting flash)
sudo stm32flash /dev/ttyUSB0 -u stm32flash 0.5 http://stm32flash.sourceforge.net/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (STM32F10xxx Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (size first sector: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write-unprotecting flash Done.
Γράφουμε το νέο bootloader generic_boot20_pc13.bin
sudo stm32flash /dev/ttyUSB0 -w ../generic_boot20_pc13.bin stm32flash 0.5 http://stm32flash.sourceforge.net/ Using Parser : Raw BINARY Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (STM32F10xxx Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (size first sector: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory Wrote address 0x08001c14 (100.00%) Done.
Με την επιτυχία και των τεσσάρων (4) βημάτων, κλείνουμε το κύκλωμα και το αποσυναρμολογούμε. Ακολούθως θέτουμε το βραχυκυκλωτήρα ΒΟΟΤ0 από τη θέση ένα (1) στη θέση μηδέν (0) και η πλακέτα είναι έτοιμη να δεκτεί τον κωδικά μας από Arduino μέσω του microUSB.