STM32通过SPI协议驱动OLED屏

一、SPI协议介绍

01 简介

SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口, 是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间,要求通讯速率较高的场合。

从简介来看,笔者认为驱动OLED使用IIC协议即可,不需要很高速的全双工通信,而且可以节约更多的GPIO串口去配置其他功能

02 SPI物理层

在这里插入图片描述

SPI通讯使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,片选线为 ,它们的作用介绍如下:

(1) (Slave Select)从设备选择信号线,常称为片选信号线,也称为NSS、CS,以下用NSS表示。当有多个SPI从设备与SPI主机相连时, 设备的其它信号线SCK、MOSI及MISO同时并联到相同的SPI总线上,即无论有多少个从设备,都共同只使用这3条总线; 而每个从设备都有独立的这一条NSS信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。 I2C协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而SPI协议中没有设备地址,它使用NSS信号线来寻址, 当主机要选择从设备时,把该从设备的NSS信号线设置为低电平,该从设备即被选中,即片选有效, 接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以NSS线置低电平为开始信号,以NSS线被拉高作为结束信号。

(2) SCK (Serial Clock):时钟信号线,用于通讯数据同步。它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样, 如STM32的SPI时钟频率最大为fpclk/2,两个设备之间通讯时,通讯速率受限于低速设备。

(3) MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。主机的数据从这条信号线输出, 从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。

(4) MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。主机从这条信号线读入数据, 从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

03 SPI基本通讯过程

在这里插入图片描述
这是一个主机的通讯时序。NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。 MOSI与MISO的信号只在NSS为低电平的时候才有效,在SCK的每个时钟周期MOSI和MISO传输一位数据。

二、OLED显示器介绍

01 简介

OLED 即有机发光二级管(Organic Light-Emitting Diode, OLED)。OLED 显示技术具
有自发光、广视角、几乎无穷高的对比度、较低耗电、极高反应速度、可用于挠曲性面板、
使用温度范围广、构造及制程较简单等优点,被认为是下一代的平面显示器新兴应用技术。
OLED 显示和传统的 LCD 显示不同,其可以自发光,所以不需要背光灯,这使得 OLED 显
示屏相对于 LCD 显示屏尺寸更薄,同时显示效果更优。技术资料:0.96inch SPI OLED Module
在这里插入图片描述

02 接口定义

序号 模块引脚 引脚说明
1 GND OLED电源地
2 VCC OLED电源正(3.3V~5V)
3 D0 OLED SPI和IIC总线时钟信号
4 D1 OLED SPI和IIC总线数据信号
5 RES OLED复位信号,低电平复位(选择IIC总线时,该引脚需要接高电平(可以接VCC))
6 DC OLED命令/数据输入选择信号,高电平:数据,低电平:命令(选择3线制SPI总线时,该引脚不需要使用(可以不接);选择IIC总线时,该引脚需要接电源地)
7 CS OLED片选信号,低电平使能(选择IIC总线时,该引脚需要接电源地)

03 与STM32接线图

我们使用的stm32F103C8T6引脚有限,可以和《0.96寸SPI_OLED模块用户手册》中STM32F103RCT6的接线相同,如下图所示。
在这里插入图片描述
接好OLED显示器之后可以运行厂家的示例代码,会有很多好玩的显示功能。

三、汉字取模软件介绍

01 下载

根据TB店家的链接下载
在这里插入图片描述

02 操作流程

  1. 设置字高和字宽为16*16,进入设置在这里插入图片描述
  2. 修改点阵格式,取模方式,输出设置为十六进制数,C51格式,设置行前缀和行后缀在这里插入图片描述
  3. 输入汉字,转化字模,复制下来在这里插入图片描述

四、显示个人学号姓名

01 程序代码

内容显示TEST_MainPage函数->test.c文件

void TEST_MainPage(void)
{
   	
	GUI_ShowString(28,0,"Shuaishuai",16,1);
	GUI_ShowCHinese(28,22,16,"帅帅",1);
	GUI_ShowString(4,48,"  6320070306XX",16,1);
	delay_ms(1500);		
	delay_ms(1500);
}

汉字存储在oledfont.h

const typFNT_GB16 cfont16[] = 
{
   
	"帅",0x08,0x20,0x08,0x20,0x48,0x20,0x48,0x20,0x49,0xFC,0x49,0x24,0x49,0x24,0x49,0x24,
	0x49,0x24,0x49,0x24,0x49,0x24,0x09,0x34,0x11,0x28,0x10,0x20,0x20,0x20,0x40,0x20,/*"帅",1*/
......
......
}

main.c 主函数

int main(void)
{
   	
	delay_init();	    	       //延时函数初始化	  
	OLED_Init();			         //初始化OLED  
	OLED_Clear(0);             //清屏(全黑)
	while(1) 
	{
   	
		TEST_MainPage();         //界面显示
	}
}

