One shot是一种比较节电的方式,也可以理解为按需读取
平时LPS22HB一直处于掉电模式,在需要测试时将ONE_SHOT位置1
待LPS22HB转换完成后再次进入掉电模式,转换一次可读取一个气压和温度结果
使用ONE_SHORT模式首先要将CTRL_REG1 (10h) 的ODR设置为0(默认),此时LPS22HB掉电
将CTRL_REG2 (11h)寄存器的ONE_SHOT位写入1,启动单次转换,转换完成后ONE_SHOT位复位为0
STATUS (27h)寄存器的T_DA和P_DA更新为1,提示有新数据已准备好
通过读取PRESS_OUT_H (2Ah), PRESS_OUT_L (29h) 和 PRESS_OUT_XL (28h)得到气压数据
读取TEMP_OUT_H (2Ch)和 TEMP_OUT_L (2Bh)得到温度数据
测试代码如下:
首先多次读取STATUS (27h)寄存器判断T_DA和P_DA是否为1,因为处于掉电模式status的值始终为0
将CTRL_REG2 (11h)寄存器的ONE_SHOT写入1,注意如果是连续读取需要同时将IF_ADD_INC写1,或者先读取寄存器内容然后再写入
循环读取STATUS (27h)寄存器判断T_DA和P_DA是否为1
经过一段时间的转换后STATUS (27h)寄存器判断T_DA和P_DA变为1,退出循环
可以看到counter为31,表示执行了31次循环后数据才准备完毕
pressure和temp对应当前的气压和温度
用于测试的工程文件