- Vereiste materialen
- Schakelschema en aansluiting
- Programmering STM32 voor LCD met Arduino
- Het programma uploaden naar STM32F103C8T6
Voor elk microcontrollerproject zou het koppelen van een display-eenheid het project een stuk eenvoudiger en aantrekkelijker maken voor de gebruiker om mee te werken. De meest gebruikte display-eenheid voor microcontrollers zijn de 16 × 2 alfanumerieke displays. Dit soort beeldschermen is niet alleen handig om essentiële informatie aan de gebruiker weer te geven, maar kan ook dienen als foutopsporingsprogramma tijdens de eerste ontwikkelingsfase van het project. Dus in deze tutorial zullen we leren hoe we een 16 × 2 LCD-scherm kunnen verbinden met het STM32F103C8T6 STM32 Development board en het kunnen programmeren met de Arduino IDE. Voor mensen die bekend zijn met Arduino is deze tutorial gewoon een taartwandeling, omdat ze allebei erg op elkaar lijken. Om meer te weten te komen over STM32 Blue Pill Board, volgt u ook onze instructie Aan de slag.
Vereiste materialen
- STM32 Blue Pill Development Board
- 16 × 2 LCD-scherm
- FTDI-programmeur
- Verbindingsdraden
- LCD
Korte introductie tot 16 × 2 Dot matrix LCD-scherm
Zoals eerder verteld, biedt de Energia IDE een prachtige bibliotheek die de interfacing een fluitje van een cent maakt en daarom is het niet verplicht om iets over de displaymodule te weten. Maar zou het niet interessant zijn om te laten zien wat we gebruiken !!
De naam 16 × 2 houdt in dat het display 16 kolommen en 2 rijen heeft, die samen (16 * 2) 32 vakken vormen. Een enkele doos zou er op de onderstaande afbeelding ongeveer zo uitzien
Een enkele box heeft 40 pixels (dots) met een matrixvolgorde van 5 rijen en 8 kolommen, deze 40 pixels vormen samen één teken. Op dezelfde manier kunnen 32 tekens worden weergegeven in alle vakken. Laten we nu eens kijken naar de pinouts.
Het LCD-scherm heeft in totaal 16 pinnen, zoals hierboven weergegeven, kunnen ze als volgt worden onderverdeeld in vier groepen
Bronpinnen (1, 2 en 3): deze pinnen leveren het vermogen en het contrastniveau voor het scherm
Bedieningspinnen (4, 5 en 6): deze pinnen stellen / besturen de registers in het LCD-interface-IC (meer vindt u in onderstaande link)
Gegevens- / opdrachtpennen (7 tot 14): deze pennen geven de gegevens weer van welke informatie op het LCD-scherm moet worden weergegeven.
LED-pinnen (15 en 16): Deze pinnen worden gebruikt om indien nodig de achtergrondverlichting van het LCD-scherm te verlichten (optioneel).
Van al deze 16 pinnen zijn er slechts 10 pinnen die verplicht moeten worden gebruikt voor de goede werking van het LCD-scherm. Als u meer wilt weten over dit LCD-scherm, ga dan naar dit 16x2 LCD-artikel.
Schakelschema en aansluiting
Het schakelschema voor interface 16 * 2 Dot matrix LCD met STM32F103C8T6 STM32 Blue Pill board wordt hieronder getoond. Het is gemaakt met behulp van de Fritzing-software.
Zoals je kunt zien, wordt de volledige verbinding gemaakt via een breadboard. We hebben een FTDI-kaart nodig om de STM32 Microcontroller te programmeren. Dus vergelijkbaar met onze vorige tutorial, hebben we het FTDI-bord aangesloten op STM32, de Vcc en de aardingspin van de FDTI-programmeur zijn respectievelijk verbonden met de 5V-pin en de aardingspin van de STM32. Dit wordt gebruikt om het STM32-bord en het LCD-scherm van stroom te voorzien, aangezien beide can + 5V kunnen accepteren. De Rx en Tx pin van het FTDI board is verbonden met de A9 en A10 pin van de STM32 zodat we het board direct kunnen programmeren zonder de bootloader.
Vervolgens moet de LCD worden aangesloten op de STM32-kaart. We gaan de LCD in 4-bit modus gebruiken, dus we moeten de 4 data bit pinnen (DB4 tot DB7) en de twee control pin (RS en EN) verbinden met het STM32 bord zoals getoond in het STM32F103C8T6 LCD interface circuit diagram hierboven. Verder helpt de onderstaande tabel u bij het maken van de verbinding.
LCD Pin Nr. |
Naam LCD-pincode |
STM32 Pin-naam |
1 |
Grond (Gnd) |
Aarde (G) |
2 |
VCC |
5V |
3 |
VEE |
Aarde (G) |
4 |
Registreren Select (RS) |
PB11 |
5 |
Lezen / schrijven (RW) |
Aarde (G) |
6 |
Inschakelen (EN) |
PB10 |
7 |
Gegevensbit 0 (DB0) |
Geen verbinding (NC) |
8 |
Gegevensbit 1 (DB1) |
Geen verbinding (NC) |
9 |
Gegevensbit 2 (DB2) |
Geen verbinding (NC) |
10 |
Gegevensbit 3 (DB3) |
Geen verbinding (NC) |
11 |
Gegevensbit 4 (DB4) |
PB0 |
12 |
Gegevensbit 5 (DB5) |
PB1 |
13 |
Gegevensbit 6 (DB6) |
PC13 |
14 |
Gegevensbit 7 (DB7) |
PC14 |
15 |
LED Positief |
5V |
16 |
LED negatief |
Aarde (G) |
Zodra de verbindingen zijn gemaakt, kunnen we de Arduino IDE openen en beginnen met programmeren.
Programmering STM32 voor LCD met Arduino
Zoals in deze tutorial wordt verteld, zullen we de Arduino IDE gebruiken om onze STM32 Microcontroller te programmeren. Maar de Arduino IDE heeft standaard niet het STM32-bord geïnstalleerd, daarom moeten we een pakket downloaden en de Arduino IDE hierop voorbereiden. Dit is precies wat we hebben gedaan in onze vorige tutorial om aan de slag te gaan met STM32F103C8T6 met Arduino IDE. Dus als je de vereiste pakketten niet hebt geïnstalleerd, val dan terug op deze tutorial en volg deze voordat je hier verder gaat.
Zodra het STM32-bord in de Arduino IDE is geïnstalleerd, kunnen we beginnen met programmeren. Het programma lijkt erg op dat van een Arduino-bord, het enige dat zal veranderen zijn de pinnamen aangezien de notaties anders zijn voor STM32 en Arduino. Het volledige programma staat aan het einde van deze pagina, maar om het programma uit te leggen heb ik het opgesplitst in kleine betekenisvolle fragmenten zoals hieronder getoond.
Een opvallend voordeel van het gebruik van Arduino voor het programmeren van onze microcontrollers is dat Arduino kant-en-klare bibliotheken heeft voor bijna alle bekende sensoren en actuatoren. Dus hier beginnen we ons programma door de LCD-bibliotheek op te nemen, wat het programmeren een stuk eenvoudiger maakt.
# omvatten
In de volgende regel moeten we specificeren op welke GPIO-pinnen van de STM32 we de besturings- en datalijnen van het LCD- scherm hebben aangesloten. Om dit te doen, moeten we onze hardware controleren, voor het gemak kunt u ook de tabel bovenaan raadplegen waarin de pinnamen van LCD worden vermeld tegen de GPIO-pin van STM32. Na het noemen van de pinnen kunnen we het LCD-scherm initialiseren met behulp van de LiquidCrystal- functie. We noemen onze LCD ook wel " lcd ", zoals hieronder weergegeven.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // vermeld de pinnamen met LCD is verbonden met LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // Initialiseer de LCD
Vervolgens stappen we binnen in de setup- functie. Hier hebben we eerst vermeld welk type LCD we gebruiken. Omdat het een 16 * 2 LCD is, gebruiken we de regel lcd.begin (16,2). De code in de ongeldige setup- functie wordt slechts één keer uitgevoerd. We gebruiken het dus om een intro-tekst weer te geven die gedurende 2 seconden op het scherm verschijnt en vervolgens wordt gewist. Om de positie te vermelden waar de tekst moet verschijnen gebruiken we de functie lcd.setcursor en om de tekst te printen gebruiken we de lcd.print functie. Bijvoorbeeld lcd.setCursor (0,0) zal de cursor op de eerste rij en de eerste kolom plaatsen waar we " Interfacing LCD " en de functie lcd.setCursor (0,1) afdrukken verplaatst de cursor naar de tweede rij, eerste kolom waar we de regel " CircuitDigest " afdrukken.
void setup () {lcd.begin (16, 2); // We gebruiken een 16 * 2 LCD lcd.setCursor (0, 0); // Op de eerste rij eerste kolom lcd.print ("Interfacing LCD"); // Print deze lcd.setCursor (0, 1); // Op tweede rij eerste kolom lcd.print ("- CircuitDigest"); // Print deze vertraging (2000); // wacht twee seconden lcd.clear (); // Wis het scherm}
Na het tonen van de introtekst houden we het programma 2 seconden vast door een vertraging te creëren zodat de gebruiker het introbericht kan lezen. Deze vertraging wordt veroorzaakt door de lijnvertraging (2000) waarbij 2000 de vertragingswaarde in millseconden is. Na de vertraging wissen we het LCD-scherm met behulp van de lcd.clear () -functie die het LCD-scherm leegmaakt door alle tekst op het LCD-scherm te verwijderen.
Ten slotte, binnen de lege lus, tonen we "STM32 - Blue Pill" op de eerste regel en de waarde van seconden op de tweede regel. De waarde van seconde kan worden verkregen met de functie millis () . De millis () is een timer die wordt verhoogd vanaf het moment dat de MCU van stroom wordt voorzien. De waarde is in milliseconden, dus we delen deze door 1000 voordat we ze op ons LCD-scherm weergeven.
leegte loop () { lcd.setCursor (0, 0); // Op de eerste rij eerste kolom lcd.print ("STM32 -Blue Pill"); // Print deze lcd.setCursor (0, 1); // Op tweede rij eerste kolom lcd.print (millis () / 1000); // Druk de waarde van seconden af }
Het programma uploaden naar STM32F103C8T6
Zoals besproken in de bovenstaande paragraaf, zou je de uitvoer moeten kunnen opmerken zodra de code is geüpload. Maar dit programma zal de volgende keer dat u de kaart opstart niet werken, aangezien de kaart zich nog in de programmeermodus bevindt. Dus zodra het programma is geüpload, moet de jumper op boot 0 worden teruggezet naar 0-posities, zoals hieronder wordt weergegeven. Omdat het programma nu al is geüpload naar het STM32-bord, hebben we het FTDI-bord niet nodig en kan de hele set-up worden gevoed door de micro-USB-poort van het STM32-bord, zoals hieronder wordt weergegeven.
Dit is slechts een eenvoudig interfaceproject om het LCD-scherm met het STM32-bord te helpen gebruiken, maar verder kunt u dit gebruiken om coole projecten te bouwen. Ik hoop dat je de tutorial hebt begrepen en er iets nuttigs van hebt geleerd. Als u problemen had ondervonden om het te laten werken, gebruik dan het commentaargedeelte om het probleem te posten of gebruik de forums voor andere technische vragen. De volledige werking van LCD-display met STM32 is ook te vinden als een video hieronder.