STM32库函数版IIC驱动OLED屏
IIC驱动OLED屏(4PIN)
- 概述
- IIC通信协议
- OLED屏(兼下载链接)
概述
因为毕设,又得重新拾起嵌入式知识了,之前主要用51单片机,当年直接copy的代码,对很多东西不求甚解,这次用STM32重头梳理一遍,本文会讲解IIC和OLED的部分原理。能力有限,有错误请指出。
需要程序自动跳最后面,有网盘链接,亲测可用。
IIC通信协议
IIC通信物理连接时非常方便,只有两根数据线:SCL和SDA,具体操作步骤直接读时序图就可以理解,非常的方便。
SDA:SerialData的缩写,主要就是通信中数据传输。
SCL:Supply Chain Logistic缩写(来源百度百科),主要用来决定数据收发的。
我个人觉得有错,应改为:SerialClock,所有人都称呼这个是时钟线唉!难道不是时钟的缩写嘛!!!毕竟SCL的作用就是决定数据何时传递的,难道不应该理解为时钟嘛?
IIC的主要使用,需要配合时序图使用:(这里参考野火的教程里的图)
在线链接: STM32库开发实战指南-刘火良;杨森-微信读书.
起始信号的关键在于,SCL和SDA都在高电平时,SDA的下降,因此体现在代码中:
#define OLED_GPIO GPIOB
#define OLED_SCL GPIO_Pin_6//这是我的SDA和SCL引脚
#define OLED_SDA GPIO_Pin_7#define OLED_SCL_LOW() GPIO_ResetBits(OLED_GPIO,OLED_SCL)//SCL高低电平
#define OLED_SCL_HIGH() GPIO_SetBits(OLED_GPIO,OLED_SCL)#define OLED_SDA_LOW() GPIO_ResetBits(OLED_GPIO,OLED_SDA)//SDA高低电平
#define OLED_SDA_HIGH() GPIO_SetBits(OLED_GPIO,OLED_SDA)//IIC,起始信号时序,SCL高电平,SDA由高到低,然后SCL也变低,数据开始传输
void I2C_Start(void)
{OLED_SDA_HIGH();OLED_SCL_HIGH();OLED_SDA_LOW();OLED_SCL_LOW();
}
同理,停止信号也是这样写的:
void I2C_Stop(void)//同理,看时序图
{OLED_SCL_HIGH();OLED_SDA_LOW();OLED_SDA_HIGH();
}
起始都设计好了,那么数据怎么传输?
注意时序图,SCL由低到高时,并保持在高电平的时候,数据才有效,
那么开始思考,数据怎么传,我是一大段数据一口气发出去?还是一位一位发送?
一大段传的话,个人没有太好思路。有会的可以指导我一下。
下面是代码:
void Send_Byte(uchar data)//写入一个字节
{uchar i;for(i=0;i<8;i++){OLED_SCL_LOW();//将时钟信号设置为低电平if(data&0x80)//将dat的8位从最高位依次写入,也就是一位一位写,每写一位,数据左移一位{OLED_SDA_HIGH();}else{OLED_SDA_LOW();}OLED_SCL_HIGH();//将时钟信号设置为高电平OLED_SCL_LOW();//将时钟信号设置为低电平data<<=1;}
}
为什么这里用0x80呢?,0x80,转换成二进制为:1000 0000 ,数据于0x80进行“与运算”,并保持SDA为高电平,因为与运算的话,只有第一位能保留下来,比如:7|0x80 ,过程为:0111|1000 0000 ,结果为:1000 0000 ,然后数据左移一位,继续,直到数据走完,那么一个SDA高电平中就存了7这个数。
,那么一个数据发送完后,我该换下一个值了,但还要继续接收数据上虽然没值了,但如果我传的还是高电平怎么办?继续传的你还收不收?你是等待下一个数据发过来哈斯还是结束?这个时候就需要等待状态来了,(TNND!这水印怎么去!!!,下面水印挡住的文字是:等待响应)
void I2C_WaitAck(void) //等待信号的电平
{OLED_SCL_HIGH();OLED_SCL_LOW();
}
至此,IIC通信你大致了解了基本逻辑,接下来就是配合硬件了
OLED屏(兼下载链接)
0.96寸OLED屏,驱动IC为:SSD1306;
多有代码都围绕这个进行编写,我目前看的代码少,暂时来说中景园的代码和资料就非常NICE,非常适合初学者读和思考,这里我直接放资料了:
链接: https://pan.baidu.com/s/1KZN-d0wCnlVR_jEqLZSPVw
提取码:4kej
代码和资料都在里面。
优点:代码是51改的,非常通俗易懂,学过51必看懂,
缺点:冗余,很多没必要的代码段在里面。里面说是IIC代码,实际还是SPI,只不过只用到了SDA和SCL两个引脚,其他没用,可以删除。
当然,好处就是7pin的SPI的oled也可以照葫芦画瓢。
后续我会将我修改完的(改了一半,没改完,就先不放出来了,后续改完会发github上。)
暂时就这。
参考资料:
STM32库开发实战指南-刘火良;杨森
中景园电子OLED淘宝店参考资料
STM32库函数版IIC驱动OLED屏相关推荐
- STM32通过SPI协议驱动OLED屏
坚持就是胜利 一.SPI协议介绍 01 简介 02 SPI物理层 03 SPI基本通讯过程 二.OLED显示器介绍 01 简介 02 接口定义 03 与STM32接线图 三.汉字取模软件介绍 01 下 ...
- STM32模拟IIC驱动OLED屏 原理+源码
处理器和芯片间的通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC总线的信号类型 1.开始信号:处理器让SCL时钟保持 ...
- 12. STM32——硬件IIC驱动OLED屏幕显示
STM32--硬件IIC驱动OLED屏幕显示 OLED屏幕 OLED屏幕特点 OLED屏幕接线说明 OLED屏幕显存 OLED屏幕原理 OLED屏幕常用指令 OLED屏幕字模软件的使用 写命令 写数据 ...
- 【STM32】 硬件IIC 驱动SSD1302(0.96 OLED模块) -- 3/4 OLED的命令表 学习
书接上回 文章1:[STM32] 硬件IIC 驱动SSD1306(0.96 OLED模块) – 1/4 库函数 学习 文章2:[STM32] 硬件IIC 驱动SSD1302(0.96 OLED模块) ...
- 15. STM32——软件IIC驱动OLED屏幕显示字符、字符串、数字、汉字
STM32--软件IIC驱动OLED屏幕显示 OLED屏幕 写命令 写内容 对OLED写入一个字节 设置光标 启动OLED 关闭OLED 全屏填充(清屏) 显示字符 显示字符串 获取次方 显示数字 显 ...
- RA4M2开发(2)----基于IIC驱动OLED
概述 在e2studio中创建新的工程并导入必要的文件,包括I2C驱动代码和SSD1306 OLED显示驱动代码. 配置RA4M2的I2C接口,使其作为I2C master进行通信. 初始化SSD13 ...
- IIC 驱动OLED
IIC总线可以驱动很多器件,比较常见的有OLED.EEPROM存储器(AT24C02).温度传感器(LM75A).温湿度传感器(DHT11)等.有关IIC总线协议的基本原理可以看我之前的文章介绍.这一 ...
- arduino上ESP8266用Adafruit_SSD1306库驱动OLED屏
关注.星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 在进行后续的ESP8266学习前,我们先来对OLED屏进行驱动,为后续学习提供直观的信息显示. 1. 安装驱动库 在之前 ...
- esp32 spi 驱动 oled 屏显示来自 PC 的画面
esp32 spi 驱动 oled 屏显示来自 PC 的画面 实验代码 gayhub 实验源码 设备及运行环境 装有python的电脑 Python 3.8.2 (tags/v3.8.2:7b3ab5 ...
- esp32使用MicroPython驱动oled屏显示中文和英文
文章目录 esp32使用MicroPython驱动oled屏显示中文和英文 介绍 安装 特点 开源 硬件连接 API 示例 显示英文字符 显示汉字 参考链接 esp32使用MicroPython驱动o ...
最新文章
- 事件处理机制--浏览器流程处理分析
- 4怎样判断动作是否执行_汽车驾驶怎样试验高压火,怎样判断分电器盖是否破裂,来看看吧!...
- 说说vue-cli中使用flexible和px2rem-loader
- 收藏的一些github开源项目,在这里记录一下
- 计算机系统的今后应用,计算机系统毕业论文范本(2)
- 中国十大名牌直流稳压电源
- Linux系统中的远程访问及控制
- 程序与进程以及作业之间的区别
- php 301目录对应,PHP 301转向实现代码
- Excel 数字转化成以文本形式存储的数字
- linux 生成dump文件
- Atom 修改Atom快捷键 实测可行
- Overleaf (LaTex) 使用笔记(自用)
- 事务与共识 DDIA小结
- php templete什么意思,PHP设计模式之模板方法模式定义与用法详解
- 2017-2042美国国防部无人系统路线图
- Java JDBC https://www.bilibili.com/video/BV1PE411i7CV?p=31spm_id_from=pageDriver
- html script写布局,scriptmanager
- 极客大学产品经理训练营 解决方案的设计与积累 第6课总结
- 去修苹果手机的时候,当心遇到 “李鬼” 维修点!