草庐IT

基于STM32F103——XGZP6847D压力传感器+串口打印

皮卡丘吉尔 2024-02-26 原文

基于STM32F103—XGZP6847D压力传感器+串口打印

基本介绍

概述

XGZP6847D 型压力传感器尺寸小、易安装,广泛用于医疗电子、汽车电子、消费电子、运动健身器材、
物联网等领域

产品特点

引脚的连接 (IIC通信)

名称含义的介绍

I2C通信协议 (设备地址是 0x6D)

寄存器描述

工作模式

寄存器

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.6V
  • Unipolar: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。

模式说明

组合数据采集模式

休眠数据采集模式

代码编写

  • 这里我是选择 组合采集模式

    • Measurement_control<2:0>(工作模式) 设置为010b
  • 组合模式读取数据按照如下指令顺序进行操作(其他模式参考 0x30 寄存器定义相应调整即可):

    • 1、发送指令 0x0A(即 00001010)到 0x30 寄存器进行一次温度采集,一次压力数据采集。
    • 2、读取 0x30 寄存器地址,若 Sco 位为 0 代表采集结束,可以读取数据, 否则等待延迟 20ms 读取。
    • 3、读取 0x06、0x07、0x08 三个寄存器地址数据构成 24 位 AD 值(压力数据 AD 值),读取 0x09、0x0A
      两个寄存器地址数据构成 16 位 AD 值(温度数据 AD 值)。

等待模式可读

/**
 *	描述: XGZP6847模块等待可读压力和温度
 *	参数: 无
 * 	返回: 0:可读 1:不可读
 */
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;
	}
	
	/* 若 Sco 位为 0 代表采集结束 否则等待延迟 20ms 读取 */
	status = data & 0x08;
	if (status)
	{
		delay_ms(20);
	}	

	return 0;	
}

读取压力值

/**
 *	描述: XGZP6847模块读取压力
 *	参数: 无
 * 	返回: 读取到的压力(Pa)
 */
int xgzp6847_read_pressure(void)
{

	int pressure = 0;
	unsigned char pressure_H, pressure_M, pressure_L;
	
	xgzp6847_read_byte(DATA_MSB_ADDR, &pressure_H);	/* <23:16> */
	xgzp6847_read_byte(DATA_CSB_ADDR, &pressure_M);	/* <15:8> */
	xgzp6847_read_byte(DATA_LSB_ADDR, &pressure_L);	/* <7:0> */

	pressure |= (unsigned int)pressure_H << 16;
	pressure |= (unsigned int)pressure_M << 8;
	pressure |= (unsigned int)pressure_L << 0;

	
	/* 超过 8388606 为负压值 */
	if (pressure > 8388608)	//0x800000
	{
		pressure = (pressure - 16777216) / 64;
	}
	else
	{
		pressure = pressure / 64;
	}
	
	return pressure;	//单位为 Pa
}

读取温度值

/**
 *	描述: XGZP6847模块读取温度
 *	参数: 无
 * 	返回: 读取到的温度
 */
short xgzp6847_read_temperature(void)
{
	unsigned char temperature_H, temperature_L;
	unsigned short temperature = 0;

	xgzp6847_read_byte(TEMP_MSB_ADDR, &temperature_H);	/* <15:8> */
	xgzp6847_read_byte(TEMP_LSB_ADDR, &temperature_L);	/* <7:0> */

	temperature |= (unsigned short)temperature_H << 8;
	temperature |= temperature_L << 0;

	if (temperature > 32786)	//0x8000
	{
		temperature = (temperature - 65536) / 256;
	}
	else
	{
		temperature = temperature / 256;
	}
	
	return temperature;	/* °C */

}

主程序

/**
 *	描述: 读取压力和温度 并串口输出
 *	参数: 无
 *	返回: 无	 
 */
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);	//串口1初始化   用于输出
	xgzp6847_init();

	while(1)
	{
		if (xgzp6847_wait())
		{
			continue;
		}
		xgzp6847_handler();	
		delay_ms(100);	/* 只是防止打印太快我看不清 */
	}  
}

最终效果

print("需要代码 +meQQ 844797079")

如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈

