基于I2C/SPI总线的温湿度采集与OLED显示

一、I2C总线通信协议

(一)I2C协议

1、什么是I2C协议
I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
2、I2C 协议的物理层和协议层
物理层
I2C是一个支持设备的总线。可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。对于I2C 总线,只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。
I2C 通讯设备常用连接方式(引用野火资料中的图)
在这里插入图片描述
协议层
主要是定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等。
通讯的起始和停止信号
在这里插入图片描述
数据有效性
在这里插入图片描述
从图中可以看出I2C在通讯的时候,只有在SCL处于高电平时,SDA的数据传输才是有效的。SDA 信号线是用于传输数据,SCL 信号线是保证数据同步。
响应
在这里插入图片描述
当SDA传输数据后,接收方对接受到的数据进行一个应答。如果希望继续进行传输数据,则回应应答信号(低电平),否则回应非应答信号(高电平)。

(二)硬件I2C

直接利用 STM32 芯片中的硬件 I2C 外设。
硬件I2C的使用
只要配置好对应的寄存器,外设就会产生标准串口协议的时序。在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。

(三)软件I2C

直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。
软件I2C的使用
需要在控制产生 I2C 的起始信号时,控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

(四)两者的差别

硬件 I2C 直接使用外设来控制引脚,可以减轻 CPU 的负担。不过使用硬件I2C 时必须使用某些固定的引脚作为 SCL 和 SDA,软件模拟 I2C 则可以使用任意 GPIO 引脚,相对比较灵活。对于硬件I2C用法比较复杂,软件I2C的流程更清楚一些。如果要详细了解I2C的协议,使用软件I2C可能更好的理解这个过程。在使用I2C过程,硬件I2C可能通信更加快,更加稳定。

二、stm32通过I2C接口实现温湿度(AHT20)的采集

(一)实验要求

每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)

(二)硬件连接

AHT20的SCL——STM32F103的PB6SDA——PB7GND——GNDVCC——5V
在这里插入图片描述

(三)创建工程

在这里插入图片描述

(四)代码编写

完整工程下载https://github.com/Sunlight-Dazzling/stm32-AHT20/tree/master

(五)运行结果

在KEIL中生成.hex文件后,烧录程序
在这里插入图片描述
利用串口助手观察结果
在这里插入图片描述
对着传感器呼一口气或用手触摸一下后,发现温度升高,实验成功!
在这里插入图片描述

三、了解SPI协议

(一)SPI的定义

SPI(Serial Peripheral Interface)就是串行外围设备接口。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚。SPI 是一个环形总线结构,由 ss(cs)、sck、sdi、sdo 构成,时序主要是在 sck 的控制下,两个双向移位寄存器进行数据交换。
上升沿发送、下降沿接收、高位先发送。
上升沿到来的时候,sdo 上的电平将被发送到从设备的寄存器中。
下降沿到来的时候,sdi 上的电平将被接收到主设备的寄存器中。

(二)SPI的连接方式

在这里插入图片描述
SS( Slave Select):从设备选择信号线,常称为片选信号线。
SCK (Serial Clock):时钟信号线,用于通讯数据同步。
MOSI (Master Output, Slave Input):主设备输出/从设备输入引脚。
MISO(Master Input,,Slave Output):主设备输入/从设备输出引脚。

(三)SPI的通讯过程

在这里插入图片描述
MOSI 与 MISO 的信号只在 NSS 为低电平的时候才有效,在 SCK 的每个时钟周期 MOSI 和 MISO 传输一位数据。

四、OLED显示屏显示自己的学号和姓名

完整工程下载:百度网盘分享链接 提取码:bphx

1、打开工程,找到test.c文件
修改成想要显示的名字和学号,汉字需要进行取模
在这里插入图片描述
2、汉字取模

软件下载:C语言字模文件的使用,PCtoLCD2002(字模软件) 最新版 附使用指南

打开软件,点击选项进行以下设置
在这里插入图片描述
输入想要取模的汉字,点击生成字模
在这里插入图片描述
可以选择保存字模,更加方便,保存为一个txt文件
在这里插入图片描述
3、修改程序
在工程中找到gui.c文件中的oledfont.h文件,把刚刚获取的16×16的字模复制进去
在这里插入图片描述
4、编译运行,生成.hex文件,烧录程序
在这里插入图片描述
5、硬件连接
在这里插入图片描述
在这里插入图片描述
6、结果显示
在这里插入图片描述

五、OLED显示屏显示AHT20的温度和湿度

完整工程下载: https://github.com/Sunlight-Dazzling/stm32_AHT20_OLED

打开工程文件后编译运行,生成.hex文件,烧录之后即可看到运行结果
硬件需要同时接入OLED显示屏和传感器
在这里插入图片描述

六、OLED显示屏滑动显示长字符

完整工程下载: https://github.com/Sunlight-Dazzling/LEDORoll

同姓名的显示一样,需要进行汉字的取模,过程同上不再赘述
在这里插入图片描述
在这里插入图片描述
同样找到gui.c文件中的oledfont.h文件,把刚刚获取的16×16的字模复制进去
在这里插入图片描述
也要记得修改test.c文件
在这里插入图片描述
结果显示
在这里插入图片描述
注:闪屏现象是由于手机摄像头的拍摄,人眼观看时是没有问题的

七、参考🔗

1、零死角玩转STM32—F103指南者
2、stm32通过I2C接口实现温湿度(AHT20)的采集
3、基于STM32的温湿度采集——OLED显示
4、stm32通过I2C接口实现温湿度(AHT20)的采集
5、0.96寸OLED在STM32f103上实现滚动显示长字符
6、C语言字模文件的使用,PCtoLCD2002(字模软件) 最新版 附使用指南

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值