文章目录

  • 一、I2C相关
    • 1、I2C总线简介
      • 工作原理
      • 总线特征
    • 2、I2C协议简介
      • 软件I2C
      • 硬件I2C
      • 二者比较
  • 二、基于I2C的AHT20温湿度采集实验
    • AHT20简介
    • 1、实验要求
    • 2、实验元件
    • 3、实验过程
      • 连接实验元件
      • 实验代码
      • 烧录程序
      • 温湿度采集
  • 四、总结

一、I2C相关

1、I2C总线简介

  • I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
  • I2C总线物理拓扑结构

    I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

工作原理

  • SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出,需通过上拉电阻接电源VCC。

  • 当总线空闲时,两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路。在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容,而线路中电容会影响总线传输速度。当电容过大时,有可能造成传输错误。所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。

  • 主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

总线特征

  • 在硬件上,I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为I2C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC可以很容易形成标准化和模块化,便于重复利用。

  • I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。

  • I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也利于标准化和模块化,缩短开发时间。

  • 连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。

  • 总线具有极低的电流消耗.抗高噪声干扰,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m;兼容不同电压等级的器件,工作温度范围宽。

2、I2C协议简介

  • I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

  • I2C协议包括“软件I2C”和“硬件I2C”

软件I2C

芯片的两个GPIO引脚分别用作SCL及SDA,按照I2C的时序要求,直接控制引脚的输出信号(若是接收数据时则读取 SDA 电平),就可以实现I2C通讯。由于是直接控制GPIO引脚的高低电平产生通讯时序,需要由CPU控制每个时刻的引脚状态,所以称为“软件模拟协议”方式即软件I2C方式。

硬件I2C

  • 硬件I2C对应芯片上的I2C外设,具有相应的I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C,但是程序较为繁琐。硬件I2C是直接调用内部寄存器进行配置。

  • 对于硬件I2C来说,它需要I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生I2C的通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理I2C协议的方式减轻了CPU的工作负担,并且使软件开发更简单。

二者比较

  • 硬件I2C用法比较复杂,模拟I2C的流程更清楚一些。
  • 硬件I2C速度比模拟快,并且可以用DMA。
  • 硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
  • 模拟I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。如果要从具体硬件上来看,可以去看下芯片手册。因为固件I2C的端口是固定的,所以会有所区别。
  • 模拟I2C可以在任何管脚上,而硬件只能在固定管脚上。
    软件I2C是程序员使用程序控制SCL、SDA线输出高低电平,模拟I2C协议的时序。一般较硬件I2C稳定,但是程序较为繁琐,但不难。 硬件I2C程序员只要调用I2C的控制函数即可,不用直接的去控制SCL、SDA高低电平的输出。但是有些单片机的硬件I2C不太稳定,调试问题较多。

如何区分软件I2C和硬件I2C

  • 可以看底层配置,比如IO口配置,如果配置了IO口的功能(IIC功能)那就是固件IIC,否则就是模拟。
  • 可以看IIC写函数,看里面有没有调用现成的函数或者给某个寄存器赋值,如果有,则肯定是固件IIC功能,没有的话肯定是数据一个bit一个bit模拟发生送的,肯定用到了循环,则为模拟。
  • 根据代码量判断,模拟的代码量肯定比固件的要大。

二、基于I2C的AHT20温湿度采集实验

AHT20简介

  • AHT20是国内奥松生成的I2C接口的MEMS温湿度传感器,ADC位数为20Bit,具有体积小、精度高、成本低等优点。

  • 由于AHT10/15/20 具有国产化、体积小、精度高、成本低等特点,可以替代 DHT11/DHT12/AM2320/SHT20/SHT30,单芯片价格在¥2~3,体积小巧很轻松嵌入到产品上。

1、实验要求

  • 每隔2秒钟采集一次温湿度数据

  • 并通过串口发送到上位机(win10)

2、实验元件

  1. AHT20集成式温湿度传感器

  2. 野火指南者开发板

3、实验过程

连接实验元件

将AHT20温湿度传感器与野火指南者开发板连接
管脚连接:

连接好后如下

实验代码

源代码地址链接:https://github.com/Thee24LYJ/STM32_AHT20

打开USER文件中的keil文件

main.c程序如下

#include "led.h"
#include "delay.h"
#include "temhum.h"
#include "sys.h"
#include "usart.h"int main(void){     u32 CT_data[2]={0};volatile float  hum=0,tem=0;     delay_init();             //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200);     //串口初始化为115200LED_Init();               //LED端口初始化temphum_init();     //ATH20初始化    while(1){AHT20_Read_CTdata(CT_data);       //不经过CRC校验,直接读取AHT20的温度和湿度数据 hum = CT_data[0]*100*10/1024/1024;  //计算得到湿度值(放大了10倍)tem = CT_data[1]*200*10/1024/1024-500;//计算得到温度值(放大了10倍)printf("湿度:%.1f%%\r\n",(hum/10));printf("温度:%.1f度\r\n",(tem/10));printf("\r\n");//延时2s,LED闪烁提示串口发送状态LED=0;delay_ms(1000);LED=1;delay_ms(1000);}
}

编译运行,生成.hex文件

烧录程序

