RT-Thread在正点原子Apollo上使用MAX30102读取心率、血氧参数

1. 买来MAX30102模块,某宝卖家只提供了两个小小的例程,一个是基于mBed的STM32F103C8T6的Keil例程,另外一个是arduion程序,其余啥都没有了,失望,网上好多人抱怨移植好麻烦,有营养的帖子不多,推荐一个这个老哥有点东西,强,可惜没有分享工程,有移植经验分享。 

2. 在Keil例程中,文件如下,最需要注意的是MAX30102.cpp、MAX30102.h,以及algorithm.cpp、algorithm.h,其中algorithm两个文件是对读取的MAX30102数据的处理,主要有两个均值滤波器,还经过了一个汉明窗,最后返回了结果,还好我大三数字信号处理学的还不错,能看懂,具体算法有兴趣的可以查一下,能看懂就行,我也不想着自己编了,将algorithm.cpp重命名为algorithm.c。还有MAX30102两个文件,是MAX30102的驱动程序,总结起来就是初始化一个IIC,然后传输数据完成配置再使用IIC进行读取,接下来是具体的分析

 

 3. 首先在工程中加入I2C bus device,具体什么环境按照相应方法配置,env或者RT-Thread Studio。在rtconfig.h加入

#define BSP_USING_I2C2

/* Notice: PH4 --> 116; PH5 --> 117 */

#define BSP_I2C2_SCL_PIN 116
#define BSP_I2C2_SDA_PIN 117

打开I2C,并且配置了SCL和SDA的引脚,编译工程下载,使用串口助手连接板子的串口1,在msh中输入list_device查看设备,有i2c2证明i2c2配置成功

 

 4.  接下来就是MAX30102驱动重写

      MAX30102.h直接搬来使用,重命名为max30102.h,但是其中的MAX30102的IIC从机地址需要更改,原先是给出写地址和读地址,但在RT-Thread中会自动移位,读操作会加一,这个文章有介绍,所以0xAE和0xAF右移一位就是0x57

/*
#define I2C_WRITE_ADDR 	0xAE//	0B 1010 1110 >>1 0B 0101 0111
#define I2C_READ_ADDR 	0xAF// 	0B 1010 1111
*/
#define MAX30102_ADDR 0x57

      MAX30102.cpp重命名为max30102.c,将里边的IIC的发送接受函数更改为RT-Thread的IIC API,结果如下

/*
 * Copyright (c) 2006-2020, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       		Notes
 * 2020-03-30     NUAAQIANJIN       the first version
 */
#include "max30102.h"



rt_err_t maxim_max30102_write_reg(struct rt_i2c_bus_device *bus, rt_uint8_t i2c_addr,
                                        rt_uint8_t i2c_data)
{
    struct rt_i2c_msg msgs;
    rt_uint8_t send_data[2];
    send_data[0] = i2c_addr;
    send_data[1] = i2c_data;

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值