如何将LCD与STM32F103C8T6 STM32开发板连接并编程

描述

对于任何微控制器项目,将显示单元与它连接将使项目更容易,并吸引用户与之交互。微控制器最常用的显示单元是 16×2 字母数字显示器。这些类型的显示器不仅可用于向用户显示重要信息,还可以在项目的初始开发阶段充当调试工具。因此,在本教程中,我们将学习如何将16×2 LCD显示器与STM32F103C8T6STM32开发板连接,并使用Arduino IDE对其进行编程。

所需材料

STM32蓝丸开发板

16×2 液晶显示屏

FTDI 程序员

连接线

液晶显示器

16×2 点阵 LCD 显示屏简介

如前所述,Energia IDE提供了一个漂亮的库,使接口变得轻而易举,因此不一定要了解显示模块的任何信息。但是,展示我们正在使用的东西不是很有趣吗!!

名称 16×2 意味着显示器有 16 列和 2 行,它们一起 (16*2) 形成 32 个框。一个盒子在下图中看起来像这样

STM32

单个框有 40 个像素(点),矩阵顺序为 5 行 8 列,这 40 个像素共同构成一个字符。同样,可以使用所有框显示 32 个字符。现在让我们看一下引脚排列。

STM32

LCD共有16个引脚,如上图所示,它们可以分为四组,如下所示

源引脚(1、2 和 3):这些引脚为显示器提供功率和对比度水平

控制引脚(4、5 和 6):这些引脚设置/控制LCD接口IC中的寄存器(更多信息可在下面的链接中找到)

数据/命令引脚(7 至 14):这些引脚提供LCD上应显示哪些信息的数据。

LED 引脚(15 和 16):如果需要,这些引脚用于照亮LCD的背光(可选)。

电路图和连接

16*2点阵LCD与STM32F103C8T6 STM32蓝色药丸板接口的电路图如下所示。它是使用弗里辛软件制作的。

STM32

如您所见,完整的连接是通过面包板进行的。我们需要一个FTDI板来对STM32微控制器进行编程。因此,与我们之前的教程类似,我们将FTDI板连接到STM32,FDTI编程器的Vcc和接地引脚分别连接到STM32的5V引脚和接地引脚。这用于为STM32板和LCD供电,因为两者都可以接受+5V。FTDI 板的 Rx 和 Tx 引脚连接到 STM9 的 A10 和 A32 引脚,因此我们可以直接对电路板进行编程,而无需引导加载程序。

接下来,液晶屏必须连接到STM32板。我们将在4位模式下使用LCD,因此我们必须将4个数据位引脚(DB4至DB7)和两个控制引脚(RS和EN)连接到STM32板,如上面的STM32F103C8T6 LCD接口电路图所示。此外,下表将帮助您建立连接。

 

液晶屏引脚编号 液晶屏引脚名称 STM32 引脚名称
1 地面(锭) 地面 (G)
2 可变资本公司 5V
3 维伊 地面 (G)
4 寄存器选择 (RS) PB11
5 读/写 (RW) 地面 (G)
6 启用 (英文) PB10
7 数据位 0 (DB0) 无连接(常闭)
8 数据位 1 (DB1) 无连接(常闭)
9 数据位 2 (DB2) 无连接(常闭)
10 数据位 3 (DB3) 无连接(常闭)
11 数据位 4 (DB4) PB0
12 数据位 5 (DB5) PB1
13 数据位 6 (DB6) 电脑13
14 数据位 7 (DB7) 电脑14
15 正极指示灯 5V
16 负极指示灯 地面 (G)

 

连接完成后,我们可以打开Arduino IDE并开始编程。

使用 Arduino 对 LCD 的 STM32 进行编程

如本教程所述,我们将使用Arduino IDE对STM32微控制器进行编程。但是,默认情况下,Arduino IDE不会安装STM32板,因此我们必须下载一个软件包并为此准备Arduino IDE。

一旦STM32板卡安装在Arduino IDE中,我们就可以开始编程了。该程序与Arduino板非常相似,唯一会改变的是引脚名称,因为STM32和Arduino的符号不同。完整的程序在本页末尾给出,但为了解释该程序,我将其拆分为有意义的小片段,如下所示。

使用Arduino对我们的微控制器进行编程的一个显着优势是Arduino为几乎所有著名的传感器和执行器提供了现成的库。因此,在这里,我们通过包含LCD库来启动我们的程序,这使编程变得更加容易。

#include // include the LCD library

