首页 LMVE论坛 资讯 插画 时光机 我的社区 用户 搜索

[HAL库]串口读取PMS7003M(数字式通用颗粒物浓度传感器 )

无闻风
发表于 2019-07-26 13:55:27
0
208

先用cubemx配置好一个串口

记得把中断勾上

开始写代码:

s7003.h

#include "main.h"
#include "stm32l0xx_hal.h"

uint32_t get_cf_pm_2_5();
uint32_t get_cf_pm_1();

uint32_t get_air_pm_2_5();
uint32_t get_air_pm_1();

s7003.c

#include "s7003.h"
#include "12864.h"

uint8_t RxData1[32];
extern UART_HandleTypeDef huart1;

struct
{
	uint32_t CF_PM1;
	uint32_t CF_PM2_5;
	uint32_t CF_PM10;

	uint32_t Air_PM1;
	uint32_t Air_PM2_5;
	uint32_t Air_PM10;

	uint32_t L_um3;
	uint32_t L_um5;
	uint32_t L_1um;
	uint32_t L_2um5;
	uint32_t L_5um;
	uint32_t L_10um;
}GetAirdata;

void get_pm()
{
		static long ti;
		char a;
			HAL_UART_Receive_IT(&huart1,RxData1,32);	
			if(RxData1[0] == 0x42 && RxData1[1] == 0x4d)
			{
				//printf_str(0,0,0,"yes",1);
				GetAirdata.CF_PM1 = RxData1[4] << 8 | RxData1[5];
				GetAirdata.CF_PM2_5 = (uint8_t)(RxData1[6] << 8 | RxData1[7]);
				GetAirdata.CF_PM10 = RxData1[8] << 8 | RxData1[9] + 48;

				GetAirdata.Air_PM1 = RxData1[10] << 8 | RxData1[11] + 48;
				GetAirdata.Air_PM2_5 = RxData1[12] << 8 | RxData1[13] + 48;
				GetAirdata.Air_PM10 =RxData1[14] << 8 | RxData1[15];

				GetAirdata.L_um3 = RxData1[16] << 8 | RxData1[17];
				GetAirdata.L_um5 = RxData1[18] << 8 | RxData1[19];
				GetAirdata.L_1um = RxData1[20] << 8 | RxData1[21];
				GetAirdata.L_2um5 = RxData1[22] << 8 | RxData1[23];
				GetAirdata.L_5um = RxData1[24] << 8 | RxData1[25];
				GetAirdata.L_10um = RxData1[26] << 8 | RxData1[27];
				for(char num=0;num<32;num++)
				{
				    RxData1[num] = 0;	
				}


			}


}

uint32_t get_cf_pm_2_5()
{
	get_pm();
	return GetAirdata.CF_PM2_5;
}
uint32_t get_cf_pm_1()
{
	get_pm();
	return GetAirdata.CF_PM1;
}

uint32_t get_air_pm_2_5()
{
	get_pm();
	return GetAirdata.Air_PM2_5;
}
uint32_t get_air_pm_1()
{
	get_pm();
	return GetAirdata.Air_PM1;
}

最后修改 2019-07-26 16:05:00
0
208
用户评论
一起折腾