概述在低功耗可穿戴应用中,IIC是一种常用的总线,电路简单,结构可靠,可以应对绝大多数场景,例如米家的蓝牙温湿度计等 本期测评围绕着低功耗可穿戴应用中的温湿度测量需求,使用瑞萨电子的HS3033作为传感器,使用STM32WB09K通过IIC读取传感器值。 HS3003是一种数字式IIC温湿度传感器,需要通过主机来发起测量请求然后传感器将温湿度上报 查看HS3003说明书,最小电路图如下所示。 ==IIC请一定要链接上拉电阻 否则可能导致通信失败== 通过阅读手册我们可以知道 HS3033的iic地址为0x44, IIC配置我们直接选择BSP配置 勾选IIC其余的配置项CubeMX自动帮我们配置好 IIC我们使用400Khz高速IIC 传感器初始化与读写对于传感器数据读写 手册上有详细的时序说明 在上电时刻 传感器默认处于休眠状态 需要向传感器发送一个0来唤醒 初始化代码如下
对于不同精度的读取 转换时间是不同的 需要根据对应精度来设置不同的等待时间 数据读取只需要按照如图所示 发送一个IIC地址 然后等待从机ACK信号 然后接受4字节数据,
我们此时是将温湿度数据同时存储在一个4字节的变量中 方便我们后面进行数据处理 数据处理读取回来的原始数据我们需要用手册中给的公式进行处理
由此我们尽可以开始读取温湿度信息了 拓展应用手册中提到了可以通过编程传感器内部的flash来进行传感器分辨率改变和设置ID号 要更改传感器分辨率或读取 ID 号,主机必须在芯片通电时将 HS300x 置于编程模式。上图显示了进入编程模式所需的命令顺序,必须在传感器通电后 10 毫秒内发送。主站必须发送 I2C 地址和一个写入位,后跟命令 0xA0|0x00|0x00。 此命令需要 120ms 来处理,之后 master 可以访问下表中列出的非易失性内存寄存器。所有这些 registers 都是 16 位宽的。要恢复正常的传感器操作并执行测量,主站必须发送 I2C 地址和写入位,然后发送命令:0x80|0x00|0x00。 修改测量分辨率 下图展示了3步修改测量分辨率的步骤 相对湿度和温度分辨率可以分别在 0x06 和 0x11 的寄存器中读取,也可以写入 0x46 或 0x51 的寄存器中。分辨率信息存储在这些寄存器的位 [11:10] 中,如表 10 所示。这些 registers 中的所有其他 bits 必须保持不变。因此,在写入新的分辨率设置之前,必须读取读寄存器的内容,并且只能更改写寄存器中的位 [11:10]。一旦更改位 [11:10] 以设置所需的分辨率,则必须将整个寄存器写回 HS300x 传感器。 |
使用STM32WB系列微控制器构建无线应用
STM32WB基于Custom Template实现客户定制BLE私有协议
STM32 生态系统|基于STM32WB的低功耗蓝牙应用(一)
【NUCLEO-WB09KE评测】BLE创建服务和写特征控制LED
【NUCLEO-WB09KE评测】+使用STM32CubeMX新建蓝牙工程
【NUCLEO-WB09KE评测】创建BLE工程和开启调试信息
【NUCLEO-WB09KE评测】BLE例程HeartRate及工具探索
【NUCLEO-WB09KE评测】使用I2C点亮一个OLED
【NUCLEO-WB09KE评测】STM32WB09KE的内部BootLoader使用
【NUCLEO-WB09KE评测】USART的printf和GPIO的使用