当前位置:   article > 正文

STM32通过SPI协议驱动OLED屏_oled lcd屏幕 都使用spi通信

oled lcd屏幕 都使用spi通信

一、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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

汉字存储在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*/
......
......
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

main.c 主函数

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/309431
推荐阅读
相关标签
  

闽ICP备14008679号