在下一行中,我们必须指定已将LCD显示控件和数据线连接到STM32的GPIO引脚。为此,我们必须检查我们的硬件,为方便起见,您还可以参考顶部给出的表格,其中列出了 LCD 与 STM32 的 GPIO 引脚的引脚名称。提到引脚后,我们可以使用液晶功能初始化LCD。我们还将我们的LCD命名为“LCD”,如下所示。

const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to

LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD

接下来,我们进入设置功能。在这里,我们首先提到我们使用的LCD类型。由于它是 16*2 LCD,我们使用 lcd.begin(16,2) 行。void 设置函数中的代码只执行一次。因此,我们使用它来显示一个介绍文本,该文本在屏幕上显示 2 秒钟,然后被清除。要提及文本必须出现的位置,我们使用函数lcd.setcursor,并使用lcd.print函数打印文本。例如,lcd.setCursor(0,0) 会将光标设置在我们打印“接口 LCD”的第一行和第一列,函数 lcd.setCursor (0,1) 将光标移动到第二行第一列,我们在其中打印“CircuitDigest”行。

void setup() {  lcd.begin(16, 2);//We are using a 16*2 LCD  lcd.setCursor(0, 0); //At first row first column  lcd.print("Interfacing LCD"); //Print this  lcd.setCursor(0, 1); //At secound row first column  lcd.print("-CircuitDigest"); //Print this  delay(2000); //wait for two secounds  lcd.clear(); //Clear the screen }

显示介绍文本后,我们通过创建延迟来保持程序 2 秒,以便用户可以阅读介绍消息。此延迟由行延迟 (2000) 创建,其中 2000 是以磨机秒为单位的延迟值。延迟后,我们使用lcd.clear()函数清除LCD,该函数通过删除LCD上的所有文本来清除LCD。

最后在空循环中,我们在第一行显示“STM32 – Blue Pill”,在第二行显示秒值。秒的值可以从 millis() 函数中获得。millis() 是一个计时器,从 MCU 通电时开始递增。该值以毫秒的形式出现,因此我们在将其显示在LCD上之前将其除以1000。

void loop() {

lcd.setCursor(0, 0); //At first row first column

lcd.print("STM32 -Blue Pill"); //Print this

lcd.setCursor(0, 1); //At secound row first column

lcd.print(millis() / 1000); //Print the value of secounds

}

将程序上传到STM32F103C8T6板

按照电路图中所示进行连接,并在Arduino IDE上使用下面给出的代码。转到工具并确保在入门教程中选择了正确的板。此外,在上传程序之前,请确保将启动 0 跳线设置为 1,如下图所示,然后按重置按钮。按下上传按钮时,应上传代码,消息将显示在LCD上,如下图所示。

STM32

在工作模式下验证输出

如上一段所述,您应该能够在上传代码后立即注意到输出。但是下次上电时,该程序将不起作用,因为电路板仍处于编程模式。因此,一旦程序上传,启动 0 上的跳线应更改回 0 位置,如下所示。此外,由于程序已经上传到STM32板,我们不需要FTDI板,整个设置可以通过STM32板的micro-USB端口供电,如下所示。

STM32

这只是一个简单的接口项目,以帮助将LCD显示器与STM32板一起使用,但您可以进一步使用它来构建很酷的项目。希望您理解本教程并从中学到一些有用的东西。

/*

Program to test 16*2 Alaphanumeric LCD with STM32 (Blue Pill) 

The circuit:

* LCD RS pin to digital pin PB11

* LCD Enable pin to digital pin PB10

* LCD D4 pin to digital pin PB0

* LCD D5 pin to digital pin PB1

* LCD D6 pin to digital pin PC13

* LCD D7 pin to digital pin PC14

* LCD R/W pin to ground

* LCD VSS pin to ground

* LCD VCC pin to 5V

*/



#include // include the LCD library


const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to 

LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD


void setup() {

lcd.begin(16, 2);//We are using a 16*2 LCD

lcd.setCursor(0, 0); //At first row first column 

lcd.print("Interfacing LCD"); //Print this

lcd.setCursor(0, 1); //At secound row first column 

lcd.print("-CircuitDigest"); //Print this



delay(2000); //wait for two secounds 

lcd.clear(); //Clear the screen

}


void loop() {


lcd.setCursor(0, 0); //At first row first column 

lcd.print("STM32 -Blue Pill"); //Print this


lcd.setCursor(0, 1); //At secound row first column 

lcd.print(millis() / 1000); //Print the value of secounds

}

 


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分