IIC与四针0.96寸OLED自我总结(STM32F103)

我回来啦!

呃,已经很久没有更新博客了,因为都在自己吃独食(bushi)。即使太懒了,学了快一年了算是入了门吧,最近有好几个人问我“东墙东墙,这屏幕又好看又精巧要怎么用呢?”于是我想要不就写一篇自己对IIC和OLED的认识来给大伙整一篇博客吧!

单片机搭载外设

不要拘于买来的开发板上所带的一些东西比如数码管啊这些,因为以后你要接触更多不一样的器件!所以你应该要学会怎么去使用外设,也就是说你要知道怎么去操纵这个外设的寄存器地址之类的!这是必经之路!

  1. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  2. 全新的 KaTeX数学公式 语法;
  3. 增加了支持甘特图的mermaid语法1 功能;
  4. 增加了 多屏幕编辑 Markdown文章功能;
  5. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  6. 增加了 检查列表 功能。

IIC协议

要按官方话说那就有点乏了,我想这么说不太合适就是复制粘贴呗,那我就按自己的理解来说。(如果要具体可以自行搜索)
把IIC通讯系统看成是“父”,那么连接于它之下的多个IIC通讯设备我称为“子”。而一个父可以有很多很多的子,但子只有一个父。而收发数据呢就像是父子之间互相给钱,两只手串行数据线(SDA)给数据也就是钱,而串行时钟线(SCL)是告诉对方同步收发也就是告诉对方自己什么时间合适拿钱。而每个子呢又有不同的住处(也就是他们的地址),父就要根据不同的门牌号来知道是哪个子。
IIC协议有起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。

读写过程

在这里插入图片描述
在这里插入图片描述
解释下上图的含义:
划线的格子:主机传给从机数据
白格子:从机把数据传给主机
S:传输开始信号(Start!就是主机告诉那些从机们:我要开始传消息啦!)
SLAVE_ADDRESS: 从机地址(主机告诉大家要和谁讲话,所以点名哪个的地址)
R/W- :传输方向选择位,1 为读,0 为写(就是主机要和你讲话还是听你讲话)
A/A- :应答 (ACK) 或非应答 (NACK) 信号(主机听到没有你说的话)
P :停止传输信号(差不多得了😅)

根据字面意思不难理解各个的含义,其实就是人与人说话聊天一样。

通讯时的时序图

通过对SDA与SCL电平高低切换的操作,来实现数据的传输
在这里插入图片描述
当 SCL 线是高电平时,SDA线从高电平向低电平切换,此时就是起始信号。当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示停止信号。
(注:起始和停止信号一般由主机产生。)
代码上就是拉高拉低(给1或者0)

在这里插入图片描述
大家请看,这幅图上当SCL是高电平的时候,SDA所传的数据是有效的是听得见的,当 SCL 为低电平时,SDA 的数据无效,就是听不见!

应答环节!

Acknowledge!就是应答,大家高中学生物的时候是不是也学过(免疫应答之类的)其实都是差不多意思。若想对方继续发数据,需要向对方发送“应答 (ACK)”信号,发送方会继续发送下一个数据;若接收端希望结束数据传输,则向对方发送“非应答 (NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。在这里插入图片描述

上代码喽

这里就和大家说一下库函数版本吧(但是个人认为大势所趋其实是Hal库)

//起始信号
void I2C_Start(void)
{
   
	OLED_SDIN_Set();
	OLED_SCLK_Set();
	OLED_SDIN_Clr();
	OLED_SCLK_Clr();
}

//结束信号
void I2C_Stop(void)
{
   
	OLED_SCLK_Set();
	OLED_SDIN_Clr();
	OLED_SDIN_Set();
}
//等待信号响应
void I2C_WaitAck(void) //测数据信号的电平
{
   
	OLED_SCLK_Set();
	OLED_SCLK_Clr();
}

//写入一个字节
void Send_Byte(u8 dat)
{
   
	u8 i;
	for(i=0;i<8;i++)
	{
   
		OLED_SCLK_Clr();//将时钟信号设置为低电平
		if(dat&0x80)//将dat的8位从最高位依次写入
		{
   
			OLED_SDIN_Set();
    }
		else
		{
   
			OLED_SDIN_Clr();
    }
		OLED_SCLK_Set
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值