有关基于STM32F103——XGZP6847D压力传感器+串口打印的更多相关文章

  1. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  2. STM32的HAL和LL库区别和性能对比 - 2

    LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L

  3. 蓝桥杯 stm32 MCP4017 - 2

    本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B&#

  4. STM32 OTA应用开发——通过USB实现OTA升级 - 2

    STM32OTA应用开发——通过USB实现OTA升级目录STM32OTA应用开发——通过USB实现OTA升级前言1环境搭建2功能描述3BootLoader的制作4APP的制作5烧录下载配置6运行测试结束语前言什么是OTA?百度百科:空中下载技术(Over-the-AirTechnology;OTA),是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。经过公网多年的应用与发展,已十分成熟,网络运营商通过OTA技术实现SIM卡远程管理,还能提供移动化的新业务下载功能。实际上,现在我们所说的OTA比百度百科的定义还要更广泛,OTA的形式已经不再局限于手机和SIM卡,只要涉及

  5. 【毕业设计】基于单片机的智能温控农业大棚系统 - 物联网 stm32 - 2

    文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室

  6. STM32+ESP8266接入云(3) - 2

    解析数据     进入阿里云的IOTStdio,点击新建项目。         新建项目后点击新建Web应用。名称     应用名称随便填写              创建完成后我们进入应用。    在左侧组件处拖入一个指示灯和一个开关。     点击指示灯组件,点击配置数据源     选择我们的产品、数据、和属性。     我们还可以配置开和关的显示颜色。    点击按钮,配置交互动作。     选择设备和属性,设置值位置点击数据来源,选择组件值     配置完成后进入预览,点击按钮,在esp8266就会收到来自平台的json格式的数据,MCU端需要做的就是解析来自平台的数据,进而达到控制下

  7. STM32F103C8T6编码器电机的使用 - 2

    目录前言一、定时器部分和按键部分二、PWM调速三、电机驱动部分​​​​​​​三、编码器接口部分(测速)四.主函数总结​​​​​​​推荐STM32学习课程:[6-8]编码器接口测速_哔哩哔哩_bilibili[6-8]编码器接口测速是STM32入门教程-2022持续更新中的第20集视频,该合集共计30集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV1th411z7sn/?p=20&spm_id_from=pageDriver&vd_source=ed36b2700bbc2bac7746c270bc391540OLED显示屏代码

  8. STM32F103C8T6—库函数应用I2C/SPI驱动OLED显示中文、字符串 - 2

    文章目录1.I2C与SPI通信协议对比2.四脚OLED与六脚OLED3.I2C驱动OLED显示oled.h&oled.c:汉字取模&oledfont.h:main.c显示示例:连线方法:4.SPI驱动OLED显示1.I2C与SPI通信协议对比I2C(Inter-IntegratedCircuit)SPI(SerialPeripheralInterface)传输方式半双工全双工传输速度低速,100Kbps----4Mbps高速,30Mbps以上几线制4线制:VCC,GND,SCL,SDA6/7线制:VCC,GND,SCLK(D0),MOSI(D1/SDA),DC,CS/SS主从模式多主机总线,通

  9. 【STM32】LCD液晶显示 - 2

    🐱作者:一只大喵咪1201🐱专栏:《STM32学习》🔥格言:你只管努力,剩下的交给时间!LCD显示📺LCD简介📺TFTLCD驱动原理📺ILI9341液晶控制器简介🃏液晶屏的信号线及8080时序📺使用STM32的FSMC模拟8080接口时序📺硬件连接📺代码实现📺字符显示🃏英文字符显示🃏英文字符串的显示📺总结📺LCD简介显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有CRT显示器、液晶显示器、LED点阵显示器及OLED显示器。本喵这里使用的是CLD显示器,也就是液晶显示器。液晶显示器,简称LCD(LiquidCrystalDispla

  10. STM32寻迹小车 - 2

    第一次发博客,以及第一次坐智能小车,可能有很多瑕疵和不足。一、项目时间:2022.11.19~11.22二、实现效果:小车进行循迹行驶三、使用模块:STM32F103RCT6核心板*1L298N电机驱动模块*2TCRT5000L五路红外循迹传感器模块*1DC3V-6V黄色直流减速电机-TT*4锂电池组电源12V*2OLED屏幕-四针*1LM2596降压模块(新款DC-DC可调稳压电源模块)*1DC-DC12V装3.3v5v12v电源模块 四、基础使用方式:OLED显示循迹模块反馈状态【例如:10001】电机驱动1【采用左右轮倒转实现拐弯】电机驱动2【1块控制左轮,一块控制右轮】循迹模式【转角力

随机推荐