///
//作者: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 调试通过相关推荐

  1. 【应用实例】单片机PM2.5空气监测仪--攀藤G5激光PM2.5传感器

    一.功能简述 基于Arduino控制,利用攀藤G5激光传感器测量PM值,DHT11温湿度传感器测量温湿度,1602LCD显示数据.外接一个继电器,当达到一定污染值时启动净化风扇. 焊接之后大概是这个样 ...

  2. 当攀藤 PM2.5 传感器遇上 RT-Thread(国产实时线程操作系统内核)(转载)

    概述 攀藤 PMS 系列传感器 攀藤 PMS 系列传感器是基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度 ...

  3. 当攀藤 PM2.5 传感器遇上 RT-Thread

    概述 攀藤 PMS 系列传感器 攀藤 PMS 系列传感器是基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度 ...

  4. 基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现

    说明:此文章提供了一种基于TencentOS-tiny的串口数据解析思路及实现,感谢戴大神最初写的源码,这种思路同样可以实现AT框架.基于串口的GPS数据解析等等. 1. PM2.5传感器 本文使用的 ...

  5. 攀藤PM2.5传感器使用定义串口usb数据接收

    攀藤PM2.5传感器使用定义串口usb数据接收 数据使用的是16进制的,所以必须用十六进制显示, 对应可能标记是0x, 比如0X42, 前两个是帧头,后两个是帧未, 中间是13组可用于显示的数据, 对 ...

  6. 个人物联网(目前用到了树莓派、PMS7003攀藤g7传感器、DHT11温湿度传感器)

    上周空气不好,突发奇想要搞个个人物联网系统,检测生存环境.手头有树莓派.NodeMCU esp8266.DHT11温湿度传感器.pm2.5检测需要专门的传感器,本以为也就几块钱,结果发现淘宝还挺贵.在 ...

  7. python连接传感器_关于树莓派Pi2通过UART连接攀藤G5传感器的python

    1.准备工作:树莓派Pi2板子,攀藤G5传感器 关于树莓派40pin口网上很多,我们只了解与攀藤G5连接的问题 (1)攀藤G5pin1(VCC5v)要注意是5V,有很多板子接的是3V,而树莓派的pin ...

  8. 思岚科技发布业内首款激光建图传感器Slamtec Mapper

    7月24日,在机器人定位导航领域已取得显著成就的思岚科技,正式对外发布了业内首款全新品类的激光建图传感器Slamtec Mapper,Slamtec Mapper是一个集实时地图构建和定位为一体的全新 ...

  9. 关于树莓派Pi2通过UART连接攀藤G5传感器的python

    1.准备工作:树莓派Pi2板子,攀藤G5传感器 关于树莓派40pin口网上很多,我们只了解与攀藤G5连接的问题 (1)攀藤G5pin1(VCC5v)要注意是5V,有很多板子接的是3V,而树莓派的pin ...

最新文章

  1. hbase 问题整理
  2. 一个可供参考的Java高并发异步应用案例--转
  3. 【漫画】程序猿 996 会猝死,而企业家 007 却不会?
  4. 异常处理try...catch...throw
  5. linux进程管理类命令大全,Linux进程管理类命令
  6. html 控制文字的标签,html里面有一个控制文字滚动的标签marquee,比较有用。
  7. Python标准库参考-sched
  8. css中的一些选择器的用法总结
  9. 华泰证券首席培训张继强 债市分析框架PPT
  10. “5G+工业互联网”重点企业,苏州真趣成功入选
  11. 基于springboot实现宠物医院管理系统
  12. 「捷径」解读:iOS 自动化的 3.0 时代
  13. Geek 极客大挑战2021 web
  14. java itextpdf 5 基础知识
  15. MQ(message queue)使用 Spring整合 MQ下载 五分钟上手使用
  16. win7下怎么配置ODBC数据源
  17. 计算机制作效果图常用软件有,计算机园林效果图有哪些绘制过程?
  18. 环信多人音视频会议功能实现
  19. SQL server 如何建立两个表的关系
  20. YouTube-8M 数据集介绍与使用总结

热门文章

  1. linux 网络安全工具,常用的Linux网络安全工具简介
  2. 国内图像处理相关期刊
  3. SQLMap用户常用命令——1
  4. Android版疯狂填字第三关,iOS/安卓版《疯狂填字》答案攻略第三十八关
  5. [转载]用JBuilder 2005实现重构之认识重构
  6. XCTF mobile新手区解题记录(WP)以及一些总结和思考
  7. 【华为机试真题 C++】高矮个子排队-100
  8. springboot基于web的传染病信息管理系统的设计与实现毕业设计-附源码221124
  9. 软件工程----UML建模
  10. Unity 接入高德开放API - 天气查询