STM32F103基于spi实现OLED显示

一、原理

SPI的定义
SPI(Serial Peripheral Interface)就是串行外围设备接口。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,时序主要是在 sck 的控制下,两个双向移位寄存器进行数据交换。
上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。

二、实现

代码过于多,只展示部分核心代码.更多代码可以直接下载源码

1.显示中文

把需要显示的中文字符存放在该文件里面
在
通过提取子模软件提取对应汉字的点阵,点阵大小为16*16
在这里插入图片描述
在main函数中调用显示中文的函数

	GUI_ShowCHinese(10,0,16,"重庆交通大学",1);

函数原型

  • x为相对于屏幕左边偏移量
  • y为相对于屏幕上边偏移量
  • hsize为点阵大小,选择16
  • str为显示的字符串
  • mode为模型,选择1
    其他显示函数参数大同小异
    在这里插入图片描述

2.滚动显示

水平滚动

	OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动

	OLED_WR_Byte(0x27,OLED_CMD); //水平向左或者右滚动 26/27

	OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

	OLED_WR_Byte(0x00,OLED_CMD); //起始页 0

	OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔

	OLED_WR_Byte(0x02,OLED_CMD); //终止页 2

	OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

	OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节
	
	//博客id
	GUI_ShowCHinese(10,0,16,"醉意丶千层梦",1);	

	//开启滚动
	OLED_WR_Byte(0x2F,OLED_CMD);

垂直滚动

OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
OLED_WR_Byte(0x07,OLED_CMD);        //终止页 1
OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

3.显示字符串

	GUI_ShowString(10,24,"631907060520",16,1);

函数原型

  • x为相对于屏幕左边偏移量
  • y为相对于屏幕上边偏移量
  • chr为显示的字符串
  • Char_Size为字体大小,可以选择16
  • mode 默认选择1即可
    在这里插入图片描述

4.读取温湿度

参考前面的博客STM32F103基于I2C协议的AHT20温湿度传感器的数据采集 了解如何获取温湿度的值

		AHT20_Read_CTdata(CT_data);;  //crc校验后,读取AHT20的温度和湿度数据 
		c1 = CT_data[0]*1000/1024/1024;  //计算得到湿度值c1(放大了10倍)
		t1 = CT_data[1]*2000/1024/1024-500;//计算得到温度值t1(放大了10倍)

		//转为字符串易于显示
		temp[0]=t1/100+'0';
		temp[1]=(t1/10)%10+'0';
		temp[2]='.';
		temp[3]=t1%10+'0';
		temp[4]='\0';
		
		hum[0]=c1/100+'0';
		hum[1]=(c1/10)%10+'0';
		hum[2]='.';
		hum[3]=c1%10+'0';
		hum[4]=32;
		hum[5]='%';
		hum[6]='\0';

5.显示温湿度

		//显示温度
		GUI_ShowCHinese(15,28,16,"温度",1);
		GUI_ShowString(47,28,":",16,1);
		GUI_ShowString(62,28,temp,16,1);
		GUI_ShowCHinese(96,28,16,"℃",1);

		//显示湿度
		GUI_ShowCHinese(15,48,16,"湿度",1);
		GUI_ShowString(47,48,":",16,1);
		GUI_ShowString(62,48,hum,16,1);

三、结果

1.开机显示欢迎信息

在这里插入图片描述

2.循环读取温湿度以及滚动显示我的id

在这里插入图片描述

四、总结

结合oled显示数据,可以使得数据可视化更加方便

五、参考

六、源码

1.github

https://github.com/TangtangSix/Stm32OLED

2.gitee