用USB线将指南者开发板与电脑相连
打开mcuisp烧录软件,选中要进行烧录的.hex文件,进行如下设置

烧录成功

温湿度采集

打开串口调试助手查看温湿度
每隔2秒钟采集一次温湿度数据:

捂住温湿度传感器,数据发生改变:

四、总结

以上便完成基于I2C硬件协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。

基于I2C协议的AHT20温湿度传感器的数据采集相关推荐

  1. STM32F103基于I2C协议的AHT20温湿度传感器的数据采集

    目录 一.I2C 1.I2C 协议简介 2.I2C 物理层 3.协议层 通讯的起始和停止信号 数据有效性 响应 4. 软件I2C"和"硬件I2C 二.实现AHT20采集程序 1.A ...

  2. STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集

    文章目录 一.I2C总线通讯协议 1.I2C总线简介 2.I2C 协议的物理层和协议层 2.1物理层 2.2协议层 3.I2C的两种方式--硬件I2C和软件I2C 3.1硬件I2C 3.2软件I2C ...

  3. STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出

    文章目录 前言 一.I2C总线通信协议 1.I2C总线 2.工作原理 3.I2C特点 4.I2C模式选择 5.软件I2C和硬件I2C 二.串口输出温湿度传感器的数据 1.核心代码分析 2.硬件实操连接 ...

  4. STM32F103完成基于I2C协议的AHT20温湿度传感器数据采集

    目录 一.I2C总线协议 二.实现AHT20采集程序 三.总结 一.I2C总线协议 1.什么是I2C总线? I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在 ...

  5. 用STM32F103达成基于I2C协议的AHT20温湿度传感器和OLED屏显示汉字

    目录 一 I2C协议简介 硬件I2C与软件I2C 二 代码和ATH20芯片实现温湿度的串口显示 三 用stm32f103芯片的SPI和IIC接口接上OLED屏显示中文姓名温湿度 1 先用文字字模生成器 ...

  6. 基于I2C硬件协议的AHT20温湿度传感器的数据采集

    基于I2C的温湿度采集 硬件I2C和软件I2C 温湿度采集 任务要求 硬件连接 添加代码 最终效果 硬件I2C和软件I2C 硬件I2C对应芯片上的baiI2C外设,有相应I2C驱动电路,其所使用的I2 ...

  7. 基于I2C的AHT20温湿度传感器的数据采集

    一.I2C简介 二.软件I2C和硬件I2C 三.AHT20简介 四.基于stm32的AHT20温湿度传感器的数据采集 五.总结 一.I2C简介 I2C(芯片间)总线接口连接微控制器和串行I2C总线.它 ...

  8. AHT20温湿度传感器的数据采集

    目录 一.AHT20温度传感器数据采集 1.目的 2.准备条件 3.1实现代码 3.2连接器件 3.3编译烧录 3.4运行结果 二.OLED屏显和汉字点阵编码 1.目的 使用STM32F103的SPI ...

  9. 基于I2C硬件协议的AH20温湿度传感器的数据采集

    目录 I2C 温湿度传感器数据采集 实验准备 实验步骤: 实验结果: I2C I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实 ...

最新文章

  1. html中的两种标记,如何在html选项标记中实现两种不同的对齐?
  2. 把XML文件转换为字符串
  3. layui fixbar 返回顶部_FANUC 数控系统机床返回参考点功能的应用研究
  4. linux中python编译器的配置_linux下配置python3详解
  5. 递归-递归实现数字累加
  6. Whois查询接口文档
  7. arcgis api for js入门开发系列十八风向流动图
  8. 怎么压缩图片大小,压缩图片大小的小妙招
  9. HDU-3533 Escape
  10. 软件需求分析——非功能性需求
  11. android查看签名工具,签名获取工具app_apk签名工具安卓版_手机apk签名工具安卓版-多特软件站安卓网...
  12. 触发器:建立时间和保持时间
  13. 大数据应用型产品设计方法及行业案例介绍(附110页PPT)
  14. 良心推荐:看完这10部豆瓣高分美剧,英语水平提升几个Level!
  15. SOA 快速指南 1 2 3(转IBM developerWorks 中国) 4
  16. python实现最大独立集算法_2018校招总结(外企,国内大公司,国内创业公司)...
  17. [Transformer]On the Relationship between Self-Attention and Convolutional Layers
  18. c 语言常用的注释方法,注释方法用法 _C语言-w3school教程
  19. 基于Vue.js 的天天影视云视听平台的设计
  20. 求栈中元素个数算法_精妙的算法——计算二进制中1的个数

热门文章

  1. Spring 数据处理中的事务级别
  2. ggplot2画组合图
  3. 时间比较方法DateTime.Compare
  4. 服务器直接可以做无盘系统吗,云服务器支持无盘系统吗
  5. 向量加减法运算及其几何意义
  6. android画板控件,GitHub - imaiya/PainterView: Android画板控件,可以写字画画并生成图片...
  7. QML 地图修改插件源码(一)解决Map使用Open Street Map(OSM)无法加载在线地图的解决办法
  8. Phoenix常用命令
  9. 126邮箱发送邮件含超链接
  10. Java函数式编程神器 VAVR(vavr - turns java™ upside down)