- Απαιτούμενα υλικά
- Διάγραμμα κυκλώματος και σύνδεση
- Προγραμματισμός STM32 για LCD με χρήση του Arduino
- Μεταφόρτωση του προγράμματος στο STM32F103C8T6
Για οποιοδήποτε έργο μικροελεγκτή, η διασύνδεση μιας μονάδας οθόνης με αυτό θα έκανε το έργο πολύ πιο εύκολο και ελκυστικό για τον χρήστη να αλληλεπιδράσει. Η πιο συχνά χρησιμοποιούμενη μονάδα οθόνης για μικροελεγκτές είναι οι 16 × 2 Άλφα αριθμητικές οθόνες. Αυτοί οι τύποι οθονών δεν είναι μόνο χρήσιμοι για την προβολή ζωτικών πληροφοριών στον χρήστη, αλλά μπορούν επίσης να λειτουργήσουν ως εργαλείο εντοπισμού σφαλμάτων κατά το αρχικό στάδιο ανάπτυξης του έργου. Έτσι, σε αυτό το σεμινάριο θα μάθουμε πώς μπορούμε να συνδέσουμε μια οθόνη LCD 16 × 2 με την πλακέτα ανάπτυξης STM32F103C8T6 STM32 και να την προγραμματίσουμε χρησιμοποιώντας το Arduino IDE. Για άτομα που είναι εξοικειωμένα με το Arduino, αυτό το σεμινάριο θα είναι απλά μια βόλτα με κέικ, καθώς και οι δύο είναι πολύ παρόμοιες. Επίσης, για να μάθετε περισσότερα για το STM32 Blue Pill Board ακολουθήστε το αρχικό μας φροντιστήριο.
Απαιτούμενα υλικά
- STM32 Blue Pill Development Board
- Οθόνη LCD 16 × 2
- Προγραμματιστής FTDI
- Σύνδεση καλωδίων
- οθόνη υγρού κρυστάλλου
Σύντομη εισαγωγή στην οθόνη LCD 16 × 2 Dot matrix
Όπως ειπώθηκε νωρίτερα, το Energia IDE παρέχει μια όμορφη βιβλιοθήκη που κάνει τη διασύνδεση ένα κομμάτι κέικ και ως εκ τούτου δεν είναι υποχρεωτικό να γνωρίζουμε τίποτα για την ενότητα οθόνης. Όμως, δεν θα ήταν ενδιαφέρον να δείξουμε τι χρησιμοποιούμε !!
Το όνομα 16 × 2 υποδηλώνει ότι η οθόνη έχει 16 στήλες και 2 σειρές, οι οποίες μαζί (16 * 2) σχηματίζουν 32 κουτιά. Ένα ενιαίο κουτί θα μοιάζει κάπως έτσι στην παρακάτω εικόνα
Ένα μεμονωμένο πλαίσιο έχει 40 εικονοστοιχεία (κουκκίδες) με σειρά μήτρα 5 σειρών και 8 στηλών, αυτά τα 40 εικονοστοιχεία μαζί σχηματίζουν έναν χαρακτήρα. Ομοίως, 32 χαρακτήρες μπορούν να εμφανιστούν χρησιμοποιώντας όλα τα πλαίσια. Τώρα ας ρίξουμε μια ματιά στα pinouts.
Η οθόνη LCD έχει συνολικά 16 καρφίτσες, όπως φαίνεται παραπάνω, μπορούν να κατηγοριοποιηθούν σε τέσσερις ομάδες όπως ως εξής
Πινέζες πηγής (1, 2 και 3): Αυτοί οι ακροδέκτες τροφοδοτούν το επίπεδο ισχύος και αντίθεσης για την οθόνη
Πείροι ελέγχου (4, 5 και 6): Αυτές οι ακίδες ρυθμίζουν / ελέγχουν τους καταχωρητές στο IC διασύνδεσης LCD (περισσότερα αυτό μπορείτε να βρείτε στον παρακάτω σύνδεσμο)
Data / Command Pins (7 έως 14): Αυτές οι ακίδες παρέχουν τα δεδομένα των πληροφοριών που πρέπει να εμφανίζονται στην οθόνη LCD.
Καρφίτσες LED (15 και 16): Αυτοί οι ακροδέκτες χρησιμοποιούνται για να φωτίζουν τον οπίσθιο φωτισμό της οθόνης LCD εάν χρειάζεται (προαιρετικά)
Από όλες αυτές τις 16 ακίδες, μόνο 10 ακίδες πρέπει να χρησιμοποιούνται υποχρεωτικά για την καλή λειτουργία της οθόνης LCD, εάν θέλετε να μάθετε περισσότερα σχετικά με αυτές τις οθόνες LCD, μεταβείτε σε αυτό το άρθρο LCD 16x2.
Διάγραμμα κυκλώματος και σύνδεση
Το διάγραμμα κυκλώματος για διασύνδεση 16 * 2 Dot matrix LCD με πλακέτα STM32F103C8T6 STM32 Blue Pill φαίνεται παρακάτω. Κατασκευάζεται χρησιμοποιώντας το λογισμικό Fritzing.
Όπως μπορείτε να δείτε, η πλήρης σύνδεση γίνεται πάνω από ένα breadboard. Χρειαζόμαστε μια πλακέτα FTDI για να προγραμματίσουμε τον μικροελεγκτή STM32. Ομοίως με το προηγούμενο σεμινάριό μας, έχουμε συνδέσει την πλακέτα FTDI στο STM32, το Vcc και ο πείρος γείωσης του προγραμματιστή FDTI συνδέονται με τον πείρο 5V και τον πείρο γείωσης του STM32 αντίστοιχα. Αυτό χρησιμοποιείται για την τροφοδοσία της πλακέτας STM32 και της LCD, καθώς και οι δύο μπορούν να δεχτούν δοχεία + 5V. Ο ακροδέκτης Rx και Tx της πλακέτας FTDI συνδέεται με τον ακροδέκτη A9 και A10 του STM32, ώστε να μπορούμε να προγραμματίσουμε την πλακέτα απευθείας χωρίς το φορτωτή εκκίνησης.
Στη συνέχεια, η οθόνη LCD πρέπει να συνδεθεί στην πλακέτα STM32. Θα χρησιμοποιήσουμε την οθόνη LCD σε λειτουργία 4-bit, οπότε πρέπει να συνδέσουμε τους 4 ακροδέκτες δεδομένων (DB4 σε DB7) και τον δύο πείρο ελέγχου (RS και EN) στην πλακέτα STM32, όπως φαίνεται στο κύκλωμα διασύνδεσης LCD STM32F103C8T6 παραπάνω διάγραμμα. Επιπλέον, ο παρακάτω πίνακας θα σας βοηθήσει να κάνετε τη σύνδεση.
Αρ. Καρφίτσας LCD |
Όνομα Pin LCD |
Όνομα Pin STM32 |
1 |
Έδαφος (Gnd) |
Έδαφος (G) |
2 |
VCC |
5V |
3 |
VEE |
Έδαφος (G) |
4 |
Εγγραφή Επιλογή (RS) |
PB11 |
5 |
Ανάγνωση / εγγραφή (RW) |
Έδαφος (G) |
6 |
Ενεργοποίηση (EN) |
PB10 |
7 |
Bit δεδομένων 0 (DB0) |
Χωρίς σύνδεση (NC) |
8 |
Bit δεδομένων 1 (DB1) |
Χωρίς σύνδεση (NC) |
9 |
Bit δεδομένων 2 (DB2) |
Χωρίς σύνδεση (NC) |
10 |
Bit δεδομένων 3 (DB3) |
Χωρίς σύνδεση (NC) |
11 |
Bit δεδομένων 4 (DB4) |
PB0 |
12 |
Bit δεδομένων 5 (DB5) |
PB1 |
13 |
Bit δεδομένων 6 (DB6) |
PC13 |
14 |
Bit δεδομένων 7 (DB7) |
PC14 |
15 |
Θετικό LED |
5V |
16 |
Αρνητικό LED |
Έδαφος (G) |
Μόλις ολοκληρωθούν οι συνδέσεις, μπορούμε να ανοίξουμε το Arduino IDE και να αρχίσουμε να τον προγραμματίζουμε.
Προγραμματισμός STM32 για LCD με χρήση του Arduino
Όπως είπε σε αυτό το σεμινάριο θα είμαστε χρησιμοποιώντας το Arduino IDE να προγραμματίσετε STM32 μικροελεγκτή μας. Όμως, το Arduino IDE από προεπιλογή δεν θα έχει εγκατεστημένη την πλακέτα STM32, επομένως πρέπει να κατεβάσουμε ένα πακέτο και να προετοιμάσουμε το Arduino IDE για το ίδιο. Αυτό ακριβώς κάναμε στο προηγούμενο σεμινάριό μας ξεκινώντας με το STM32F103C8T6 χρησιμοποιώντας το Arduino IDE. Αν δεν έχετε εγκαταστήσει τα απαιτούμενα πακέτα, επιστρέψτε σε αυτό το σεμινάριο και ακολουθήστε το πριν συνεχίσετε εδώ.
Μόλις το STM32 Board εγκατασταθεί στο Arduino IDE, μπορούμε να ξεκινήσουμε τον προγραμματισμό. Το πρόγραμμα είναι πολύ παρόμοιο με αυτό ενός πίνακα Arduino, το μόνο πράγμα που θα αλλάξει είναι τα ονόματα των pin, καθώς οι συμβολισμοί είναι διαφορετικοί για το STM32 και το Arduino. Το πλήρες πρόγραμμα δίνεται στο τέλος αυτής της σελίδας, αλλά για να εξηγήσω το πρόγραμμα το έχω χωρίσει σε μικρά σημαντικά αποσπάσματα όπως φαίνεται παρακάτω.
Ένα αξιοσημείωτο πλεονέκτημα της χρήσης του Arduino για τον προγραμματισμό των μικροελεγκτών μας είναι ότι το Arduino διαθέτει έτοιμες βιβλιοθήκες για σχεδόν όλους τους διάσημους αισθητήρες και ενεργοποιητές. Έτσι λοιπόν ξεκινάμε το πρόγραμμά μας συμπεριλαμβάνοντας τη βιβλιοθήκη LCD που κάνει τον προγραμματισμό πολύ πιο εύκολο.
#περιλαμβάνω
Στην επόμενη γραμμή πρέπει να καθορίσουμε σε ποιους ακροδέκτες GPIO του STM32 έχουμε συνδέσει τον έλεγχο οθόνης LCD και τις γραμμές δεδομένων. Για να το κάνουμε αυτό, πρέπει να ελέγξουμε το υλικό μας, για ευκολία, μπορείτε επίσης να ανατρέξετε στον πίνακα που δίνεται στην κορυφή, ο οποίος παραθέτει τα ονόματα ακίδων της οθόνης LCD με τον ακροδέκτη GPIO του STM32. Αφού αναφέρουμε τις καρφίτσες, μπορούμε να ξεκινήσουμε την οθόνη LCD χρησιμοποιώντας τη λειτουργία LiquidCrystal . Ονομάζουμε επίσης την οθόνη LCD ως " lcd " όπως φαίνεται παρακάτω.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // αναφέρω ότι τα ονόματα των pin με το LCD είναι συνδεδεμένο με το LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // Αρχικοποιήστε την οθόνη LCD
Στη συνέχεια μπαίνουμε μέσα στη λειτουργία εγκατάστασης . Εδώ πρώτα αναφέρουμε τον τύπο LCD που χρησιμοποιούμε. Επειδή είναι LCD 16 * 2, χρησιμοποιούμε τη γραμμή lcd.begin (16,2). Ο κωδικός μέσα στη λειτουργία ρύθμισης κενού εκτελείται μόνο μία φορά. Έτσι το χρησιμοποιούμε για να εμφανίσουμε ένα εισαγωγικό κείμενο που εμφανίζεται στην οθόνη για 2 δευτερόλεπτα και μετά διαγράφεται. Για να αναφέρουμε τη θέση όπου πρέπει να εμφανίζεται το κείμενο, χρησιμοποιούμε τη συνάρτηση lcd.setcursor και για να εκτυπώσουμε το κείμενο χρησιμοποιούμε τη συνάρτηση lcd.print . Για παράδειγμα, το lcd.setCursor (0,0) θα ορίσει τον κέρσορα στην πρώτη σειρά και την πρώτη στήλη όπου θα εκτυπώσουμε το " Interfacing LCD " και τη λειτουργία lcd.setCursor (0,1) μετακινεί τον κέρσορα στη δεύτερη στήλη στην πρώτη στήλη όπου εκτυπώνουμε τη γραμμή " CircuitDigest ".
άκυρη ρύθμιση () {lcd.begin (16, 2); // Χρησιμοποιούμε ένα LCD * 16c2.setCursor (0, 0); // Στην πρώτη σειρά, πρώτη στήλη lcd.print ("Interfacing LCD"); // Εκτυπώστε αυτό το lcd.setCursor (0, 1); // Στη δεύτερη σειρά, πρώτη στήλη lcd.print ("- CircuitDigest"); // Εκτυπώστε αυτήν την καθυστέρηση (2000). // περιμένετε δύο δευτερόλεπτα lcd.clear (); // Εκκαθάριση της οθόνης}
Αφού εμφανίσουμε το εισαγωγικό κείμενο, κρατάμε το πρόγραμμα για 2 δευτερόλεπτα δημιουργώντας καθυστέρηση έτσι ώστε ο χρήστης που μπορεί να διαβάσει το εισαγωγικό μήνυμα. Αυτή η καθυστέρηση δημιουργείται από την καθυστέρηση γραμμής (2000) όπου το 2000 είναι η τιμή καθυστέρησης σε δευτερόλεπτα μύλου. Μετά την καθυστέρηση διαγράφουμε την οθόνη LCD χρησιμοποιώντας τη λειτουργία lcd.clear () η οποία καθαρίζει την οθόνη LCD αφαιρώντας όλο το κείμενο στην οθόνη LCD.
Τέλος, μέσα στο κενό βρόχο, θα εμφανιστεί η ένδειξη «STM32 -Μπλε χάπι» στην πρώτη γραμμή και την αξία των δευτερολέπτων στη δεύτερη γραμμή. Η τιμή του δευτερολέπτου μπορεί να ληφθεί από τη συνάρτηση millis () . Το millis () είναι ένας χρονοδιακόπτης που αυξάνεται αμέσως από τη στιγμή που ενεργοποιείται το MCU. Η τιμή έχει τη μορφή χιλιοστών δευτερολέπτων, γι 'αυτό τη διαιρούμε με 1000 πριν την εμφανίσουμε στην οθόνη LCD.
void loop () { lcd.setCursor (0, 0); // Στην πρώτη σειρά, πρώτη στήλη lcd.print ("STM32 -Blue Pill"); // Εκτυπώστε αυτό το lcd.setCursor (0, 1); // Στη δεύτερη σειρά, πρώτη στήλη lcd.print (millis () / 1000); // Εκτυπώστε την τιμή των δευτερολέπτων }
Μεταφόρτωση του προγράμματος στο STM32F103C8T6
Όπως συζητήθηκε στην παραπάνω παράγραφο, θα πρέπει να μπορείτε να παρατηρήσετε την έξοδο μόλις φορτωθεί ο κωδικός. Αλλά αυτό το πρόγραμμα δεν θα λειτουργήσει την επόμενη φορά που θα ενεργοποιήσετε την πλακέτα, καθώς ο πίνακας βρίσκεται ακόμη σε λειτουργία προγραμματισμού. Έτσι, μόλις ανεβεί το πρόγραμμα, ο άλτης στην εκκίνηση 0 πρέπει να αλλάξει σε 0 θέσεις όπως φαίνεται παρακάτω. Επίσης τώρα, αφού το πρόγραμμα έχει φορτωθεί στην πλακέτα STM32 ήδη, δεν χρειαζόμαστε την πλακέτα FTDI και ολόκληρη η εγκατάσταση μπορεί να τροφοδοτείται από τη θύρα micro-USB της πλακέτας STM32, όπως φαίνεται παρακάτω.
Αυτό είναι απλώς ένα απλό έργο διασύνδεσης που βοηθά στη χρήση της οθόνης LCD με την πλακέτα STM32, αλλά επιπλέον μπορείτε να το χρησιμοποιήσετε για να δημιουργήσετε δροσερά έργα. Ελπίζω να καταλάβατε το σεμινάριο και να μάθετε κάτι χρήσιμο από αυτό. Εάν είχατε αντιμετωπίσει κάποιο πρόβλημα κατά τη λειτουργία του, χρησιμοποιήστε την ενότητα σχολίων για να δημοσιεύσετε το πρόβλημα ή χρησιμοποιήστε τα φόρουμ για άλλες τεχνικές ερωτήσεις. Η πλήρης λειτουργία της οθόνης LCD με STM32 μπορεί επίσης να βρεθεί ως βίντεο που δίνεται παρακάτω.