https://gitee.com/tangtangsix/Stm32OLED
.

  • 16
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: STM32F103是一款常用的ARM Cortex-M3系列的单片机,通过SPI接口来实现与外部设备的通信是常见的应用之一。以下是关于如何使用STM32F103SPI接口来读写OLED显示屏的简要概述。 首先,确保已经按照需要的电气连接,将OLED显示屏与STM32F103连接起来,其中包括SCK、MOSI、CS(片选)以及DC(数据/命令切换)等信号线。 其次,配置SPI接口。首先,使能SPI时钟,选择合适的SPI通道,配置SPI模式以及时钟分频等参数。可以使用STM32CubeMX工具来简化配置过程。然后,根据OLED显示屏的规格,配置SPI通信的特殊需求,如数据宽度、传输模式、控制信号等。 接下来,编写相关的代码来控制OLED显示屏。首先,确保OLED显示屏处于可用状态,并准备好相应的初始设置和功能配置。然后,使用SPI接口的读写函数将数据发送到OLED显示屏或从中读取数据。SPI接口的读写函数可以通过库或者使用直接读写寄存器的方式实现。 在具体的数据传输过程中,需要根据OLED显示屏使用的协议来设置相应的数据格式和控制信号。例如,发送命令和数据之前,需要将DC信号切换到相应的状态;同时,在SPI通信完成之后需要切换CS信号的状态以结束通信。 最后,记得适时进行相关的错误处理和调试。可以根据实际需要来添加适当的延迟等待SPI数据传输完成以及OLED显示屏的响应。 总之,通过配置STM32F103SPI接口以及编写相应的代码,可以实现OLED显示屏的数据读写。具体的实现方式需要根据OLED显示屏的规格和通信协议来确定。 ### 回答2: 在使用STM32F103芯片进行SPI读写OLED时,我们首先需要了解一些基本概念。 SPI(Serial Peripheral Interface)是一种串行通信协议,用于在微控制器或其他数字芯片之间进行全双工的数据通信。在SPI总线上,有一个主设备(通常是微控制器)和一个或多个从设备(如OLED显示屏)。主设备负责控制总线并发送数据,从设备负责接收数据并做出响应。 要在STM32F103芯片上使用SPI读写OLED,我们需要按照以下步骤进行操作: 1. 硬件连接:首先将STM32F103芯片的SPI引脚与OLED显示屏的SPI引脚连接。通常,STM32F103SPI引脚由标有SCK(时钟线)、MISO(主设备输入,从设备输出)、MOSI(主设备输出,从设备输入)和NSS(片选信号)的引脚组成。 2. 初始化:在代码中,我们需要初始化SPI配置寄存器,设置SPI时钟相位、极性等参数,以及设置NSS引脚的控制方式。还需要初始化OLED显示屏,设置OLED的工作模式和其他参数。 3. 发送数据:通过SPI发送数据到OLED。我们可以使用SPI发送一个字节的数据或一串字节的数据,具体取决于要显示的内容。发送数据的函数通常会等待数据传输完成,然后返回结果。 4. 接收数据(如果需要):如果OLED显示屏返回一些数据,我们可以通过SPI接收数据的功能来读取这些数据。接收数据的函数通常会等待数据传输完成,然后将接收到的数据返回。 通过以上步骤,我们就可以实现STM32F103芯片对OLED显示屏的SPI读写操作。具体的实现方法和代码可以参考STM32F103的相关文档或参考其他开源项目。 ### 回答3: STM32F103是意法半导体生产的一款32位微控制器,具有强大的性能和丰富的外设支持。SPI(Serial Peripheral Interface)是一种串行外设接口协议,用于在微控制器与外部设备之间进行高速数据传输。 要实现STM32F103OLEDSPI读写,可以按照以下步骤操作: 1. 首先,需要将OLED连接到STM32F103SPI端口。OLED通常具有SDA(数据线)、SCL(时钟线)、CS(片选线)、RES(复位线)等引脚,需要将它们连接到STM32F103对应的引脚(如PB14、PB13、PB12、PB11)。 2. 在STM32F103的代码中配置SPI外设。可以使用STM32CubeMX进行外设配置,选择SPI模块,并设置相应的引脚和参数(如波特率、数据位宽等)。 3. 编写代码来初始化SPI外设。在代码中,需要初始化SPI控制寄存器的各个参数,如使能SPI、选择主从模式、设置数据传输顺序等。 4. 编写代码来控制OLED的初始化。在初始化时,可以设置OLED显示参数、清空显示缓存等。 5. 编写代码来实现SPI写入数据到OLED。通过编写SPI发送数据的函数,将要显示的数据发送给OLED。 6. 编写代码来实现SPIOLED读取数据。通过编写SPI接收数据的函数,可以读取OLED的状态信息或其他返回的数据。 7. 在主函数中调用相应的函数,完成SPI读写操作。可以先调用初始化函数,然后通过写入数据和读取数据函数进行SPI读写操作。 综上所述,通过对STM32F103SPI外设配置和编写相应的代码,可以实现OLED之间的高速数据读写,可以灵活地控制OLED显示
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值