目前现有的max30205的驱动代码大多是基于Arduino单片机的,之前用了一个模块,看了一下数据手册,通信用的是IIC通信,读写数据地址都按照数据手册中来就行,和我用过的其他IIC通信的传感器相比,这个传感器的温度数据寄存器是十六位的,而我们一般用的读取代码历程都是一个字节,然后地址位依向后加一,这个模块在读完高八位时需要主机发送一个应答信号,然后继续读取低八位下面附有时序图和源代码:

30205.c:

#include “30205.h”
#include “delay.h”
//float temperature=0;
void max_init (void)
{
IIC_Init();
I2CwriteByte(MAX30205_ADDRESS, MAX30205_CONFIGURATION, 0x00);
//I2CwriteByte(MAX30205_ADDRESS, MAX30205_THYST , 0x00);
// I2CwriteByte(MAX30205_ADDRESS, MAX30205_TOS, 0x00);
}
//写入指定地址一个字节数据
void I2CwriteByte(u8 address,u8 subAddress,u8 data) //
{
//IIC_Start(); //产生开始信号
I2Cwriteaddr(address|IIC_WRITE,subAddress); //对器件地址写入命令信号 然后寄存器地址
IIC_Send_Byte(data); //对数据进行写进去
IIC_Wait_Ack(); //等待回应
IIC_Stop(); //产生停止信号
}
//I2C读一个字节操作
u8 I2CreadByte(u8 address,u8 subAddress)
{
u8 data;
// IIC_Start(); //开始
I2Cwriteaddr(address|IIC_WRITE, subAddress); //对器件地址发送写入命令 写入寄存器地址
IIC_Start(); //开始
IIC_Send_Byte(address|IIC_READ); //发送读取命令

   IIC_Wait_Ack();                                    //等待回应data=IIC_Read_Byte(0);IIC_Stop();                            //产生停止信号return data;

}

void I2CreadBytes(u8 address,u8 subAddress,u8*dest,u8 count)
{
int i;
for(i=0;i<count;i++)
{
dest[i]=I2CreadByte(address,subAddress);
subAddress+=1;
}

}

void I2Cwriteaddr(u8 address,u8 subAddress)//写地址和寄存器操作
{
IIC_Start(); //产生开始条件
IIC_Send_Byte(address); //写入器件地址
IIC_Wait_Ack(); //等待回应
IIC_Send_Byte(subAddress); //写入寄存器地址
IIC_Wait_Ack(); //等待回应
//IIC_Stop(); //产生停止信号
}
int16_t Read_max16(u8 address,u8 subAddress)
{
int16_t data;
u8 instant;
// IIC_Start(); //开始
I2Cwriteaddr(address|IIC_WRITE, subAddress); //对器件地址发送写入命令 写入寄存器地址
IIC_Start(); //开始
IIC_Send_Byte(address|IIC_READ); //发送读取命令

     IIC_Wait_Ack();                                    //等待回应data=IIC_Read_Byte(1);//主机发送应答信号//IIC_Wait_Ack(); instant = IIC_Read_Byte(0);//主机发送非应答信号IIC_Stop();                           //产生停止信号data = (data<<8)|instant;return data;

}

double GetTemperature(void)
{
double temperature= 0.0;
int16_t temp;
temp = Read_max16(MAX30205_ADDRESS,MAX30205_TEMPERATURE);
temperature = temp*0.00390625;
return temperature;
}

30205.h
#ifndef __30205_H
#define __30205_H
#include “sys.h”
#include “IIC.h”
#define MAX30205_ADDRESS 0X90 //8bit address converted to 7bit
//一些寄存器地址
#define MAX30205_TEMPERATURE 0X00
#define MAX30205_CONFIGURATION 0X01
#define MAX30205_THYST 0X02
#define MAX30205_TOS 0X03
#define IIC_WRITE 0 //数据方向 写入
#define IIC_READ 1 //数据方向 读取
//extern float temperature;
void shutdown(void);
void max_init (void);
void I2CwriteByte(u8 address,u8 subAddress,u8 data);
void I2Cwriteaddr(u8 address,u8 subAddress);
u8 I2CreadByte(u8 address,u8 subAddress);
void I2CreadBytes(u8 address,u8 subAddress,u8*dest,u8 count);
int16_t Read_max16(u8 address,u8 subAddress);
double GetTemperature(void);
#endif

IIC用的是模拟IIC,用的是原子哥的IIC底层
免费工程代码下载链接
数据手册下载链接

