STM32F405RG开发板控制OLED显示屏

1.1 实验目的

如何使用OLED模块。
如何在STM32CubeMX中配置IIC。

1.2 实验设备

STM32F4控制板,OLED模块

1.3 相关知识点

用于实验的设备原理图如下:
在这里插入图片描述 OLED:OLED是有机发光二极管的简称,OLED 由于同时具有自发光、不需要背光源、对比度高、厚度薄、视角广、反应速度快、构造及制作过程较简单等优点,得到了广泛应用。本节课我们使用的OLED 模块为0.96寸的,分辨率为12864,使用IIC接口方式,只需要两根线就可以控制OLED。通俗的来说,分辨率12864可以看成整个屏幕由12864个LED组成,整个屏幕通过每个LED的亮灭组合形成指定的图案。
IIC: IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟线 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,判断为受控单元出现故障。IIC 总线时序图如下图所示。
在这里插入图片描述在这里插入图片描述
IIC使用时又分为硬件IIC和软件IIC,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的;软件I2C一般是用GPIO管脚,用软件控制管脚状态以模拟I2C通信波形。硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。软件I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。
SSD1306:SSD1306是OLED模块上采用的驱动IC芯片。SSD1306 的每页包含了128个字节,总共8页,这样刚好是128
64的点阵大小。SSD1306的命令很多,下面简单介绍几个命令。(更多指令可以查看SSD1306的指令表)
在这里插入图片描述 0XAE/0XAF命令,0XAE 为关闭显示命令;0XAF 为开启显示命令。
0X8D命令,该指令包含 2 个字节,第一个为命令字,第二个为设置值,第二个字节的 BIT2 表示电荷泵的开关状态,该位为 1,则开启电荷泵,为 0 则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。 0X81,用于设置对比度的,这个命令包含了两个字节,第一个 0X81 为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。 当我们向其中写入这些命令时,就可以控制OLED的状态。ASCII码:在计算机中,所有的数据在存储和运算时都要使用二进制数表示,例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号,例如*、#、@等在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,每个人都可以约定自己的一套(编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。标准ASCII码也叫基础ASCII码,大致可以分作两部分組成。第一部分是:ASCII非打印控制字符,0~31及127(共33个)是控制字符或通信专用字符。 第二部分是:ASCII打印字符;32–126 为可显示字符,总共有 95 个,从空格符开始,
分别为!"#$%&’()+,-0123456789:;<= >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
因为我们要将字符在屏幕上显示出来,所以0-31由于无法打印,我们只能选择打印32-126的打印字符来显示。32代表的是空格键,这也是为什么我们在下方显示字符的程序中第一句就是c=chr-’ '。
在这里插入图片描述 有了字符,我们还需要这些字符集的点阵数据,这需要一些取模工具来完成。字符文件里采用的取模方式是阴码、列行式、逆向、C51格式。从第一列开始向下每取 8 个点作为一个字节。取模顺序是从低到高,即第一个点作为最低位。从上往下,从左往右,然后再从上往下从左往右。然后把 ASCII 字符集按 8
16大小、8*6大小取模出来,保存在 oledfont.h 里面。取完模之后,我们就可以根据取模的方式来编写显示字符的代码了。
在这里插入图片描述

1.4 实验内容

将OLED 模块连接在PB6与PB7所在的端口上。打开STM32CubeMx,配置好SYS和RCC,然后将PB6配置为I2C1_SCL,PB7配置为I2C1_SDA,然后在左侧I2C1选项中使能I2C,配置如下。
在这里插入图片描述
在这里插入图片描述 完成这些后生成工程文件,在keil5中打开。并向工程中添加oled.c、oled.h、oledfont.h文件。这几个文件用来存放OLED相关的驱动函数以及字库等。
在oled.c文件的开头我们可以看见WriteCmd()函数WriteDat()函数,可以看到其中都调用了HAL_I2C_Mem_Write()函数,这就是在STM32CubeMx配置I2C的用处,不用通过自己研究时序图,也可以直接用I2C协议向IC芯片中写入数据。
由于代码较多,只讲几个比较重要的函数。
在这里插入图片描述OLED_Init()
在这里插入图片描述 主要是一些初始化序列,我们按照厂家提供的资料来做就可以。因为 OLED 是无背光的,在初始化之后,显存都已经被清空了,所以在屏幕上是看不到任何内容的,跟没通电一个样,并不代表初始化失败,要写入数据模块才会显示的。
OLED_ShowChar()
该函数是字符显示函数,也是字符串显示函数的基础。
在这里插入图片描述 第一句c=chr-’ ’
已经在ASCII介绍部分中讲解过了,在oledfont.h文件我们可以发现字符数组是从空格字符开始的。if(x>128-1){x=0;y=y+2;}判断要显示的位置是否越界,如果越界,自动重新定义一个位置进行显示。if(Char_Size ==16)判断字符显示的大小,是按照 816还是86的大小来显示。如果是816大小,则首先调用OLED_SetPos(x,y)函数设置起点坐标,然后用for循环,将前八个字节开始从左往右将字节写入。因为取模方式采用的是列行式,所以再调用OLED_SetPos(x,y+1)函数重新开始将剩下八个字节从左往右依次写入。如果是86大小,则直接将六个字节从左往右写入即可。
回到main.c文件,首先引用oled.h头文件,然后在主函数main()中添加如下代码:
在这里插入图片描述
在这里插入图片描述
OLED_ShowCN()函数用来显示汉字,第一个参数是x坐标,第二个参数是y坐标,第三个参数是所要显示的汉字在oledfont.h文件中的F16x16[]数组中是第几个元素。

