当前位置: 首页 > news >正文

IIC库函数的基础配置及SHT31 MLX90614

一、IIC库函数的配置

1、IIC.h

#ifndef _IIC_H #define _IIC_H #include "main.h" #define us 8 #define IIC_SCL_H GPIO_SetBits(GPIOB,GPIO_Pin_6) #define IIC_SCL_L GPIO_ResetBits(GPIOB,GPIO_Pin_6) #define IIC_SDA_H GPIO_SetBits(GPIOB,GPIO_Pin_7) #define IIC_SDA_L GPIO_ResetBits(GPIOB,GPIO_Pin_7) #define IIC_SDA_IN (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7)) void IIc_Init(void); void IIc_Start(void); void IIc_End(void); void IIc_Send_Ack(u8 ack); u8 IIc_Rec_Ack(void); void IIc_Send_Byte(u8 data); u8 IIc_Res_Byte(void); #endif

2、IIC.c

#include "iic.h" /************************* 函数名称:IIc_Init(void) 函数功能:IIc初始化配置函数 (IO 口模拟配置) 返回值:无 形参:无 作者:me 版本:1.0 IIC_SCL --- PB6 --- 通用推挽输出 IIC_SDA --- PB7 --- 通用开漏输出 AHB1 *************************/ void IIc_Init(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed; GPIO_Init(GPIOB,&GPIO_InitStruct); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_OD; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed; GPIO_Init(GPIOB,&GPIO_InitStruct); //空闲状态 IIC_SCL_H; IIC_SDA_H; } /************************* 函数名称:IIc_Start(void) 函数功能:IIc起始信号函数 返回值:无 形参:无 作者:me 版本:1.0 在时钟线为高电平的时候去拉低数据线 *************************/ void IIc_Start(void) { IIC_SDA_H; Delay_Us(us); IIC_SCL_H; Delay_Us(us); IIC_SDA_L; Delay_Us(us); } /************************* 函数名称:IIc_End(void) 函数功能:IIc结束信号函数 返回值:无 形参:无 作者:me 版本:1.0 在时钟线为高电平的时候去拉高数据线 *************************/ void IIc_End(void) { IIC_SDA_L; Delay_Us(us); IIC_SCL_H; Delay_Us(us); IIC_SDA_H; Delay_Us(us); } /************************* 函数名称:IIc_Send_Ack(u8 ack) 函数功能:IIc发送应答/不应答信号函数 返回值:无 形参:u8 ack 0 发送应答 1 发送不应答 作者:me 版本:1.0 *************************/ void IIc_Send_Ack(u8 ack) { IIC_SCL_L; Delay_Us(us); if(ack == 1) { IIC_SDA_H; } else { IIC_SDA_L; } Delay_Us(us); IIC_SCL_H; Delay_Us(us); IIC_SCL_L; Delay_Us(us); } /************************* 函数名称:IIc_Rec_Ack(void) 函数功能:IIc接收应答/不应答信号函数 返回值:u8 ack 0 表示应答 1 表示不应答 形参:无 作者:me 版本:1.0 SCL推挽 SDA开漏 *************************/ u8 IIc_Rec_Ack(void) { u8 ack; IIC_SDA_H; IIC_SCL_L; Delay_Us(us); IIC_SCL_H; Delay_Us(us); if(IIC_SDA_IN) { ack = 1; } else { ack = 0; } Delay_Us(us); IIC_SCL_L; Delay_Us(us); return ack; } /************************* 函数名称:IIc_Send_Byte(u8 data) 函数功能:IIc发送一个字节 返回值:无 形参:u8 data 作者:me 版本:1.0 *************************/ void IIc_Send_Byte(u8 data) { for(u8 i=0;i<8;i++) { IIC_SCL_L; if(data & (0x80 >> i)) { IIC_SDA_H; } else { IIC_SDA_L; } Delay_Us(us); IIC_SCL_H; Delay_Us(us); } } /************************* 函数名称:IIc_Res_Byte(void) 函数功能:IIc接收一个字节 返回值:u8 形参:无 作者:me 版本:1.0 数据是从高位开始发 *************************/ u8 IIc_Res_Byte(void) { u8 data; IIC_SDA_H; // ? 释放SDA,让传感器能驱动总线 for(u8 i=0;i<8;i++) { IIC_SCL_L; Delay_Us(us); IIC_SCL_H; Delay_Us(us); data <<= 1; if(IIC_SDA_IN) { data |= 1; } } return data; }

二、SHT31(温湿度传感器)

1、基本信息

2、管脚说明

3、器件地址

确认ADDR接地还是接电源 --- 原理图

4、运行流程

1)起始信号

2)发送写方向地址,并接收应答

3)发送命令高8bit(0x2c)数据,并接收应答

4)发送命令低8bit(0x06)数据,并接收应答

5)停止信号

6)数据正在测量,delay_ms(x);

7)起始信号

8)发送读方向地址,并接收应答

9)读取温度高8bit数据,并发送应答

10)读取温度低8bit数据,并发送应答

11接收温度数据的8bitCRC校验数据,并发送应答

12)读取湿度高8bit,并发送应答

13)读取湿度低8bit,并发送应答

14)接收湿度数据的8bitCRC校验数据,并发送非应答

15)停止信号

5、湿度转换公式

%RH:相对读湿度(相对湿度)

RH = 100 * SRH / (216 - 1)

SRH:读取出来高8bit湿度和低8bit湿度

6、温度转换公式

T = -45 + 175 * ST / (216 - 1)

ST = 读取出来高8bit温度和低8bit温度

