max30102c语言程序,STM32驱动MAX30102源码
#include "stm32f10x.h"
#include "usart.h"
#include "ultrasonic.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_i2c.h"
#include "delay.h"//延时函数
#include
#include
#include "bsp_i2c_gpio.h"
/*************************************************
函数: fputc(int ch, FILE *f)
功能: 重定向c库函数printf到USART1
参数: 无
返回: 无
**************************************************/
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (unsigned char) ch);
while (!(USART1->SR & USART_FLAG_TXE));
return (ch);
}
/*************************************************
函数: void main_init(void)
功能: main初始化
参数: 无
返回: 无
**************************************************/
void main_init(void)
{
Usart_Init();
//I2C1_GPIO_Config();
//I2C1_Mode_config();
//I2C1_Configuration();
bsp_InitI2C();
delay_init(72); //延时初始化
}
extern u8 max30102_Bus_Read(u8 Register_Address);
extern void max30102_init(void);
/*************************************************
函数: int main(void)
功能: main主函数
参数: 无
返回: 无
**************************************************/
int main(void)
{
u8 temp_num=0;
main_init();
max30102_init();
printf("\r\n MAX30102 init \r\n");
while(1)
{
delay_ms(1000);
max30102_init();
temp_num = max30102_Bus_Read(0x1f);
printf("当前温度 = %d\r\n",temp_num);
}
}
#define max30102_WR_address 0xAE
u8 max30102_Bus_Write(u8 Register_Address, u8 Word_Data)
{
/* 采用串行EEPROM随即读取指令序列,连续读取若干字节 */
/* 第1步:发起I2C总线启动信号 */
i2c_Start();
/* 第2步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(max30102_WR_address | I2C_WR); /* 此处是写指令 */
/* 第3步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第4步:发送字节地址 */
i2c_SendByte(Register_Address);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第5步:开始写入数据 */
i2c_SendByte(Word_Data);
/* 第6步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 发送I2C总线停止信号 */
i2c_Stop();
return 1; /* 执行成功 */
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
/* 发送I2C总线停止信号 */
i2c_Stop();
return 0;
}
u8 max30102_Bus_Read(u8 Register_Address)
{
u8 data;
/* 第1步:发起I2C总线启动信号 */
i2c_Start();
/* 第2步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(max30102_WR_address | I2C_WR); /* 此处是写指令 */
/* 第3步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第4步:发送字节地址, */
i2c_SendByte((uint8_t)Register_Address);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第6步:重新启动I2C总线。下面开始读取数据 */
i2c_Start();
/* 第7步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(max30102_WR_address | I2C_RD); /* 此处是读指令 */
/* 第8步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第9步:读取数据 */
{
data = i2c_ReadByte(); /* 读1个字节 */
i2c_NAck(); /* 最后1个字节读完后,CPU产生NACK信号(驱动SDA = 1) */
}
/* 发送I2C总线停止信号 */
i2c_Stop();
return data; /* 执行成功 返回data值 */
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
/* 发送I2C总线停止信号 */
i2c_Stop();
return 0;
}
void max30102_FIFO_Read(u8 Register_Address,u16 Word_Data[][2],u8 count)
{
u8 i=0;
u8 no = count;
u8 data1, data2;
/* 第1步:发起I2C总线启动信号 */
i2c_Start();
/* 第2步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(max30102_WR_address | I2C_WR); /* 此处是写指令 */
/* 第3步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第4步:发送字节地址, */
i2c_SendByte((uint8_t)Register_Address);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第6步:重新启动I2C总线。下面开始读取数据 */
i2c_Start();
/* 第7步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(max30102_WR_address | I2C_RD); /* 此处是读指令 */
/* 第8步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第9步:读取数据 */
while (no)
{
data1 = i2c_ReadByte();
i2c_Ack();
data2 = i2c_ReadByte();
i2c_Ack();
Word_Data[i][0] = (((u16)data1 << 8) | data2); //
data1 = i2c_ReadByte();
i2c_Ack();
data2 = i2c_ReadByte();
if(1==no)
i2c_NAck(); /* 最后1个字节读完后,CPU产生NACK信号(驱动SDA = 1) */
else
i2c_Ack();
Word_Data[i][1] = (((u16)data1 << 8) | data2);
no--;
i++;
}
/* 发送I2C总线停止信号 */
i2c_Stop();
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
/* 发送I2C总线停止信号 */
i2c_Stop();
}
#define INTERRUPT_REG 0X00
void max30102_init()
{
max30102_Bus_Write(0x09, 0x0b); //mode configuration : temp_en[3] MODE[2:0]=010 HR only enabled 011 SP02 enabled
max30102_Bus_Write(0x01, 0xF0); //open all of interrupt
max30102_Bus_Write(INTERRUPT_REG, 0x00); //all interrupt clear
max30102_Bus_Write(0x03, 0x02); //DIE_TEMP_RDY_EN
max30102_Bus_Write(0x21, 0x01); //SET TEMP_EN
max30102_Bus_Write(0x0a, 0x47); //SPO2_SR[4:2]=001 100 per second LED_PW[1:0]=11 16BITS
max30102_Bus_Write(0x0c, 0x47);
max30102_Bus_Write(0x0d, 0x47);
}
max30102c语言程序,STM32驱动MAX30102源码相关推荐
- 自动发邮件的程序 c语言,5分钟!教你用C语言发送邮件:附送源码+教学!
5分钟!教你用C语言发送邮件:附送源码+教学!-1.jpg (10.71 KB, 下载次数: 0) 2018-9-3 02:21 上传 关注<一碳科技>,获取更多知识! 前言 相信年夜家都 ...
- 三菱 plc方案源码STM32工控板fx2n源码
三菱 plc方案源码STM32工控板fx2n源码 FX2N源码V9.x完善高性能版,程序架构清晰,注释详细,支持大部分指令,当前最新功能如下: 13.FX2N源码持续升级中. . . 亲们,敬请关注! ...
- c语言程序设计教程赵乘,《C语言程序设计教程》例题源码.pdf
<C语言程序设计教程>例题源码 练习一 [例1.1]打印 "常熟理工学院"的汉语拼音. 程序源码如下: voidmain() { printf("chang ...
- 类似国外多语言wikipedia百度百科网站源码
这个程序代码,目前在国内还是比较少的,特别是类似国外多语言wikipedia百度百科网站源码的,之前有一个做百科系统的,不知道什么原因,后来不做了,不过那个界面也比较差一点,不说这么多了,说这个程序代 ...
- 微信小程序宠物商城项目源码来了~
微信小程序蒙服汇项目源码来了~ 微信小程序垃圾分类项目源码来了~ 微信小程序校园社团管理系统项目源码来了~ 团队承接各类小程序定制,需要加微 code_gg_boy .小商城,购物,公司的一些管理,流 ...
- 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw
计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 本源 ...
- SPI驱动框架源码分析
SPI驱动框架源码分析 2013-04-12 16:13:08 分类: LINUX SPI驱动框架源码分析 SPI协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式.相关通讯设 ...
- c语言旅游系统,C语言计算旅行花费附带源码
C语言计算旅行花费附带源码 来源:www.xysxzl.com时间:2021-03-01 10:56 旅游程序 国庆节桐桐一家想自驾旅游,目的地有北京.海南.云南等许多好玩的地方可选择,在已知汽车平均 ...
- 基于线上的茶叶购买小程序(论文+程序设计源码+数据库文件)
微信小程序在日常生活中应用越来越广,网上消费.游戏娱乐等成为了一种常见应用方式.为进一步了解和探索微信小程序在点餐系统中的潜在价值和意义,本文通过使用 Javascript 技术.Spring boo ...
- 基于JAVA融呗智慧金融微资讯移动平台小程序端计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA融呗智慧金融微资讯移动平台小程序端计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA融呗智慧金融微资讯移动平台小程序端计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技 ...
最新文章
- IT部门在企业信息化中的转变
- 矿大计算机专硕和学硕,本硕矿大,考研期间我收获了什么?
- Android入门教程免费获取
- 配置 VIM 英语字典
- linux中wps默认安装目录,centos6.5 安装wps linux
- Httpwatch 工具介绍
- java ssh 和mvc_[转]JAVA三大框架SSH和MVC
- org.springframework.dao.InvalidDataAccessApiUsageException
- android实现通知栏搜索功能,actionBar+SearchView实现搜索功能
- 各种交换机端口安全总结(配置实例)
- MFC的定时器OnTimer
- appuim+python自动化测试计算器实例
- 74ls20设计半加器_用74ls138设计全加器
- Redis与数据库的数据一致性
- vue 自定义标签页
- ChatGpt会替代码农可行性分析
- 2021-18.面向对象进阶
- 为什么《请回答1988》能被称为神剧
- 群晖Docker 安装Jellyfin提示“操作超时解决方法
- 《那年花开月正圆》热播 让人深觉安防重要性
热门文章
- 宾馆客房管理系统-vue前端开发
- 路由器tomato固件上搭建svn
- 大华中心管理服务器,大华监控中心联网解决方案
- 韦根协议c语言,韦根协议(26位)及其读取算法
- aaa logo汉子字体_AAA Logo –标志设计软件
- 尚硅谷ssm整合实战项目笔记
- GT S7278 Android4.4,三星S7278U官方原版固件rom系统刷机包(线刷格式)
- spark快速入门java_Spark 快速入门
- 计算机不能打印pdf文档怎么办,pdf无法打印怎么处理_pdf文件无法打印的三种解决方法...
- java毕业设计 - vue外卖的点餐系统