1.5实验结果

通过烧录器将程序下载进去以后,可以看到OLED屏幕上显示出你好世界四个字。

1.6总结

本节实验学习了如何控制OLED使之显示想要显示的字符汉字等,不仅如此,OLED屏幕还可以显示图片。实验中用到的I2C总线也是一个重点,相对于SPI总线,I2C只需要两根信号线就可以完成通讯,但在通信速度上要比SPI慢很多。两者都是比较常用的总线。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: STM32F405RGT6是一款高性能的32位微控制器,该原理图是用于描述该微控制器的电路连接和元件布局的图纸。原理图详细展示了各个硬件组件的连接方式,包括处理器核心、存储器、输入输出接口、时钟电路、电源等。 在STM32F405RGT6原理图中,可以看到处理器核心部分包括ARM Cortex-M4处理器和相关外设,如时钟控制器、中断控制器、DMA控制器等。这些外设有助于提高系统性能和功能。 此外,原理图还详细展示了存储器的布局,包括闪存存储器、SRAM和备份SRAM,这些存储器用于存储程序代码和数据。 输入输出接口是STM32F405RGT6与外部设备进行通信和交互的重要通道。原理图清晰地展示了串口、SPI、I2C、GPIO等接口的连接方式,以支持与传感器、显示器、存储器等外部设备的连接。 时钟电路是提供系统时钟信号的重要部分,原理图中展示了外部晶体振荡器和时钟源的连接方式。 电源部分包括电源管理单元和电源连接。原理图展示了如何提供稳定和可靠的电源给STM32F405RGT6。 总之,STM32F405RGT6原理图是一幅重要的电路图纸,它展示了微控制器的硬件连接方式,帮助工程师们理解和设计与该微控制器相关的电路。 ### 回答2: STM32F405RGT6是一款由意法半导体(STMicroelectronics)公司生产的高性能32位微控制器,它具有丰富的外设接口和强大的处理能力,广泛应用于嵌入式系统和物联网设备。 原理图是一种用于描述电路连接和组成的图表,可以用来了解电路的结构和功能。STM32F405RGT6原理图即用来描述该微控制器的电路连接和组成。 在STM32F405RGT6原理图中,我们可以看到各个外设接口的连接方式和引脚连接,例如GPIO口、USART、SPI、I2C等。原理图中还会标注每个引脚的功能和连接方式,以便开发者可以正确连接外部元件和进行相应的配置。 此外,STM32F405RGT6原理图还包括中央处理器(CPU)和内存等核心部分的电路连接,以及电源管理和时钟控制电路等关键部分的连接方式。 通过查阅STM32F405RGT6原理图,我们可以清楚地了解该微控制器的电路结构,以及如何正确使用和配置各个外设接口。这对于开发者来说非常重要,可以帮助他们设计和实现特定的应用,提高开发效率和可靠性。 总之,STM32F405RGT6原理图是描述该微控制器电路连接和组成的图表,通过它我们可以了解微控制器的功能和配置方式。对于嵌入式系统和物联网设备的开发者来说,理解并正确使用原理图是非常必要的。 ### 回答3: STM32F405RGT6是一款高性能的32位微控制器,广泛应用于嵌入式系统中。原理图是一种图形化的电路图,用于展示STM32F405RGT6的主要电路组成和连接方式。 在STM32F405RGT6的原理图中,我们可以看到各个电子元件的连接方式和电路结构。其中包括处理器核心、存储器、外设接口、时钟电路、电源电路等。 处理器核心是STM32F405RGT6的主要部分,它由ARM Cortex-M4内核驱动。存储器包括Flash和SRAM,用于存储程序代码和数据。 外设接口包括通用IO口、串行通信接口、通用定时器等,用于连接外部设备和传输数据。通用IO口可用于连接LED、按键等外部组件,串行通信接口(如UART、SPI、I2C等)可用于与其他设备进行数据通信,并通过通用定时器进行定时控制。 时钟电路用于提供稳定的时钟信号,确保芯片正常工作。电源电路则用于提供供电,包括主要电源和辅助电源。 通过原理图,我们可以了解STM32F405RGT6内部电路的连接方式,为电路的设计和调试提供了便利。同时,我们也可以根据原理图来分析和解决电路中的问题。 总而言之,STM32F405RGT6原理图展示了该微控制器的电路结构和主要连接方式,为系统设计和调试提供了基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只要可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值