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

I2C协议

1.IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps 以上。 2.软件I2C和硬件I2C ①硬件I2C 直接利用 STM32 芯片中的硬件 I2C 外设。

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

②软件I2C

直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。

需要在控制产生 I2C 的起始信号时,控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。

③两者的差别

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

SPI协议

SPI总线是一种4线总线,因其硬件功能很强,所以与SPI有关的软件就相当简单,使中央处理器(Central Processing Unit,CPU)有更多的时间处理其他事务。正是因为这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。SPI是一种高速、高效率的串行接口技术。通常由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据的交换。SPI是一个环形结构,通信时需要至少4根线(事实上在单向传输时3根线也可以) SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。

利用AHT20采集温湿度并发送到上位机

需要的设备有stm32f103,AHT20,串口,8根线 stm32与串口接线:RX-A9,TX-A10,GND-GND,3.3-3.3 stm32与AHT10连线:SCL–>PB6,SDA–>PB7 ,GND-GND,3.3-3.3 连线接好后烧录程序代码 注意:用的是PB6,PB7引脚 完整代码链接 链接:https://pan.baidu.com/s/1zwTu6UqmDkutvN490Czfbg 提取码:0ckv

/main
#include "delay.h"
#include "usart.h"
#include "bsp_i2c.h"


int main(void)
{
          
   	
	delay_init();     //?¨®¨º¡Ào¡¥¨ºy3?¨º??¡¥	  
	uart_init(115200);	 //¡ä??¨²3?¨º??¡¥?a115200
	IIC_Init();
		while(1)
	{
          
   
		printf("ζÈʪ¶ÈÏÔʾ");
		read_AHT20_once();
		delay_ms(1500);
  }
}

下载编译成功烧录即可 生成HEX文件,进行烧录 之后连接好芯片,进行温度的采集 打开串口,115200比特,观察结果

OLED名字学号的显示

将字模文件加入下面oledfont.h文件里面

在改工程里面test.c名字和学号 后面烧录编译即可 对应连接如下 效果展示

显示AHT20的温度和湿度

oled滚动划屏显示

完整代码如下 链接:https://pan.baidu.com/s/1Jj17TNRwVNaVD758cOFu_w 提取码:z12f 打开工程,修改test.c文件 生成相应的字模 打开相应的文件,加入到oledfont.h里面 然后编译烧录成功即可

总结

本次实验我很认真的完成了,将理论与实践完美的结合,我收获蛮多的,希望下次再能有更多的体会和经历

经验分享 程序员 微信小程序 职场和发展