STM32基于I2C温湿度采集
目录
一、题目要求
二、关于I2C
1、什么IIC
2、IIC的主要特点
3、IIC协议数据传输过程
三、关于DHT20
1、概述
2、引脚参数
四、DHT20温湿度采集
1、程序代码分析
2、实验效果展示
五、总结
六、参考资料
一、题目要求
1. 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务:
1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C--读写EEPROM”原理章节)
2)阅读DHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机
二、关于I2C
1、什么IIC
IIC(Inter-Integrated Circuit)总线 是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。
IIC一共有只有两个总线: 一条是双向的串行数据线SDA,一条是串行时钟线SCL
SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的
SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的
软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
硬件IIC :一块硬件电路,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,硬件(固件)I2C是直接调用内部寄存器进行配置。
硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
2、IIC的主要特点
通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。
· IIC主设备功能:主要产生时钟,产生起始信号和停止信号
· IIC从设备功能:可编程的IIC地址检测,停止位检测
· IIC的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
· 支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)
· SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
· IIC是半双工,而不是全双工 ,同一时间只可以单向通信
· 为了避免总线信号的混乱,要求各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出。这一点在等下我们会讲解
3、IIC协议数据传输过程
主设备和从设备进行数据传输时遵循以下协议格式。数据通过一条SDA数据线在主设备和从设备之间传输0
和1
的串行数据。串行数据序列的结构可以分为,开始条件,地址位,读写位,应答位,数据位,停止条件。
开始条件
当主设备决定开始通讯时,需要发送开始信号,需要执行以下动作:
· 先将SDA线从高压电平切换到低压电平;
· 然后将SCL从高电平切换到低电平;
在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位。
从机应答/非应答
· 主机每次发送完数据之后会等待从设备的应答信号ACK
· 在第9个时钟信号,如果从设备发送应答信号ACK,则SDA会被拉低若没有应答信NACK,则SDA会输出为高电平,这过程会引起主设备发生重启或者停止
结束条件
当主设备决定结束通讯时,需要发送停止信号,需要执行以下动作
· 先将SDA线从低电压电平切换到高电压电平
· 再将SCL线从高电平拉到低电平
三、关于DHT20
1、概述
DHT20采用I2C通讯协议,响应迅速,配有一个全新设计的ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,是一款全新升级的智能温湿度传感器模块,在测量精度、供电电压、测量范围等方面的性能参数都有大幅提升,超出了前一代传感器的可靠性水平,即使在恶劣环境下也能保持性能稳定。每一款产品出厂时都经过严格的校准和测试。由于对传感器做了改良和微型化改进,因此它的性价比更高。
2、引脚参数
四、DHT20温湿度采集
1、程序代码分析
read_DHT20_once(); //I2C读取传感器温度
void read_DHT20_once(void)
{delay_ms(10);reset_DHT20(); //复位DHT20delay_ms(10);init_DHT20(); //初始化DHT20delay_ms(10);startMeasure_DHT20(); //准备开始测量DHT20温湿度 delay_ms(80);read_DHT20(); //通过IIC读取DHT20采集的温湿度delay_ms(5);
}
main() ;函数
int main(void)
{ delay_init(); //延时函数初始化 uart_init(115200); //串口初始化IIC_Init(); //IIC协议初始化NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 OLED_Init(); //初始化OLED OLED_Clear(0); while(1){printf("温度湿度显示");read_DHT20_once(); //I2C读取传感器温度OLED_Clear(0); delay_ms(1500);}
}
工程代码文件传送门:工程代码
2、实验效果展示
温湿度采集实验
五、总结
温湿度采集实验是一个很有趣的实验,通过温湿度采集基本了解了IIC通信协议的相关知识,以及学会了如何运用IIC协议读取数据,很有帮助;实验过程也遇到了一些问题,对于温湿度采集传感器的供电特别注意,需要5v供电可能才能正常读取采集数据,一开始3.3v供电怎么都读取不了温度。
六、参考资料
IIC原理超详细讲解---值得一看
I2C协议靠这16张图彻底搞懂(超详细)
stm32通过I2C接口实现温湿度(AHT20)的采集
STM32基于I2C温湿度采集相关推荐
- 基于I2C温湿度采集
基于I2C温湿度采集 一.什么叫AHT20 二."软件I2C"和"硬件I2C" 三.I2C-读写 EEPROM 1.I2C 物理层 2.I2C协议层 3.STM ...
- STM32通过I2C接口采集温湿度
目录 一.I2C总线协议 1. I2C总线简介 1.1 物理接口 1.2 通讯特征 1.3 I2C总线状态 2. I2C总线通信协议 2.1 起始位和结束位 2.2 数据格式与应答 2.3 数据传输通 ...
- 基于stm32的DHT11温湿度采集LCD显示Proteus仿真
*本设计:* 基于stm32温湿度采集Proteus仿真(仿真+程序) 仿真图protues 8.9 程序编译器:keil 5 编程语言:C语言 *设计编号:C0041* *功能描述:* 通过STM3 ...
- (嵌入式)I2C温湿度采集
目录 一.硬件I2C和软件I2C 二.使用AHT20采集温湿度 1.实验工具 2.实验步骤 (1).编写代码 (2).硬件连接 (3).往核心板内烧入程序 (4).运行结果 三.参考链接 一.硬件I2 ...
- stm32通过I2C实现温湿度(AHT20)采集
目录 一.I2C总线通信协议 1.1 I2C介绍 1.2 I2C物理层 1.3.I2C协议层 1.4.软件IIC和硬件IIC 1.5 IIC数据传送 1.6 IIC发送数据 1.7 IIC读数据: 二 ...
- I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集
I2C总线通信协议及实操stm32通过I2C实现温湿度(AHT20)采集 一实验要求 二.12C总线通信协议 1.12C介绍 2.I2C物理层 3.I2C协议层 4.软件IIC和硬件IIC 三.STM ...
- 基于stm32温湿度采集平台开发
基于stm32温湿度采集平台开发 ==这里记录一下自己以前课设报告,但是论文中图片和文字.公式太多了,懒得粘贴了,需要完整的私信== 摘 要 关键词 第一章 绪论 1.1 研究背景 1.1.1国内研究 ...
- 基于I2C硬件协议的AHT20温湿度传感器的数据采集
基于I2C的温湿度采集 硬件I2C和软件I2C 温湿度采集 任务要求 硬件连接 添加代码 最终效果 硬件I2C和软件I2C 硬件I2C对应芯片上的baiI2C外设,有相应I2C驱动电路,其所使用的I2 ...
- STM32实现基于I2C的AHT20温湿度采集
STM32实现基于I2C的AHT20温湿度采集 I2C通信协议 软件I2C与 硬件I2C 代码实现 烧录 硬件连接 烧录并运行 参考 I2C通信协议 I2C协议简介 IC( Inter-- Integ ...
最新文章
- Intelij IDEA注册码生成代码
- spring 初始化数据库
- mongo 唯一约束索引_快速掌握mongoDB(三)——mongoDB的索引详解
- (97)FPGA手写RAM(Verilog)
- sqlmap安装和使用
- 【下载】快速通过Python笔试?学大家一样先把LeetCode答案私藏了
- edius裁剪快捷键_Edius剪辑视频的两种方法
- javaweb JAVA JSP员工绩效考核管理系统(员工考核管理系统)员工考勤管理系统人事考勤
- python如何获取鼠标位置_python实时得到鼠标的位置
- 21cn邮箱服务器端,21CN 免费邮箱常见问题
- Vue脚手架安装详解
- 14.VRP介绍以及AC初始化配置_AC和AP的软件升级方法
- jmeter参数化的用法和用途
- node 文字生成图片
- 震惊全国的汶川大地震
- Error: EPERM: operation not permitted(权限问题 errro permit)
- 高通平台使用64位win7系统无法安装驱动的解决方法
- kafka-manager安装采坑日志
- python画树叶-用Python绘图,感受编程之美
- 现在什么都二维码了,我干脆用二维码写博客算了