7、代码

#include "tphmsensor.h" u16 TH_Data = 0; u16 RH_Data = 0; /************************* 函数名称:tphm_Init(void) 函数功能:温湿度传感器初始化 返回值:无 形参:无 作者:me 版本:1.0 *************************/ void tphm_Init(void) { u8 tp_mb,tp_lb,hm_mb,hm_lb; u16 tp_raw, hm_raw; // 用于存储组合后的原始数据 IIc_Start(); IIc_Send_Byte(0x44 << 1); IIc_Rec_Ack(); IIc_Send_Byte(0x2c); IIc_Rec_Ack(); IIc_Send_Byte(0x06); IIc_Rec_Ack(); IIc_End(); Delay_Ms(30); IIc_Start(); IIc_Send_Byte((0x44 << 1) | 0x01); IIc_Rec_Ack(); tp_mb = IIc_Res_Byte(); IIc_Send_Ack(0); tp_lb = IIc_Res_Byte(); IIc_Send_Ack(0); IIc_Res_Byte(); // 丢弃温度CRC IIc_Send_Ack(0); hm_mb = IIc_Res_Byte(); IIc_Send_Ack(0); hm_lb = IIc_Res_Byte(); IIc_Send_Ack(0); IIc_Res_Byte(); IIc_Send_Ack(1); IIc_End(); tp_raw = ((u16)tp_mb << 8) | tp_lb; hm_raw = ((u16)hm_mb << 8) | hm_lb; RH_Data = (u32)100 * hm_raw / 65535; TH_Data = (u32)175 * tp_raw / 65535 - 45; }

三、MLX90614(红外温度传感器)

1、时钟频率支持10khz-100khz(IIC中的延时需要改为 5us )

2、读取温度的流程

3、代码

#include "infrared_tp.h" /************************* 函数名称:infrared_tp(void) 函数功能:红外温度传感器MLX90614 返回值:无 形参:无 作者:me 版本:1.0 *************************/ float infrared_tp(void) { u8 lb,mb; float temp = 0; u16 data = 0; IIc_Start(); IIc_Send_Byte(0xB4); IIc_Rec_Ack(); IIc_Send_Byte(0x07); IIc_Rec_Ack(); IIc_Start(); IIc_Send_Byte(0xB5); IIc_Rec_Ack(); lb = IIc_Res_Byte(); IIc_Send_Ack(0); mb = IIc_Res_Byte(); IIc_Send_Ack(1); IIc_Res_Byte(); IIc_Send_Ack(0); IIc_End(); data = (mb << 8) | lb; temp = (data * 0.02f) - 273.15f; return temp; }
http://www.jsqmd.com/news/463120/

相关文章:

  • 贾子哲学体系(Kucius Philosophy):以东方智慧为根基的跨学科理论框架与AI时代的文明方案
  • 基于非Copula理论的股票投资组合预测:利用高斯定理预测股票亏损风险研究(Matlab代码实现)
  • 北京美国留学咨询中介哪家靠谱?2026最新推荐避坑指南! - 资讯焦点
  • Linux系统编程(十)--- 数据库Sqlite3
  • 进阶3 翻译42 单词35
  • 2026年主流品牌咨询公司竞争格局与全景解析 - 品牌推荐
  • 西门子1200plc与1500plc通用PID调节仿真程序及其视频解说教程
  • 论文AIGC率80%降至5%实测:DeepSeek+豆包+Gemini去AI味指令及工具横评
  • 国内优质消泡剂供应商排行榜 精准选型指南 - 优质品牌商家
  • 基于非完整约束RRT算法与混合控制协议的充满障碍物环境中分散式非完整约束系统的避碰控制器研究(Matlab代码实现)
  • 软件开发的“最后时刻”:当公司开始用 AI Agents 全权交付项目
  • 2026新加坡本科预科新路径:六力维多课程中心双校区与贝勒比斯全球教育认证项目深度解析 - 品牌2026
  • Linux36:Mat结构体
  • 光伏三相并网系统:控制策略与仿真结果
  • 南昌服务业抖音代运营优质服务商推荐指南 - 资讯焦点
  • DeepSeek/豆包/Gemini去AI味指令合集,附2026论文降AI工具测评(降至5%)
  • 北京/上海/深圳等六城高端腕表养护哪里好 日常养护+突发急救+品牌周期+正规门店 - 时光修表匠
  • PMSM控制系列文章-7.MTPV及整体控制架构
  • 2026论文降AI全攻略:DeepSeek等大模型指令与测评,AIGC率80%降至5%
  • 钻井工程师的COMSOL实战手记
  • LightTools照明设计进阶:从仿真文件到优化引擎的实战解析
  • 颠覆想象!汉玛克迎新盛典见证超越之年 - 资讯焦点
  • IT 培训哪家就业好? - 资讯焦点
  • **Hive**:基于 Hadoop 的数据仓库工具,提供类 SQL(HiveQL)接口,将查询转换为 MapReduce/Tez/Spark 任务
  • mmdetection视觉解析实战:从检测框渲染到特征热力图生成
  • window服务
  • 2026年四川硅酸盐防火板批发厂家榜单 全品类供应 防火防潮 适配工程家装多场景 - 深度智识库
  • 怎么去AI味?DeepSeek+豆包+Gemini指令与论文降AI工具实测(80%降至5%)
  • 【VCS】利用libmap优化仿真效率:从重名模块到黑盒加速
  • 2026最新云南雕塑供应商推荐!昆明优质雕塑批发厂家权威榜单发布 - 十大品牌榜