基于STM32的人体体温传感器MAX30205的应用相关推荐

  1. 基于STM32和超声波测距传感器的测距功能设计

    基于STM32和超声波测距传感器的测距功能设计(使用陌生传感器的流程介绍) 引言 项目设计 项目简介 开发工具 硬件设计 软件设计 开发流程 阅读手册 配置并测试传感器相关设置 软件开发 总结 后续 ...

  2. 基于STM32的485通讯传感器采集程序

    基于STM32的485通讯传感器采集程序 先来看看硬件连接,大致就这样连接! 一般来说,RS485是硬件,而他软件方面是modbus协议,用到最多的是RTU方式. 工作方式:主机(STM32)通过串口 ...

  3. 基于STM32的VEML6040颜色传感器应用

    *以下文章资源均来自互联网,文章内容仅供参考,如果侵犯了您的权益,请留言或通过邮箱与我联系. The following article resources are all from the Inte ...

  4. 基于STM32智能人体红外和声音感应声光控开关设计

    模块: 人体红外传感器:arduino HC-SR501人体红外感应模块(又名热释电) 声音传感器模块 声音检测模块 咪头模块 声控口哨开关 2路带光耦继电器模块   当检测到生物体靠近时,打开继电器 ...

  5. arduino i2c 如何写16位寄存器_基于STM32使用I2C读取传感器数据

    撑腰会儿:I2C通信协议介绍​zhuanlan.zhihu.com 上文介绍了I2C协议的基本结构,今天,使用STM32和LM75A温度传感器来实现I2C读取信息. 首先,为了使用I2C读取传感器测量 ...

  6. 基于STM32的DHT11温湿度传感器设计

    文章目录 前言 一.DHT11温湿度传感器是什么? 二.DHT11驱动程序详解 1.相关宏定义 2.输入输出GPIO配置 2.GPIO初始化设计 3.检测DHT11是否正常工作 4.读取DHT11数据 ...

  7. 毕业设计 基于stm32的人体健康监护系统 - 单片机 嵌入式 物联网

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4.1 ATGM332D定位模块 4.2 MAX30102心率传感器 4.3 DHT11温湿度传感器 4.4 MQ-2烟雾传感器 ...

  8. 基于STM32设计的人体健康监护系统(华为云IOT)

    一.设计需求 1.1 设计需求总结 根据需求,要求设计一款基于 STM32 的人体健康监护系统.采用系统模块化思路进行,将多个数模传感器收集到的数据和操作指令一并送至 STM32 中心处理器进行处理分 ...

  9. 基于stm32+amg8833+openmv实现的人脸跟随测温仪

    基于stm32+amg8833+openmv实现的人脸跟随测温仪 资料链接: 前言 概括 项目实物图 方案 AMG8833温度传感器驱动和目标温度的计算 openmv人脸识别部分 1 .云台舵机PID ...

最新文章

  1. OpenCV基础知识入门
  2. 关于华为x2中的外置SDCard的使用
  3. ocr文字识别软件ABBYY FineReader介绍
  4. 动态修改实体类转json的属性名
  5. Hadoop(五)HBase基础
  6. 电容屏、电阻屏基础知识
  7. 【SMTP】服务端口
  8. linux redis 调优,关于redis状态监控和性能调优详解
  9. 传输预编码matlab,基于MATLAB的MIMO系统预编码性能仿真.doc
  10. 关于如何在空间中建立直角坐标系
  11. Md5加密算法的原理及应用
  12. 《喜羊羊与灰太狼》中羊村的团队建设
  13. SQL注入--利用cookie进行注入
  14. 行业分析报告-全球与中国客户调查软件市场现状及未来发展趋势
  15. 详解PHP设置定时任务的实现方法
  16. 面试官出的APP测试问题
  17. 【高老师软件需求分析】20级云班课习题答案合集
  18. 三面(技术+HR面试)网易,分享我的面试经验!(已拿offer)
  19. 【ISAR成像定标方法(4)—基于参数估计法的方位维定标MATLAB仿真】
  20. 软件开发模型之装修篇

热门文章

  1. 关于用友U872成功安装到Win7 64bit的若干问题。
  2. 移动短信网关接入必须的几个参数
  3. 自制USB充电接口,手机不显示充电状态的原因
  4. mysql查询不同老师所教不同课程_MySQL学生表、老师表、课程表和成绩表查询语句,全部亲测...
  5. Android4.2.2 Gallery2源码分析(9)——三个界面的跳转
  6. 【小月电子】安路国产FPGA开发板系统学习教程-LESSON10无源蜂鸣器驱动
  7. 湃睿科技公开课圆满成功
  8. 抓取七星彩历史开奖数java据,七星彩中五个号
  9. 渠道反作弊之常见行业手段
  10. tgp Linux 饥荒,饥荒TGP联机版专用服务器设置