【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、I2C驱动总结 您所在的位置:网站首页 opporeno4se的屏幕刷新率 【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、I2C驱动总结

【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、I2C驱动总结

2024-07-09 04:35| 来源: 网络整理| 查看: 265

目录 SPI版OLED SPI 端口定义七针OLED引脚定义六针OLED引脚定义 软件SPI硬件SPI启用DMA帧率测试 I2C 版软件I2C硬件I2CDMA

STM32F103VET6 STM32 Cube IDE

SPI版 OLED SPI 端口定义

本节引自STM32驱动0.96寸OLED液晶屏(12864液晶屏) —— 小牧同学 在这里插入图片描述 两种屏幕的引脚数不一样,左边的有7个引脚,而右边的只有6个。其次,端口的标号也不完全一样,第一个分别标为GND,VCC,D0,D1,RES,DC和CS第二个分别标为GND,VCC,SCL,SDA,RST,D/C。

七针OLED引脚定义

GND — 接地端口 VCC — 接3.3V电源端口 D0 — CLK时钟信号(等同于上面的SCL) D1 — 数据端口(等同于上面的SDA) RES — 复位端口(等同于上面的RST) DC — 数据/命令选择引脚(等同于上面的D/C) CS — 片选引脚(低电平有效,也就是所需要接低电平,我实际试验过不接该引脚也是可以正常使用的)

六针OLED引脚定义

GND — 接地端口 VCC — 接3.3V电源端口 SCL — CLK时钟信号端口 SDA — MOSI数据端口 RST — 复位端口 D/C — 数据/命令选择引脚

软件SPI

       指令解读见【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解

       各引脚初始化如下,均为推挽输出: 在这里插入图片描述        从【51单片机快速入门指南】5:软件SPI获取软件SPI程序。

修改控制电平的函数:

GPIOx->BSRR = GPIO_Pin; GPIOx->BSRR = (uint32_t)GPIO_Pin #if OLED_BUFFER_MODE // uint16_t i; OLED_Set_Pos(0, 128); // for (i = 0; i < Max_Row / 8 * Max_Column; i++) // { // OLED_WR_Byte(OLED_GRAM[0][i], OLED_DATA); // } OLED_CS_L(); OLED_DC_H(); HAL_SPI_Transmit(&hspi1, OLED_GRAM[0], Max_Row / 8 * Max_Column, 10); OLED_DC_H(); OLED_CS_H(); #endif }

再次测试,仍能成功点亮,帧率为969。 在这里插入图片描述

启用DMA

在这里插入图片描述

再次修改OLED_Refresh_Gram函数

extern SPI_HandleTypeDef hspi1; void OLED_Refresh_Gram(void) { #if OLED_BUFFER_MODE // uint16_t i; OLED_Set_Pos(0, 128); // for (i = 0; i < Max_Row / 8 * Max_Column; i++) // { // OLED_WR_Byte(OLED_GRAM[0][i], OLED_DATA); // } OLED_CS_L(); OLED_DC_H(); // HAL_SPI_Transmit(&hspi1, OLED_GRAM[0], Max_Row / 8 * Max_Column, 10); HAL_SPI_Transmit_DMA(&hspi1, OLED_GRAM[0], Max_Row / 8 * Max_Column); while(hspi1.State != HAL_SPI_STATE_READY); OLED_DC_H(); OLED_CS_H(); #endif } 帧率测试

帧率的显示: 在这里插入图片描述 在1ms中断中统计1s内的帧数 在这里插入图片描述 在每次更新屏幕内容时FPS_Count自加1 在这里插入图片描述 这个帧率已经远远超过屏幕本身所能提供的刷新率了。 在这里插入图片描述

I2C 版 软件I2C

将SCL设为推挽输出,SDA设为开漏上拉输出 在这里插入图片描述

从【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解和【51单片机快速入门指南】4: 软件 I2C获取控制程序。

修改对应引脚,其他部分同SPI的步骤。 在这里插入图片描述

//SCL拉高 移植时需修改 void I2C_SCL_H(void) { OLED_SCL_GPIO_Port->BSRR = OLED_SCL_Pin; } //SCL拉低 移植时需修改 void I2C_SCL_L(void) { OLED_SCL_GPIO_Port->BSRR = (uint32_t)OLED_SCL_Pin OLED_SDA_GPIO_Port->BSRR = (uint32_t)OLED_SDA_Pin if (cmd) HAL_I2C_Mem_Write(&hi2c1, OLED_ADDRESS // OLED_WR_Byte(OLED_GRAM[0][i], OLED_DATA); // } HAL_I2C_Mem_Write(&hi2c1, OLED_ADDRESS // OLED_WR_Byte(OLED_GRAM[0][i], OLED_DATA); // } // HAL_I2C_Mem_Write(&hi2c1, OLED_ADDRESS


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有