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使用

开源硬件STM32F030R8T6系统板

STM32F103R8T6系统移植到STM32F103RCT6

灵动微MM32F103R8T6国产32位MCU可替代STM32F103R8T6用于IO-Link模块

NUCLEO STM32F334R8 上的 STMCubeIDE,新项目:FreeRTOS 硬故障