XGZP6859D 带 Stm32f302R8 的压力传感器
Posted
技术标签:
【中文标题】XGZP6859D 带 Stm32f302R8 的压力传感器【英文标题】:XGZP6859D Pressure Sensor with Stm32f302R8 【发布时间】:2021-10-29 22:37:33 【问题描述】:我想创建一个 API 以使用 stm32f302r8 nucleo
板从 XGZP6859D
压力传感器获取值,
这是它的数据表http://cfsensor.com/static/upload/file/20210110/XGZP6859D%20Pressure%20Sensor%20Module.pdf。
我在 API 中编写了所有寄存器,并声明了一个有助于从传感器获取压力值的函数。
有人可以帮助我或提供一些如何编写函数的提示吗?提前致谢。
【问题讨论】:
欢迎来到 SO。请展示您迄今为止为解决问题所做的尝试。提供一些MCVE 并告诉您卡在哪里。您可能还会发现 how to ask 对阅读很有用。如果您已经知道如何访问传感器(写入寄存器),那么您在读取其他一些寄存器时遇到的具体问题是什么? 【参考方案1】:文档是这样说的:
I2C设备地址:0X6D
读取0xA5寄存器值,将读取的二进制值“和”放在“11111111101”上,然后写入0xA5。 将指令 0x0A 发送到 0x30 寄存器以进行一次温度采集,一次压力数据采集。 读取0x30寄存器地址。如果 Sco 位为 0,表示采集结束,可以读取数据。 读取0x06、0x07、0x08寄存器地址数据形成24位AD值(压力数据AD值)
假设您有一些基本的 i2c 读/写功能和 0X6D 的 i2c 地址,压力读取 sudo 函数将如下所示:
// 1
i2cSensorAddress = 0x6D; // Make sure you address the sensor properly
int8_t reg = i2cSensorRead(0xA5);
i2cSensorWrite(0xA5, reg & 0xFD); //11111101 in hex
// 2
i2cSensorWrite(0x30, 0x0A);
// 3
while (!(i2cSensorRead(0x30) & 0x08)) // Wait for transaction (SCO is bit 3)
sleep();
// 4
int32_t pressureData = 0;
int8_t dataAddr = 0x06;
for(int i = 0; i < 3; i++)
pressureData = pressureData << 8;
pressureData |= i2cSensorRead(dataAddr++);
return pressureData;
希望这能为您指明正确的方向!祝你好运
【讨论】:
以上是关于XGZP6859D 带 Stm32f302R8 的压力传感器的主要内容,如果未能解决你的问题,请参考以下文章
STM32F103学习笔记(11)——压力传感器GZP6859D使用
STM32F103学习笔记(11)——压力传感器GZP6859D使用
STM32F103R8T6系统移植到STM32F103RCT6