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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32+CubeMax使用硬件SPI控制OLED模块 例程移植+Debug -> 正文阅读

[嵌入式]STM32+CubeMax使用硬件SPI控制OLED模块 例程移植+Debug

本示例使用的模块如下

  1. STM32F103C8T6核心升级板

  2. 0.96寸7线OLED模块

很多东西也是从网上学来的,多谢开源的各位大佬

部分参考:https://www.cnblogs.com/dragonet-Z/p/14689345.html

有的参考自己也忘记了…侵删

用到的资料在这里下载:oled相关资料


1 接线及CubeMax配置

模块是从某宝店家买的,所以用模块先看店家的第一手资料(自己不看资料一通乱搞的结果就是时间也花了,心态也炸了)

店家给出的接线方式如下

请添加图片描述

我们就按照这个方式来配置CubeMax。基本的配置就不说了,这里说SPI和GPIO

SPI配置如下

请添加图片描述

GPIO配置如下

请添加图片描述

其中PA5和PA7是硬件SPI的时钟和数据引脚,其余的三个是任意的GPIO输出引脚、

留意一下引脚标签,如果按照图中的写法进行标记在例程中就不需要修改引脚了

此外可以自己添加配置USART方便调试

2 例程移植

这里结合了网上搜罗来的几份例程,研究了一下发现都是大同小异,只是引脚配置等小细节有差别。完整例程下载即可

将oled文件夹放到CubaMax生成的工程文件夹内

请添加图片描述

打开keil,将oled.c添加入工程

请添加图片描述

添加.h文件路径

请添加图片描述

在main.c中添加头文件

请添加图片描述

oledfont.h在oled.c中已经包含了,如果在mian.h中再包含就会报重定义的错误

点击编译,没有问题就是例程已经移植成功了,接下来就是函数调用了

3显示方法

3. 1 显示字符串

oled在使用前需要初始化,在mian函数中调用初始化函数

请添加图片描述

中间两个函数是控制正反方向显示和正反色显示的,具体看例程注释

OLED显示文字的原理是我们提前将要显示的文字的像素信息存储到程序中,当要显示的时候,调用函数将文字一个字一个字地画出来,例程中,这些信息存储在oledfont.h中,像这些

请添加图片描述

这些信息是用软件取模得来的,具体的实现方法在资料中有介绍

得到取模信息后调用显示字符串函数即可

请添加图片描述

//显示字符串
//x,y:起点坐标 x:0-63,y:0-127
//size1:字体大小,只能选择12、16、24
//*chr:字符串起始地址 
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t size1)

这个函数是把要显示的内容写入显存,所以使用完之后还要再调用OLED_Refresh()函数将显存中的内容显示出来

除了直接使用"hello"这种字符串还可以直接显示字符串变量,方法同理

当直接输出"hello"时,之所以要进行强制类型转换是为了消去警告信息

请添加图片描述

3.2 显示变量

要显示某个变量的值时,我们只要先将变量变成字符串,然后输出字符串即可

我们使用sprintf函数来将变量变成字符串,具体用法见百度

请添加图片描述

请添加图片描述

3.3 显示汉字

显示汉字同样是利用点阵信息,汉字的点阵信息像这样

请添加图片描述

要显示汉字,直接调用函数即可

//显示汉字
//x,y:起点坐标
//num:汉字对应的序号
//size1:汉字的字体大小,点阵中是多大,这里就要填多大
//取模方式 列行式
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t num,uint8_t size1)

请添加图片描述

这样是一个汉字一个汉字地显示

例程中也有一次显示多个汉字飘过的函数

//num 显示汉字的个数
//space 每一遍显示的间隔
void OLED_ScrollDisplay(uint8_t num,uint8_t space)

本质还是调用OLED_showChinese函数,如果要调整显示的汉字,修改里面的OLED_showChinese函数即可

注意,space不要调得太大,否则可能只显示一次,不会连续显示,这个函数放在循环内和循坏外的效果是一样的(我也不知道为什么)

请添加图片描述

3.4 显示bmp图片

显示图片和显示汉字一样,是按像素画出来的,所以显示图片一样要先取模,例程中的图片取模信息存储在bmp.h中

请添加图片描述

直接调用bmp图片显示函数即可

/*
	@brief			显示图片
	@param			x0:起始列地址
					y0:起始页地址
					x1:终止列地址
					y1:终止页地址
					BMP[]:存放图片代码的数组
	@retval			无
 */
void OLED_ShowPicture(uint8_t x0,uint8_t y0,uint8_t x1,uint8_t y1,uint8_t BMP[])

这里的参数需要额外注意

首先y0和y1是页地址而不是以像素为单位的坐标

OLED模块中,每8行像素点为一页,因为总像素是128*64,所以是一共是128列,8页

此外,x的范围(即x1-x0)和y的范围(即y1-y0)要和取模的图片信息一致,不要超了或少了,否则可能会显示不成功。取模软件取模后也能得到图片的像素大小,按照这个去设置参数就好

最后,这个函数并不是将图片信息写入显存在输出到屏幕,所以显存一直没有被更改,不要再调用OLED_Refresh()函数

请添加图片描述

3.5 显示gif

显示gif便是一张一张地显示bmp,取模好图片信息再调用显示函数即可

/*
	@brief			显示动图
	@param			x0:起始列地址
				y0:起始页地址
				x1:终止列地址
				y1:终止页地址
				k: 帧个数
				m: 单帧数组大小
				BMP[][m]:存放动图代码的数组
	@retval			无
 */
void OLED_DrawGIF(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1, unsigned char k, int m, unsigned char GIF[][m])

gif的取模信息会很长,我只取了3帧就有这么长

请添加图片描述

得到图片取模信息后在循环中调用显示函数即可,如果不在循环中调用,gif只会显示一遍

请添加图片描述

请添加图片描述

(这本来是一个打勾的动图,我只截了3帧,看得出在动就行…)

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:44:59  更:2022-03-15 22:45:54 
 
开发: 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年11日历 -2024/11/26 6:28:56-

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