02 结果演示

请添加图片描述

五、显示AHT20温湿度数据

01 程序代码

新建一些变量,用来后续计算温湿度数据

char strTemp[30];  //声明字符数组strTemp,初始化元素30  
char strHumi[30];  //声明字符数组strHumi,初始化元素30
int t;
int h;
float a;
float b;

uint8_t t1,t2,t3,t4;
uint8_t h1,h2,h3,h4;

在之前的温湿度显示函数read_AHT20中添加计算公式,写入bsp_i2c.c文件

void read_AHT20(void)
{
   
	uint8_t   i;
	for(i=0; i<6; i++)
	{
   
		readByte[i]=0;
	}

	//-------------
	I2C_Start()
  • 0
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32HAL库提供了SPI驱动OLED幕的功能。通过HAL库中的SPI接口函数,可以实现与OLED幕的通信。具体实现步骤包括:初始化SPI接口、配置OLED幕参数、发送数据到OLED幕等。需要注意的是,不同型号的OLED幕可能需要不同的配置参数,需要根据具体型号进行调整。 ### 回答2: STM32HAL库是针对STM32系列单片机设计的一套驱动库,在这个库中包含了各种模块的驱动代码,并且提供了丰富的函数接口,方便开发人员进行各种应用的开发。其中就包括了SPI驱动接口,可以用来方便地控制OLED幕的显示。 首先,我们需要对OLED幕的接口进行了解。一般来说,OLED幕都是通过SPI接口进行通信的,因此我们需要调用STM32HAL库中的SPI驱动相关函数。我们先来看看STM32HAL库中提供的SPI驱动接口: 1.初始化SPI控制器:这一操作通常在初始化函数中进行,通过配置SPI控制器的各种参数,例如数据传输的方向、数据位宽、时钟极性等等,来确保SPI接口能够正确地工作。 2.写入数据:对于OLED幕来说,我们通常需要向OLED幕写入各种指令或数据以控制其显示内容。通过调用STM32HAL库中提供的SPI_Write函数,我们就可以把要发送的数据通过SPI接口发送到OLED幕。 3.读取数据:有些情况下,我们需要从OLED幕中读取一些数据。通过调用SPI_Read函数,我们就可以从SPI接口中读取来自OLED幕的数据。 4.控制SPI片选引脚:SPI接口中的片选引脚是一个与设备相关的输入引脚,它用来表示哪个设备当前正在和主控器进行通信。通过调用SPI_CS_ON和SPI_CS_OFF函数,我们可以向OLED幕控制器发送SPI片选信号,从而让其进入或退出通信状态。 通过以上四种接口函数,我们可以轻松地控制OLED幕的显示内容,只需要按照其指令手册的要求,通过SPI接口发送相应的指令和数据即可。当然,在实际应用中,我们还需要保证时序正确、电压稳定等等一系列问题,这就需要我们在硬件电路设计及软件编程方面进行细致的设计和实现了。 ### 回答3: STM32是一种微控制器,用于嵌入式系统的设计。STM32提供了一系列的HAL库,支持多种硬件接口,包括UART、SPI、I2C等。而OLED幕是非常常见的显示设备之一,其低功耗、高亮度和高对比度使其成为在很多场合下的最佳选择。本文将探讨如何使用STM32 HAL库驱动OLED幕。 在开始之前,我们需要了解一些基本的知识。SPI通信是一种串行通信协议,它通过一组线( SCLK、MISO、MOSI、CS )实现数据的传输。在SPI的通信过程中,主设备控制着时钟线,从设备依据时钟改变MISO、MOSI、CS等线所处的电平状态进行数据的传输。OLED则主要是有点阵时基驱动方法。 在STM32HAL库中,我们可以使用以下步骤进行驱动OLED幕: (1)初始化SPI总线。使用HAL_SPI_Init函数。在这个函数中,我们需要设置spi的工作模式,数据位长度,时钟极性、相位和为哪一个片选(CS)线打开。在这个过程中,我们还需要初始化时许参数,包括时钟速率,数据大小,等等。 (2)初始化GPIO。因为SPI是直接通过GPIO口进行数据传输的,所以我们必须初始化GPIO。使用HAL_GPIO_Init函数。我们需要设置GPIO的引脚号、工作模式、输出背景等等。 (3)初始化OLED幕。在初始化之后,我们会发现OLED幕没有显示任何内容。为了解决这个问题,我们需要运行“显示点阵”的函数。我们可以使用SPI分时处理机制,根据点阵数据进行显示。 总的来说,STM32 HAL库提供了快速、可靠、简单的方式来控制OLED幕。使用HAL库,无需手动设置寄存器值,减少了开发难度和复杂性。由于其性能和低功耗的特性,STM32HAL库SPI驱动OLED幕已经被广泛应用于各种嵌入式系统中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值