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

任务要求

  1. 练习通过SPI总线实现OLED屏幕显示。显示自己的学号和姓名。
  2. 显示AHT20的温度和湿度;
  3. 上下或左右的滑动显示长字符;
    本人所用开发板:野火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); 
		
	}
}

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

显示温湿度与文本的滚动显示

前提是利用I2C已经做出了基于STM32与AHT20的温湿度检测。

温湿度显示

1,在上文中的例程里加入之前测量温湿度的文件与头文件;
如下:
在这里插入图片描述
2,需要在主程序main()中加入读取温湿度的函数,如下:

void read_AHT20_once(void)
{
   

	
	delay_ms(10
  • 12
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答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幕已经被广泛应用于各种嵌入式系统中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值