激光 pm2.5传感器 攀藤科技 stm32 调试通过
///
//作者:zhl
//时间:2015,4,2
//程序:夏普二代PM传感器串口读取
//声明:未经应许,不得他用
///
#include "stm32f10x_lib.h"
#include "stdio.h"
#include "delay.h"
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
u8 Uart1_Rx;
u8 Uart1_Tx;
u8 Uart1_Sta=0;
u8 Uart1_Buffer[];
u8 Uart1_Len;
u8 tx1;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
void USART1_SendByte(u8 ch);
void RCC_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 时钟参数初始化设置
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE );
}
void GPIO_Configuration(void)
{
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // 选中管脚9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最高输出速率50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // 选择A端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //选中管脚10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //选择A端口
}
void NVIC_Config()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void USART1_Configuration(void)
{
USART_InitStructure.USART_BaudRate = 9600; // 波特率为:115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 8位数据
USART_InitStructure.USART_StopBits = USART_StopBits_1; // 在帧结尾传输1个停止位
USART_InitStructure.USART_Parity = USART_Parity_No ; // 奇偶失能
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 硬件流控制失能
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 发送使能+接收使能
/* Configure USART1 basic and asynchronous paramters */
USART_Init(USART1, &USART_InitStructure);
/* Enable USART1 */
USART_ClearFlag(USART1, USART_IT_RXNE); //清中断,以免一启用中断后立即产生中断
USART_ITConfig(USART1,USART_IT_RXNE, ENABLE); //使能USART1中断源
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_Cmd(USART1, ENABLE); //USART1总开关:开启
}
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
/*
********************************************************************************
** 函数名称 : void Delayms(vu32 m)
** 函数功能 : 长延时函数 m=1,延时1ms
** 输 入 : 无
** 输 出 : 无
** 返 回 : 无
********************************************************************************
*/
void Delayms(vu32 m)
{
u32 i;
for(; m != 0; m--)
for (i=0; i<50000; i++);
}
//************************************************
//uchar zhuan (uchar temp) //转化为十进制数
//{
//
//uchar bai,shi,ge;
//bai=temp/100;
//temp=temp%100;
//shi=temp/10;
//ge=temp%10;
//return (bai*100+shi*10+ge);
//}
//
//float TPM() //1050数据处理
//{ pmt=pm;
// if(pm5==(pm1+pm2+pm3+pm4)) //数据校验
// {
// pm=(zhuan(pm1)*256+zhuan(pm2))/204.8;
// return pm;
// }
//
// return pmt; //如果一组数据没有传完,返回原值
//
//}
int main(void)
{
u8 a,b,c;
RCC_Config();
GPIO_Configuration();
USART1_Configuration();
NVIC_Config();
// delay_init(72);
while(1)
{
if(Uart1_Sta)
{
// for(tx1=0;tx1 <= Uart1_Len;tx1++,Uart1_Tx++)
// USART1_SendByte(Uart1_Buffer[Uart1_Tx]);//发送数据
// if(Uart1_Buffer[Uart1_Tx+1]<0x40&&Uart1_Buffer[Uart1_Tx+2]>0x00)
// {
b=Uart1_Buffer[Uart1_Tx+12];
c=Uart1_Buffer[Uart1_Tx+13];
// }
Uart1_Rx=0; //初始化
Uart1_Tx=0;
Uart1_Sta=0;
}
printf("\n\r--%d ug/m3--\n\r" ,(u16)b*256+(u16)c);
Delay(0xfffff);
// printf("%d",i);
}
}
void USART1_SendByte(u8 ch)
{
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, ch);
}
void USART1_IRQHandler()
{
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET);//中断产生
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
Uart1_Buffer[Uart1_Rx] = USART_ReceiveData(USART1);
Uart1_Rx++;
Uart1_Rx &= 0xff;
}
if(Uart1_Buffer[Uart1_Rx-1] == 0x42)//头
Uart1_Tx = Uart1_Rx-1;
if((Uart1_Buffer[Uart1_Tx] == 0x42)&&(Uart1_Buffer[Uart1_Tx+1]==0x4d)&&((Uart1_Rx-1- Uart1_Tx)==31))//检测到头的情况下检测到尾
{
Uart1_Len = Uart1_Rx-1- Uart1_Tx; //长度
Uart1_Sta=1; //标志位
}
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET) //溢出
{
USART_ClearFlag(USART1,USART_FLAG_ORE); //读SR
USART_ReceiveData(USART1); //读DR
}
}
/* 重定义fputc函数 如果使用MicroLIB只需要重定义fputc函数即可 */
int fputc(int ch, FILE *f)
{
/* Place your implementation of fputc here */
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{
}
USART_SendData(USART1, ch);
return ch;
}
激光 pm2.5传感器 攀藤科技 stm32 调试通过相关推荐
- 【应用实例】单片机PM2.5空气监测仪--攀藤G5激光PM2.5传感器
一.功能简述 基于Arduino控制,利用攀藤G5激光传感器测量PM值,DHT11温湿度传感器测量温湿度,1602LCD显示数据.外接一个继电器,当达到一定污染值时启动净化风扇. 焊接之后大概是这个样 ...
- 当攀藤 PM2.5 传感器遇上 RT-Thread(国产实时线程操作系统内核)(转载)
概述 攀藤 PMS 系列传感器 攀藤 PMS 系列传感器是基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度 ...
- 当攀藤 PM2.5 传感器遇上 RT-Thread
概述 攀藤 PMS 系列传感器 攀藤 PMS 系列传感器是基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度 ...
- 基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现
说明:此文章提供了一种基于TencentOS-tiny的串口数据解析思路及实现,感谢戴大神最初写的源码,这种思路同样可以实现AT框架.基于串口的GPS数据解析等等. 1. PM2.5传感器 本文使用的 ...
- 攀藤PM2.5传感器使用定义串口usb数据接收
攀藤PM2.5传感器使用定义串口usb数据接收 数据使用的是16进制的,所以必须用十六进制显示, 对应可能标记是0x, 比如0X42, 前两个是帧头,后两个是帧未, 中间是13组可用于显示的数据, 对 ...
- 个人物联网(目前用到了树莓派、PMS7003攀藤g7传感器、DHT11温湿度传感器)
上周空气不好,突发奇想要搞个个人物联网系统,检测生存环境.手头有树莓派.NodeMCU esp8266.DHT11温湿度传感器.pm2.5检测需要专门的传感器,本以为也就几块钱,结果发现淘宝还挺贵.在 ...
- python连接传感器_关于树莓派Pi2通过UART连接攀藤G5传感器的python
1.准备工作:树莓派Pi2板子,攀藤G5传感器 关于树莓派40pin口网上很多,我们只了解与攀藤G5连接的问题 (1)攀藤G5pin1(VCC5v)要注意是5V,有很多板子接的是3V,而树莓派的pin ...
- 思岚科技发布业内首款激光建图传感器Slamtec Mapper
7月24日,在机器人定位导航领域已取得显著成就的思岚科技,正式对外发布了业内首款全新品类的激光建图传感器Slamtec Mapper,Slamtec Mapper是一个集实时地图构建和定位为一体的全新 ...
- 关于树莓派Pi2通过UART连接攀藤G5传感器的python
1.准备工作:树莓派Pi2板子,攀藤G5传感器 关于树莓派40pin口网上很多,我们只了解与攀藤G5连接的问题 (1)攀藤G5pin1(VCC5v)要注意是5V,有很多板子接的是3V,而树莓派的pin ...
最新文章
- hbase 问题整理
- 一个可供参考的Java高并发异步应用案例--转
- 【漫画】程序猿 996 会猝死,而企业家 007 却不会?
- 异常处理try...catch...throw
- linux进程管理类命令大全,Linux进程管理类命令
- html 控制文字的标签,html里面有一个控制文字滚动的标签marquee,比较有用。
- Python标准库参考-sched
- css中的一些选择器的用法总结
- 华泰证券首席培训张继强 债市分析框架PPT
- “5G+工业互联网”重点企业,苏州真趣成功入选
- 基于springboot实现宠物医院管理系统
- 「捷径」解读:iOS 自动化的 3.0 时代
- Geek 极客大挑战2021 web
- java itextpdf 5 基础知识
- MQ(message queue)使用 Spring整合 MQ下载 五分钟上手使用
- win7下怎么配置ODBC数据源
- 计算机制作效果图常用软件有,计算机园林效果图有哪些绘制过程?
- 环信多人音视频会议功能实现
- SQL server 如何建立两个表的关系
- YouTube-8M 数据集介绍与使用总结
热门文章
- linux 网络安全工具,常用的Linux网络安全工具简介
- 国内图像处理相关期刊
- SQLMap用户常用命令——1
- Android版疯狂填字第三关,iOS/安卓版《疯狂填字》答案攻略第三十八关
- [转载]用JBuilder 2005实现重构之认识重构
- XCTF mobile新手区解题记录(WP)以及一些总结和思考
- 【华为机试真题 C++】高矮个子排队-100
- springboot基于web的传染病信息管理系统的设计与实现毕业设计-附源码221124
- 软件工程----UML建模
- Unity 接入高德开放API - 天气查询