#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源码相关推荐

  1. 自动发邮件的程序 c语言,5分钟!教你用C语言发送邮件:附送源码+教学!

    5分钟!教你用C语言发送邮件:附送源码+教学!-1.jpg (10.71 KB, 下载次数: 0) 2018-9-3 02:21 上传 关注<一碳科技>,获取更多知识! 前言 相信年夜家都 ...

  2. 三菱 plc方案源码STM32工控板fx2n源码

    三菱 plc方案源码STM32工控板fx2n源码 FX2N源码V9.x完善高性能版,程序架构清晰,注释详细,支持大部分指令,当前最新功能如下: 13.FX2N源码持续升级中. . . 亲们,敬请关注! ...

  3. c语言程序设计教程赵乘,《C语言程序设计教程》例题源码.pdf

    <C语言程序设计教程>例题源码 练习一 [例1.1]打印 "常熟理工学院"的汉语拼音. 程序源码如下: voidmain() { printf("chang ...

  4. 类似国外多语言wikipedia百度百科网站源码

    这个程序代码,目前在国内还是比较少的,特别是类似国外多语言wikipedia百度百科网站源码的,之前有一个做百科系统的,不知道什么原因,后来不做了,不过那个界面也比较差一点,不说这么多了,说这个程序代 ...

  5. 微信小程序宠物商城项目源码来了~

    微信小程序蒙服汇项目源码来了~ 微信小程序垃圾分类项目源码来了~ 微信小程序校园社团管理系统项目源码来了~ 团队承接各类小程序定制,需要加微 code_gg_boy .小商城,购物,公司的一些管理,流 ...

  6. 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw 本源 ...

  7. SPI驱动框架源码分析

     SPI驱动框架源码分析 2013-04-12 16:13:08 分类: LINUX SPI驱动框架源码分析 SPI协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式.相关通讯设 ...

  8. c语言旅游系统,C语言计算旅行花费附带源码

    C语言计算旅行花费附带源码 来源:www.xysxzl.com时间:2021-03-01 10:56 旅游程序 国庆节桐桐一家想自驾旅游,目的地有北京.海南.云南等许多好玩的地方可选择,在已知汽车平均 ...

  9. 基于线上的茶叶购买小程序(论文+程序设计源码+数据库文件)

    微信小程序在日常生活中应用越来越广,网上消费.游戏娱乐等成为了一种常见应用方式.为进一步了解和探索微信小程序在点餐系统中的潜在价值和意义,本文通过使用 Javascript 技术.Spring boo ...

  10. 基于JAVA融呗智慧金融微资讯移动平台小程序端计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA融呗智慧金融微资讯移动平台小程序端计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA融呗智慧金融微资讯移动平台小程序端计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技 ...

最新文章

  1. IT部门在企业信息化中的转变
  2. 矿大计算机专硕和学硕,本硕矿大,考研期间我收获了什么?
  3. Android入门教程免费获取
  4. 配置 VIM 英语字典
  5. linux中wps默认安装目录,centos6.5 安装wps linux
  6. Httpwatch 工具介绍
  7. java ssh 和mvc_[转]JAVA三大框架SSH和MVC
  8. org.springframework.dao.InvalidDataAccessApiUsageException
  9. android实现通知栏搜索功能,actionBar+SearchView实现搜索功能
  10. 各种交换机端口安全总结(配置实例)
  11. MFC的定时器OnTimer
  12. appuim+python自动化测试计算器实例
  13. 74ls20设计半加器_用74ls138设计全加器
  14. Redis与数据库的数据一致性
  15. vue 自定义标签页
  16. ChatGpt会替代码农可行性分析
  17. 2021-18.面向对象进阶
  18. 为什么《请回答1988》能被称为神剧
  19. 群晖Docker 安装Jellyfin提示“操作超时解决方法
  20. 《那年花开月正圆》热播 让人深觉安防重要性

热门文章

  1. 宾馆客房管理系统-vue前端开发
  2. 路由器tomato固件上搭建svn
  3. 大华中心管理服务器,大华监控中心联网解决方案
  4. 韦根协议c语言,韦根协议(26位)及其读取算法
  5. aaa logo汉子字体_AAA Logo –标志设计软件
  6. 尚硅谷ssm整合实战项目笔记
  7. GT S7278 Android4.4,三星S7278U官方原版固件rom系统刷机包(线刷格式)
  8. spark快速入门java_Spark 快速入门
  9. 计算机不能打印pdf文档怎么办,pdf无法打印怎么处理_pdf文件无法打印的三种解决方法...
  10. java毕业设计 - vue外卖的点餐系统