赞
踩
PMS5003是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集
并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而
换算成为质量浓度,并以通用数字接口形式输出。本传感器可入各种与空气中
悬浮颗粒物浓度相关的仪器仪表或环境改善设备,为其提供及时准确的浓度数
据。
读取的数据:
逻辑是:
1、初始化串口和定时器10ms中断
2、循环读取一帧数据到rev_pm25_bufferdata
3、在主函数解析数据rev_pm25_bufferdata
4、最终的pm2.5数值就是pm25_value
使用pm25_value 的数据即可。
#include "sys.h" #include "delay.h" #include "usart.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "led.h" #include "timer.h" char rev_pm25_bufferdata[50]; char rev_pm25_data_cnt = 0; char rev_pm25_flag = 0; char rev_pm25_timercnt = 0; char rev_pm25_sucess = 0; uint32_t pm25_value = 0; uint32_t pm25_verify = 0; unsigned char pm25_verify_cnt = 0; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); delay_ms(500); uart_init(9600); TIM4_Int_Init(99, 7199); /* 10Khz的计数频率,计数到50为10ms */ TIM_Cmd(TIM4, ENABLE); /* 使能TIMx 开始计时 */ while (1) { delay_ms(5); if (rev_pm25_sucess == 1) { rev_pm25_sucess = 0; if ((rev_pm25_bufferdata[0] == 0x42) && (rev_pm25_bufferdata[1] == 0x4d)) { pm25_verify = 0; for (pm25_verify_cnt = 0; pm25_verify_cnt < 30; pm25_verify_cnt++) { pm25_verify += rev_pm25_bufferdata[pm25_verify_cnt]; } if (pm25_verify == (rev_pm25_bufferdata[30] * 256 + rev_pm25_bufferdata[31])) { pm25_value = rev_pm25_bufferdata[6] * 256 + rev_pm25_bufferdata[7]; } } } } } // 10ms void TIM4_IRQHandler(void) /* TIM4中断 */ { if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) /* 检查TIM4更新中断发生与否 */ { TIM_ClearITPendingBit(TIM4, TIM_IT_Update); /* 清除TIM4更新中断标志 */ //10ms一帧 if (rev_pm25_flag == 1) { rev_pm25_timercnt++; } if (rev_pm25_timercnt >= 4) { rev_pm25_timercnt = 0; rev_pm25_flag = 0; //数据处理标志 rev_pm25_sucess = 1; } } } //A9模块 void USART1_IRQHandler(void) /* 串口1中断服务程序 */ { u8 receiveData; if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) /* 接收中断(接收到的数据必须是0x0d 0x0a结尾) */ { receiveData = USART_ReceiveData(USART1); /* 读取接收到的数据 */ if (rev_pm25_flag == 0) { rev_pm25_data_cnt = 0; rev_pm25_bufferdata[rev_pm25_data_cnt++] = receiveData; rev_pm25_flag = 1; } else if (rev_pm25_flag == 1) { rev_pm25_bufferdata[rev_pm25_data_cnt++] = receiveData; if (rev_pm25_data_cnt >= 50) { rev_pm25_data_cnt = 0; } } } }
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。