使用Hi3861和Max30102进行心率血氧测量

项目是在官方提供的源码基础上改的,板子用的是小熊派的,使用的是I2C0,先谈谈遇到的几个问题,第一个是从机地址,在I2C写数据时从机地址时0xAE,读从机数据时是0xAF,找了很久才找到的。

然后是I2C读取数据和写数据的先后顺序,官方文档是这样子的:

读一个字节首先是发送从机地址,发送从机地址之后接着发送寄存器地址,然后再次发送从机读的地址,Max30102就会把之前发送的寄存器地址的数据传输到主机读。整个流程的代码如下:

u8 max30102_Bus_Read(u8 Register_Address)
{
	uint8_t data1;
	uint32_t result;
	uint8_t data[1];
	uint8_t buffer[] = {Register_Address};
	hi_i2c_data i2cData = {0};
    i2cData.send_buf = buffer;
    i2cData.send_len = sizeof(buffer);

	result = hi_i2c_write(HI_I2C_IDX_0, max30102_WR_address, &i2cData);
	if (result != HI_ERR_SUCCESS) {
        printf("I2C AP3216C status = 0x%x!!!\r\n", result);
        return result;
    }
	hi_i2c_data i2cData1 = {0};
    i2cData1.receive_buf = data;
    i2cData1.receive_len = 1;

    result = hi_i2c_read(HI_I2C_IDX_0, max30102_RE_address, &i2cData1);
	if (result != HI_ERR_SUCCESS) {
        printf("I2C AP3216C status = 0x%x!!!\r\n", result);
        return result;
    }
	data1=data[0];
	return data1;
}

向从机写数据我在文档里面没找见,但是看官方例程是这样子的顺序,首先把向从机写数据的地址传送到I2C,然后是要写的寄存器的地址,接着是要写的数据。

u8 max30102_Bus_Write(u8 Register_Address, u8 Word_Data)
{
	uint8_t buffer[] = {Register_Address, Word_Data};
	hi_i2c_data i2cData = {0};
    i2cData.send_buf = buffer;
    i2cData.send_len = sizeof(buffer);

    return hi_i2c_write(HI_I2C_IDX_0, max30102_WR_address, &i2cData);
}

最后实现的结果如下:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值