三亿体育集团科技有限公司官网 - 无线通信模块研发销售专家

max30102代码分析总篇
发布时间:2026-09-16 03:21:31

  

max30102代码分析总篇(图1)

  主要分析的是SpO2这个部分。examples中是示例,src中是源码。

  这里的F指的是把字符串存放在flash闪存中,不得不说这个处理还是很细节的。

  因为现在购买的一般是黑色的MAX30102的模块,这种模块是MAX30102和电容电阻都在一个面,而且面积小,手指在按上去的时候很容易接触到信号线的触点,所以会干扰到iic信号。一般的解决方法是做绝缘,或者把信号线速率降低。

  这样写是代表这三个选项都是可选的,也就是说,你不传递任何值,也是可以正确初始化的。

  也就是说如果什么都不传递,i2cSpeed的速率默认是低速的,所以在初始化时,传递了Wire和I2C_SPEED_FAST,把速度设置为高速。

  为啥不直接传I2C_SPEED_FAST,还要传个Wire呢?因为i2cSpeed是第二的参数,所以想要赋值第二个参数,你先得赋值第一个参数。

  这里的TwoWire只是Wire类的别名,功能上是完全等价的,为什么要用TwoWire呢,其实就是告诉你,如果你的开发板上有两个iic,而你恰好想用第二条,你就可以传递一个Wire1。

  如果读取失败了,就返回0,这也是在使用这个库时最好iic用低速率的原因。当iic总线收到干扰时(没有做绝缘,手指触到到之后干扰到iic总线信号传输,因为人体相当于一个几十到几百uF的电容)就会直接返回0,这时并不能确定时总线受到干扰,信号没回来,还是传输回来的就是0。这时候看到的数据就是不稳定的。

  MAX30105::writeRegister8介绍完了读函数,写函数就没什么好说的了。看一下源码。

  这个操作一开始看,感觉有点傻,为啥不直接传输thing,然后在里面进行取反操作,何必多次一举,看了其他调用这个函数的代码,我大概搞清楚了。

  现在有第0位到第2位的bit是代表一个模式设置,这个模式有101,110,111三种。那么就可以传输一个二进制是

  的mask,那与读取出来的值进行与操作之后,就把第0位到第2位的数据清零了,这时thing再传递三种模式的其中一种。这样就可以做到任意位数的赋值,这种方式还挺巧妙的。

  但是也能感觉到作者在写mark的数据定义的时候挺烦的,一会2进制赋值,一会16进制赋值。

  就是看是不是有新数据,有新数据就把尾指针加一。剩下的部分就是把数据打印出来了。

  和上一个小节题目都一样,因为上两个小节本质上是在做初始化的操作,从功能上看,并不能算作是loop中的内容,其实放在setup中更加合理。