STM32 SPI协议接口下的OLED屏显示

任务要求

练习通过SPI总线实现OLED屏幕显示。显示自己的学号和姓名。
本人所用开发板:野火STM32F103指南者;
代码编写烧录:KEIL5
所用协议:SPI;
所用例程来源:http://www.lcdwiki.com/zh/0.96inch_SPI_OLED_Module

SPI协议接口

SPI协议(SerialPeripheralInterface),即串行外围设备接口,是一种高速全双工的通信总线。
基本通信过程:

在这里插入图片描述
SPI接口位置:在这里插入图片描述

SPI引脚:
MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据;
MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据;
SCK:串口时钟,作为主设备的输入,从设备的输入;
NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

SPI下的STM32与OLED连接

例程改写

1.在OLED官网下载例程:
http://www.lcdwiki.com/zh/0.96inch_SPI_OLED_Module在这里插入图片描述
下载完成解压后再用KEIL打开SPI对应的OLED显示例程“0.96inch_OLED_Demo_STM32F103ZET6_Hardware_4-wire_SPI”,如下:
在这里插入图片描述
2.STM32与OLED的连接依据main.c程序里的注释提示进行连接即可,如下:
在这里插入图片描述

注意:此时的OLED的CS接口不用连接,只需要六根线进行STM32与OLED的连接。

完成后,模块显示如下:在这里插入图片描述
此时直接编译烧录例程,不用改动,显示如下:
在这里插入图片描述

此时如果OLED屏不显示,可能是接线有问题,检查即可。

3.改写程序:
在oledfont.h头文件里添加个人需要显示的汉字字模,此时需要利用PCtoLCD软件,打开界面如下:
在这里插入图片描述

该软件为野火资料包里的开发软件自带。
关于字模软件的使用详见野火自带教程。

此时选取字模,添加进数组。如下:

const typFNT_GB16 cfont16[] = 
{
    
    
	"马",0x00,0x00,0x7F,0xE0,0x00,0x20,0x00,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x1F,0xFC,
   0x00,0x04,0x00,0x04,0x00,0x04,0xFF,0xE4,0x00,0x04,0x00,0x04,0x00,0x28,0x00,0x10,/*"妈",0*/
  "舒",0x10,0x00,0x11,0xF8,0x28,0x08,0x44,0x50,0x82,0x20,0x7C,0x10,0x13,0xFE,0x10,0x22,
   0xFE,0x24,0x10,0x20,0x10,0x20,0x7C,0x20,0x44,0x20,0x44,0x20,0x7C,0xA0,0x44,0x40,/*"舒",0*/
  "娅",0x20,0x00,0x23,0xFC,0x20,0x90,0x20,0x90,0xF8,0x90,0x48,0x92,0x4C,0x92,0x4A,0x94,
   0x8A,0x94,0x4A,0x98,0x30,0x90,0x10,0x90,0x28,0x90,0x48,0x90,0x87,0xFE,0x00,0x00,/*"娅",0*/

注意:此时我选择的是1616的OLED汉字显示,因此在添加字模时,也是添加进1616汉字显示对应的数组。添加后注意保存。

再进入test.c进行修改,将void TEST_MainPage(void)函数修改。如下:

void TEST_MainPage(void)
{
    
    	
	
	GUI_ShowString(20,0,"631807030324",8,1);
	GUI_ShowCHinese(16,20,16,"马舒娅",1);
	delay_ms(1500);			
}

修改完成,再进入main.c文件进行修改,如下:

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "gui.h"
#include "test.h"
int main(void)
{
    
    	
	delay_init();	    	       //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	 //设置NVIc中断分组2:2位抢占优先级,2位响应优先级
	
	OLED_Init();			         //初始化OLED
	OLED_Clear(0);             //清屏,全黑
	while(1) 
	{
    
    	
		TEST_MainPage();         //主页面显示姓名与学号
		OLED_Clear(0); 
		
	}
}

此时全部程序已修改完毕,现在进行编译烧录,即可成功运行。
烧录完成,显示如下:
在这里插入图片描述

总结

本次STM32 SPI协议接口下的OLED屏显示主要任务已完成,对于STM32的SPI接口协议的学习还需更加深入。

猜你喜欢

转载自blog.csdn.net/qq_44644740/article/details/111478603