甲醛模块软件设计

4.2I2C通信软件设计
4.2.1甲醛模块软件设计

本系统采用的甲醛模块为SGP30,该模块使用的通信方式为I2C通信,所以本节将以SGP30为基础介绍I2C通信模式,同时介绍SGP30的工作原理。

I2C是很常见的一种总线协议,I2C 是NXP公司设计的,I2C使用两条线在主控制器和从机之间进行数据通信。一条是SCL(串行时钟线),另外一条是SDA(串行数据线),这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA 处于高电平。

I2C通信分为主机发送,主机接收,从机发送,从机接收这四种工作方式,因为在本系统中主控芯片只使用到主机接收和主机发送这两种方式,同时因为这两种方式用I/O口模拟I2C电路会更加方便,所以我们在本节中只讲解用I/O口模拟I2C通信中主机接收和主机发送这两种方式的时序。

STM32F103C8T6编写I2C代码的第一步为初始化两个引脚为SCL引脚 和 SDA引脚,并且将其拉高,让I2C通信处于空闲状态,代码如图4.6所示
在这里插入图片描述

图4.6 I2C初始化

因为SDA引脚既需要数据读入也需要发送数据,所以第二步为编写SDA引脚转化的函数,第一个为SDA引脚为输入,如图4.7所示。第二个为SDA引脚为输出,如图4.8所示。
在这里插入图片描述

图4.7SDA输入配置
在这里插入图片描述

图4.8 SDA输入配置

第三步为编写I2C的开始时序函数。I2C的开始时序为SCL引脚为高电平时,SDA引脚从高电平变为低电平,代码如图4.9所示。
在这里插入图片描述

图4.9 I2C的开始时序函数

第四步为编写I2C的停止时序函数。I2C的开始时序为SCL引脚为高电平时,SDA引脚从低电平变为高电平,代码如图4.10所示。
在这里插入图片描述

图4.10 I2C的停止时序函数

在I2C主机发送模式中主机在发送信号后会接受到从机的一个相应信号,分为应答信号与非应答信号,所以我们需要判断从机发送回来的是哪一种信号,所以第五步为编写等待应答函数,如图4.11所示。
在这里插入图片描述

图4.11 等待应答函数

与之对应的是在I2C主机接收模式中在接收到从机发来的数据的时候也需要回一个应答或者非应答信号,由此从机来判断是否还要继续发送数据,应答为继续发送,非应答为停止发送。所以第六步为编写应答和非应答的时序。应答的时序为当SCL引脚为高电平时,SDA引脚为低电平,代码如图4.12所示。非应答的时序为当SCL引脚为高电平时,SDA引脚为高电平,代码如图4.13所示。
在这里插入图片描述

图4.12 应答信号
在这里插入图片描述

图4.13 非应答信号

第七步为编写I2C发送一个字节的函数代码。在I2C通信中,除了开始和结束信号,其他信号都是在SCL引脚为低电平的时候才能发生变化,同时SDA引脚为高电平时则说明输出的是1,反之为0。代码如图4.14所示。
在这里插入图片描述

图4.14 I2C发送一个字节

第八步为编写I2C接收一个字节的函数代码。接收I2C从机发送来的数据时必须要是在SCL为高电平时才是有效的,因为在高电平时I2C通信SDA引脚的值不会改变,同时在接收完数据之后还要返回应答或者非应答,代码如图4.15所示。
在这里插入图片描述

图4.15 I2C读一个字节

I2C通信是支持多从机的,同时主机是可以更换的,更换的条件简单来说为在空闲时候连接着I2C的哪一部设备先发送开始时序,哪一部设备就是主机。这个时候主机要选择与哪一部从机通信依靠的是从机的地址,就是在从机出厂时就赋予从机的身份码,一般由7位组成,再加上一位1或0来判断是读数据还是写数据,所以一般我们都将地址码写为8位,读数据的话就在7位后加一个1,写数据的话就在7位后加一个0。

所以I2C通信的步骤为主机先发一个开始时序,等待应答后,再发出一个地址信号,
等待应答后,再开始发送数据或者接受数据,最后主机在发出一个停止时序来结束本次通信。

SPG30的地址为0x58。0x36,0x82为唤醒SPG30模块命令。0x20,0x03为初始化SGP30的空气质量检测功能命令,开机后执行一次就可以了。0x20,0x08为开始测量空气质量命令。在开始测量空气质量命令后只需要等待一定时间(500ms),发送主机接收就可以直接接收到空气质量的数据。其中第一个数据为二氧化碳含量的高8位,第二个数据为二氧化碳含量的低8位,第四个数据为甲醛含量的高8位,第五个数据为甲醛含量的低8位。

所以第九步为编写连接并启动SPG30模块的函数,如图4.16所示。
在这里插入图片描述

图4.16 连接并启动SPG30模块函数

第十步为编写初始化SGP30的空气质量检测的函数,如图4.17所示。
在这里插入图片描述

图4.17 初始化SGP30的空气质量检测函数

第十一步为编写读取CO2与TVOC浓度的函数,如图4.18所示。
在这里插入图片描述

图4.18 读取CO2与TVOC浓度函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值