赞
踩
SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口, 是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间,要求通讯速率较高的场合。
从简介来看,笔者认为驱动OLED使用IIC协议即可,不需要很高速的全双工通信,而且可以节约更多的GPIO串口去配置其他功能
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):主设备输入/从设备输出引脚。主机从这条信号线读入数据, 从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。
这是一个主机的通讯时序。NSS、SCK、MOSI信号都由主机控制产生,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。 MOSI与MISO的信号只在NSS为低电平的时候才有效,在SCK的每个时钟周期MOSI和MISO传输一位数据。
OLED 即有机发光二级管(Organic Light-Emitting Diode, OLED)。OLED 显示技术具
有自发光、广视角、几乎无穷高的对比度、较低耗电、极高反应速度、可用于挠曲性面板、
使用温度范围广、构造及制程较简单等优点,被认为是下一代的平面显示器新兴应用技术。
OLED 显示和传统的 LCD 显示不同,其可以自发光,所以不需要背光灯,这使得 OLED 显
示屏相对于 LCD 显示屏尺寸更薄,同时显示效果更优。技术资料:0.96inch SPI OLED Module
序号 | 模块引脚 | 引脚说明 |
---|---|---|
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总线时,该引脚需要接电源地) |
我们使用的stm32F103C8T6引脚有限,可以和《0.96寸SPI_OLED模块用户手册》中STM32F103RCT6的接线相同,如下图所示。
接好OLED显示器之后可以运行厂家的示例代码,会有很多好玩的显示功能。
根据TB店家的链接下载
内容显示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(); //界面显示
}
}
新建一些变量,用来后续计算温湿度数据
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。