基于STM32F103—XGZP6847D压力传感器+串口打印
- 基本介绍
- 概述
- 产品特点
- 引脚的连接 (IIC通信)
- 名称含义的介绍
- I2C通信协议 (设备地址是 `0x6D`)
- 寄存器描述
- 工作模式
- 寄存器
- Reg0x30(测量命令寄存器)
- Reg0xA5
- Reg0xA6
- 模式说明
-
- 代码编写
-
- 最终效果
基本介绍
概述
XGZP6847D 型压力传感器尺寸小、易安装,广泛用于医疗电子、汽车电子、消费电子、运动健身器材、
物联网等领域
产品特点
![在这里插入图片描述](https://img-blog.csdnimg.cn/c7e5baf6166e4de5af52a7612783315d.png)
引脚的连接 (IIC通信)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a1bcc33ace084c58af68e8fc243a18ac.png)
名称含义的介绍
![在这里插入图片描述](https://img-blog.csdnimg.cn/9029ca3f449f4bf9b7deec9742f27781.png)
I2C通信协议 (设备地址是 0x6D
)
![在这里插入图片描述](https://img-blog.csdnimg.cn/60e359401324405e81d951650da1cc1d.png)
寄存器描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/f7740e7e26df4cb786be06319efe5660.png)
工作模式
寄存器
Reg0x30(测量命令寄存器)
- Measurement_control<2:0>(
工作模式
) 010b
,组合采集模式(一次温度采集后立即进行一次传感器压力信号采集)。011b
,休眠工作模式(定期的执行一次组合采集模式,间隔时间由‘sleep_time’决定)Sleep_time<7:4>
: 0001:62.5ms, 0010:125ms … 1111: 1s, 0000:无意义。(仅在休眠工作模式下有效)Sco
:数据采集完成标志位。1, 开始数据采集;0,采集结束(休眠工作模式除外)。
Reg0xA5
Aout_config<7:4>
:模拟输出配置(建议保留默认配置)LDO_config
:内部 LDO 配置。0,配置成 1.8V;1,配置成 3.6VUnipolar
:0,ADC 原始数据以有符号数格式输出;1: ADC 原始数据以无符号格式输出。(仅当‘Data_out_control’=1 有效)Data_out_control
:0,输出校准数据;1,输出 ADC 原始数据(默认配置为 0)Diag_on
:0,关闭诊断功能;1,开启诊断功能(默认开启)
Reg0xA6
Input Swap
:在传感器内部交换差分信号极性。Gain_P<5:3>
:采集传感器信号时 PGA 增益,000:增益=1X。001:增益=2X。010:增益=4X。011:增益=8X。100: 增益=16X。101:增益=32X。110: 增益=64X。111:增益=128X。OSR_P<2:0>
:采集传感器信号时的过采样,000:1024X, 001:2048X, 010:4096X, 011:8192X,100:256X, 101:512X, 110:16384X, 111:32768X。
模式说明
组合数据采集模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/dd43b177df2f4964b9c5057dc6a30dd7.png)
休眠数据采集模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/9c59e663cfa5458fa78072cd7bc6cfbc.png)
代码编写
等待模式可读
unsigned char xgzp6847_wait(void)
{
unsigned char ack, data, status;
ack = xgzp6847_write_byte(0x30, 0x0A);
if (ack)
{
return 1;
}
ack = xgzp6847_read_byte(0x30, &data);
if (ack)
{
return 1;
}
status = data & 0x08;
if (status)
{
delay_ms(20);
}
return 0;
}
读取压力值
int xgzp6847_read_pressure(void)
{
int pressure = 0;
unsigned char pressure_H, pressure_M, pressure_L;
xgzp6847_read_byte(DATA_MSB_ADDR, &pressure_H);
xgzp6847_read_byte(DATA_CSB_ADDR, &pressure_M);
xgzp6847_read_byte(DATA_LSB_ADDR, &pressure_L);
pressure |= (unsigned int)pressure_H << 16;
pressure |= (unsigned int)pressure_M << 8;
pressure |= (unsigned int)pressure_L << 0;
if (pressure > 8388608)
{
pressure = (pressure - 16777216) / 64;
}
else
{
pressure = pressure / 64;
}
return pressure;
}
读取温度值
short xgzp6847_read_temperature(void)
{
unsigned char temperature_H, temperature_L;
unsigned short temperature = 0;
xgzp6847_read_byte(TEMP_MSB_ADDR, &temperature_H);
xgzp6847_read_byte(TEMP_LSB_ADDR, &temperature_L);
temperature |= (unsigned short)temperature_H << 8;
temperature |= temperature_L << 0;
if (temperature > 32786)
{
temperature = (temperature - 65536) / 256;
}
else
{
temperature = temperature / 256;
}
return temperature;
}
主程序
void xgzp6847_handler(void)
{
int pressure = 0;
short temperature = 0;
pressure = xgzp6847_read_pressure();
temperature = xgzp6847_read_temperature();
printf("pressure: %6d temperature:%3d\r\n", pressure, temperature);
}
int main()
{
usart1_init(115200);
xgzp6847_init();
while(1)
{
if (xgzp6847_wait())
{
continue;
}
xgzp6847_handler();
delay_ms(100);
}
}
最终效果
print("需要代码 +meQQ 844797079")
![在这里插入图片描述](https://img-blog.csdnimg.cn/7aa4dfc0fec54ccb9b5d3dfdf5027ded.png)
如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)