基于STM32的人体体温传感器MAX30205的应用
目前现有的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的应用相关推荐
- 基于STM32和超声波测距传感器的测距功能设计
基于STM32和超声波测距传感器的测距功能设计(使用陌生传感器的流程介绍) 引言 项目设计 项目简介 开发工具 硬件设计 软件设计 开发流程 阅读手册 配置并测试传感器相关设置 软件开发 总结 后续 ...
- 基于STM32的485通讯传感器采集程序
基于STM32的485通讯传感器采集程序 先来看看硬件连接,大致就这样连接! 一般来说,RS485是硬件,而他软件方面是modbus协议,用到最多的是RTU方式. 工作方式:主机(STM32)通过串口 ...
- 基于STM32的VEML6040颜色传感器应用
*以下文章资源均来自互联网,文章内容仅供参考,如果侵犯了您的权益,请留言或通过邮箱与我联系. The following article resources are all from the Inte ...
- 基于STM32智能人体红外和声音感应声光控开关设计
模块: 人体红外传感器:arduino HC-SR501人体红外感应模块(又名热释电) 声音传感器模块 声音检测模块 咪头模块 声控口哨开关 2路带光耦继电器模块 当检测到生物体靠近时,打开继电器 ...
- arduino i2c 如何写16位寄存器_基于STM32使用I2C读取传感器数据
撑腰会儿:I2C通信协议介绍zhuanlan.zhihu.com 上文介绍了I2C协议的基本结构,今天,使用STM32和LM75A温度传感器来实现I2C读取信息. 首先,为了使用I2C读取传感器测量 ...
- 基于STM32的DHT11温湿度传感器设计
文章目录 前言 一.DHT11温湿度传感器是什么? 二.DHT11驱动程序详解 1.相关宏定义 2.输入输出GPIO配置 2.GPIO初始化设计 3.检测DHT11是否正常工作 4.读取DHT11数据 ...
- 毕业设计 基于stm32的人体健康监护系统 - 单片机 嵌入式 物联网
文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4.1 ATGM332D定位模块 4.2 MAX30102心率传感器 4.3 DHT11温湿度传感器 4.4 MQ-2烟雾传感器 ...
- 基于STM32设计的人体健康监护系统(华为云IOT)
一.设计需求 1.1 设计需求总结 根据需求,要求设计一款基于 STM32 的人体健康监护系统.采用系统模块化思路进行,将多个数模传感器收集到的数据和操作指令一并送至 STM32 中心处理器进行处理分 ...
- 基于stm32+amg8833+openmv实现的人脸跟随测温仪
基于stm32+amg8833+openmv实现的人脸跟随测温仪 资料链接: 前言 概括 项目实物图 方案 AMG8833温度传感器驱动和目标温度的计算 openmv人脸识别部分 1 .云台舵机PID ...
最新文章
- OpenCV基础知识入门
- 关于华为x2中的外置SDCard的使用
- ocr文字识别软件ABBYY FineReader介绍
- 动态修改实体类转json的属性名
- Hadoop(五)HBase基础
- 电容屏、电阻屏基础知识
- 【SMTP】服务端口
- linux redis 调优,关于redis状态监控和性能调优详解
- 传输预编码matlab,基于MATLAB的MIMO系统预编码性能仿真.doc
- 关于如何在空间中建立直角坐标系
- Md5加密算法的原理及应用
- 《喜羊羊与灰太狼》中羊村的团队建设
- SQL注入--利用cookie进行注入
- 行业分析报告-全球与中国客户调查软件市场现状及未来发展趋势
- 详解PHP设置定时任务的实现方法
- 面试官出的APP测试问题
- 【高老师软件需求分析】20级云班课习题答案合集
- 三面(技术+HR面试)网易,分享我的面试经验!(已拿offer)
- 【ISAR成像定标方法(4)—基于参数估计法的方位维定标MATLAB仿真】
- 软件开发模型之装修篇
热门文章
- 关于用友U872成功安装到Win7 64bit的若干问题。
- 移动短信网关接入必须的几个参数
- 自制USB充电接口,手机不显示充电状态的原因
- mysql查询不同老师所教不同课程_MySQL学生表、老师表、课程表和成绩表查询语句,全部亲测...
- Android4.2.2 Gallery2源码分析(9)——三个界面的跳转
- 【小月电子】安路国产FPGA开发板系统学习教程-LESSON10无源蜂鸣器驱动
- 湃睿科技公开课圆满成功
- 抓取七星彩历史开奖数java据,七星彩中五个号
- 渠道反作弊之常见行业手段
- tgp Linux 饥荒,饥荒TGP联机版专用服务器设置