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

温湿度的采集和OLED的显示

  • I2C协议
    • SPI协议
      • 利用AHT20采集温湿度并发送到上位机
  • OLED名字学号的显示
    • 显示AHT20的温度和湿度
      • 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文件,进行烧录
I2C/SPI总线温湿度的采集与OLED显示_第1张图片
之后连接好芯片,进行温度的采集
打开串口,115200比特,观察结果

OLED名字学号的显示

整个工程完整代码
链接:https://pan.baidu.com/s/1fMcnuijiXbh1n1RskQ_jcQ
提取码:swhb
代码下载后对汉字进行字模提取
提取软件
链接:https://pan.baidu.com/s/19gZ-bliFGb1tk4gqdhG01w
提取码:8w4j
之后进行字模提取
下载成功后打开软件,选择宋体,用户定义,编辑码表,选择c文件,最后点击生成
I2C/SPI总线温湿度的采集与OLED显示_第2张图片
I2C/SPI总线温湿度的采集与OLED显示_第3张图片

将字模文件加入下面oledfont.h文件里面
I2C/SPI总线温湿度的采集与OLED显示_第4张图片
I2C/SPI总线温湿度的采集与OLED显示_第5张图片

在改工程里面test.c名字和学号
I2C/SPI总线温湿度的采集与OLED显示_第6张图片
后面烧录编译即可
对应连接如下
I2C/SPI总线温湿度的采集与OLED显示_第7张图片
效果展示
I2C/SPI总线温湿度的采集与OLED显示_第8张图片

显示AHT20的温度和湿度

代码如下
链接:https://pan.baidu.com/s/1MralN8EJxe_yt_On22qdVg
提取码:mp5a
下载工程编译烧录
I2C/SPI总线温湿度的采集与OLED显示_第9张图片
效果图如下
I2C/SPI总线温湿度的采集与OLED显示_第10张图片

oled滚动划屏显示

完整代码如下
链接:https://pan.baidu.com/s/1Jj17TNRwVNaVD758cOFu_w
提取码:z12f
打开工程,修改test.c文件
I2C/SPI总线温湿度的采集与OLED显示_第11张图片
生成相应的字模
I2C/SPI总线温湿度的采集与OLED显示_第12张图片
打开相应的文件,加入到oledfont.h里面
I2C/SPI总线温湿度的采集与OLED显示_第13张图片
然后编译烧录成功即可

I2C/SPI总线温湿度的采集与OLED显示_第14张图片
效果图如下

总结

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

你可能感兴趣的:(stm32,c语言,嵌入式硬件,串口通信)