IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32CubeMX——OLED开发基础(HAL 库) -> 正文阅读

[嵌入式]STM32CubeMX——OLED开发基础(HAL 库)

一、开发基础概述:

1、0.96 寸 OLED 模块接口定义:

SPI 接口模块

  1. GND   电源地
  2. VCC   电源正(3 ~ 5.5V)
  3. D0    OLED 的 D0 脚,在 SPI 和 IIC 通信中为时钟管脚
  4. D1    OLED 的 D1 脚,在 SPI 和 IIC 通信中为数据管脚
  5. RES    OLED 的 RES 管脚,用于复位(低电平复位)
  6. DC    OLED 的 D/C 管脚,数据和命令控制管脚
  7. CS    OLED 的 CS 管脚,片选管脚

IIC 接口模块:

  1. GND   电源地
  2. VCC   电源正(3 ~ 5.5V)
  3. SCL    OLED 的 D0 脚,在 SPI 和 IIC 通信中为时钟管脚
  4. SDA    OLED 的 D1 脚,在 SPI 和 IIC 通信中为数据管脚

2、0.96寸 OLED 模块 128×64 分辨率解析:

在这里插入图片描述

0.96寸 OLED(128×64分辨率)模块,128×64分辨率即 OLED 显示横坐标有 128 个像素格纵坐标有 64 个像素格,但是由于 OLED 不能一次控制一个点阵,只能控制 8 个点阵,而且是垂直方向扫描控制,因此垂直方向坐标可选为 0~7 页(一页 8 个像素格)水平方向可选坐标 0~128一般一个中文字体占 16×16 个像素格字母以及符号占 8×16 个像素格

3、基于 STM32 的 OLED 应用,需要做哪些事情:

  1. 移植 OLED 的底层驱动函数库
  2. 准备需要的中文字符和图片等数据
  3. 调用 OLED 驱动库中的底层函数进行应用开发

二、STM32CubeMX 配置:

1、此处我们使用 SPI 接口,接线如图:

在这里插入图片描述

2、STM32CubeMX 配置:

在这里插入图片描述
PB12PB13PB14PB15均设置为 GPIO 输出功能


三、

1、移植 OLED 的底层驱动函数库:

① 将 4 个驱动文件拷贝到工程文件(和main.c同一目录)中,将oled.c文件添加到工程代码文件中,并在main.c中引入oled.h头文件(.c.h文件的文件名根据自己手上的驱动文件而不同,可以来自淘宝商家、技术社区等)

示例文件:
在这里插入图片描述
在这里插入图片描述
main.c中引入oled.h头文件:
在这里插入图片描述


② 根据所选用的芯片型号,修改oled.h头文件中所用的芯片的头文件:

在这里插入图片描述头文件名可以参考main.h中的头文件


③ 根据电路原理图,修改oled.h中 OLED 的引脚定义:

在这里插入图片描述并检查其余定义是否正确


④ 查看OLED_Init(void)初始化函数的源码,根据电路接口和应用需要进行修改:
void OLED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	__HAL_RCC_GPIOB_CLK_ENABLE();

	//CS
	GPIO_InitStruct.Pin = OLED_CS_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_CS_GPIO, &GPIO_InitStruct);

	//DC
	GPIO_InitStruct.Pin = OLED_DC_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_DC_GPIO, &GPIO_InitStruct);

	//SCLK
	GPIO_InitStruct.Pin = OLED_SCLK_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_SCLK_GPIO, &GPIO_InitStruct);

	//SDIN
	GPIO_InitStruct.Pin = OLED_SDIN_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OLED_SDIN_GPIO, &GPIO_InitStruct);

	HAL_GPIO_WritePin(OLED_CS_GPIO, OLED_CS_GPIO_PIN, GPIO_PIN_SET);
 	HAL_GPIO_WritePin(OLED_DC_GPIO, OLED_DC_GPIO_PIN, GPIO_PIN_SET);
	HAL_GPIO_WritePin(OLED_SCLK_GPIO, OLED_SCLK_GPIO_PIN, GPIO_PIN_SET);
	HAL_GPIO_WritePin(OLED_SDIN_GPIO, OLED_SDIN_GPIO_PIN, GPIO_PIN_SET);

2、准备需要的中文字符和图片等数据:

使用取字模软件 PCtoLCD2002
在这里插入图片描述
PCtoLCD2002 的使用方法本文不作介绍。

3、OLED 驱动库中常用的函数:

void OLED_Init(void);			// OLED 初始化函数

void OLED_Clear(void);			// OLED 清屏函数

void OLED_ShowString(u8 x, u8 y, u8 *chr);				// 显示英文字符串函数

void OLED_ShowChinese(u8 x, u8 y, u8 no);				// 显示中文字符串函数

void OLED_ShowPicture(u8 x0, u8 y0, u8 x1, u8 y1, u8 BMP[]);		// 显示图片函数

四、程序编写:

1、main.c

/* USER CODE BEGIN 0 */
extern unsigned char BMP1[];

void OLED_display_info()
{
	OLED_Clear();
	OLED_ShowString(0, 0, (uint8_t *)"CSDN @");
	OLED_ShowCHinese(48, 0, 0);
	OLED_ShowCHinese(64, 0, 1);
	OLED_ShowCHinese(80, 0, 1);
	OLED_DrawBMP(77, 2, 127, 7, BMP1);
}
/* USER CODE END 0 */

  /* USER CODE BEGIN 2 */
	OLED_Init();
	OLED_display_info();
  /* USER CODE END 2 */

2、oledfont.h

const unsigned char Hzk[][32]={

{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00},
{0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00},/*"~",0*/
/* (16 X 16 , 宋体 )*/

{0x04,0x04,0x24,0x24,0xAF,0x24,0x2C,0x34,0x24,0x24,0xAF,0x24,0x24,0x04,0x04,0x00},
{0x02,0x12,0x12,0x12,0x12,0x13,0x12,0xFE,0x12,0x13,0x12,0x12,0x12,0x12,0x02,0x00},/*"莘",1*/
/* (16 X 16 , 宋体 )*/
};

3、bmp.h

const unsigned char BMP1[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,
0xE0,0xE0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0x60,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xF9,0xF8,
0xF8,0xF8,0xF0,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,
0xE0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x1F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,
0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFE,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x3F,
0xC7,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xC1,0x3F,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
0x03,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,
0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
/* (50 X 50 )*/
};

4、运行:
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 12:05:12  更:2021-09-01 12:05:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:09:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计