7,KQM模块的驱动
1,查资料,查模块的通信接口(单片机和模块之间采用什么方式通信)硬件接口,驱动方式(串口驱动用串口发送接收PC10,PC11)
只用了三个脚:VCC GND TX,
RX和F没有用
传输数据,本项目中不要用串口3,串口3是留给wifi的,在硬件上已经固定了, 所以其他的任选一个用串口4传输数据,
KQM.c
#include "kqm.h"
#include "string.h"
//自己能写代码并理解
//voc PPM ,甲醛mg/m3, co2PPM
KQM kqm = {0};
//1.IO初始化
//2.外设初始化
//3.中断初始化
void KQM_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDef GPIO_InitStructure = {0};//定义结构体 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//推挽 GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空 GPIO_Init(GPIOC, &GPIO_InitStructure); //2.外设初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); USART_InitTypeDef USART_InitStructure = {0}; USART_InitStructure.USART_BaudRate = 9600; //波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//数据位 USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位 USART_InitStructure.USART_Parity = USART_Parity_No; //校验USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流失能USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(UART4, &USART_InitStructure); USART_Cmd(UART4, ENABLE); //3.中断初始化NVIC_InitTypeDef NVIC_InitStructure = {0}; NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;// 0-3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//0-3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //4,中断源USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);//开启串口 接收中断USART_ITConfig(UART4,USART_IT_IDLE,ENABLE);//串口空闲中断
}//模块是主动传输数据,不需要写数据发送函数,用中断接收数据,所以也不需要写接收函数//中断服务函数
void UART4_IRQHandler(void)
{if(USART_GetITStatus(UART4,USART_IT_RXNE) == SET){ kqm.rxbuff[kqm.rxlen] = USART_ReceiveData(UART4);kqm.rxlen++;USART_ClearITPendingBit(UART4,USART_IT_RXNE);}//空闲中断在UART一段时间没有接收到数据时触发,表示接收完成或空闲状态if(USART_GetITStatus(UART4,USART_IT_IDLE) == SET){uint8_t data = USART_ReceiveData(UART4);//接收数据//UART4的接收缓冲区已经处理完毕或达到空闲状态 kqm.rxflag=1;}
}//解析接收的数据// 1.判断数据接收完成
// 2.判断数据的正确性(校验)
// 3.开始解析数据#include "led.h"
#include "stdio.h"
void KQMDataAnaly(void)
{if(kqm.rxflag == 1){//在预热阶段模块传送所有数据的高位以及低位字节为0xff,当接收到此数据时可视为预热数据,不予处理//判断是否是预热阶段if(kqm.rxbuff[1]== 0xff && kqm.rxbuff[2]== 0xff && kqm.rxbuff[3]== 0xff && kqm.rxbuff[4]== 0xff && kqm.rxbuff[5]== 0xff && kqm.rxbuff[6]== 0xff){memset(kqm.rxbuff,0,10);kqm.rxlen=0;kqm.rxflag=0;return ;} uint8_t checkval =(uint8_t)(kqm.rxbuff[0]+kqm.rxbuff[1]+kqm.rxbuff[2]+kqm.rxbuff[3]+kqm.rxbuff[4]+kqm.rxbuff[5]+kqm.rxbuff[6]);if(checkval == kqm.rxbuff[7]) //校验{kqm.voc = (kqm.rxbuff[1]<<8|kqm.rxbuff[2])*0.1;//ppmkqm.hcho = (kqm.rxbuff[3]<<8|kqm.rxbuff[4])*0.01;//mg/m3kqm.co2 = (kqm.rxbuff[5]<<8|kqm.rxbuff[6])*0.1;//ppm//例如:rxbuff[1]:0000 0011// rxbuff[2]: 1011 1001//rxbuff[1]<<8得到rxbuff[1]:0000 0011 0000 0000//rxbuff[1]<<8|rxbuff[2]得voc:0000 0011 1011 1001 memset(kqm.rxbuff,0,10);kqm.rxlen=0;kqm.rxflag=0;printf("voc:%.1f,hcho:%.2f,co2:%.1f\r\n",kqm.voc,kqm.hcho,kqm.co2); }else//校验失败{memset(kqm.rxbuff,0,10);kqm.rxlen=0;kqm.rxflag=0;}}
}
kQm.h
#ifndef _KQM_H_
#define _KQM_H_#include "stm32f10x.h"typedef struct
{uint8_t rxbuff[10]; //rxbuff[1]一个数占8位uint8_t rxlen;uint8_t rxflag;float voc;float hcho;float co2;}KQM;extern KQM kqm;void KQM_Init(void);
void KQMDataAnaly(void);
#endif
相关文章:
![](https://img-blog.csdnimg.cn/direct/b27b929e7d9f4ed7b34e43c241aed1db.png)
7,KQM模块的驱动
1,查资料,查模块的通信接口(单片机和模块之间采用什么方式通信)硬件接口,驱动方式(串口驱动用串口发送接收PC10,PC11) 只用了三个脚:VCC GND T&…...
![](https://img-blog.csdnimg.cn/direct/585710b9f3dd4d2a95e12ce2358b4942.jpeg#pic_center)
软件验收测试报告模版分享,如何获取专业的验收测试报告?
软件验收测试报告是对软件开发过程中的最后一步确认,通过对软件进行全面、系统的检查和测试,形成一份详细的报告,以评估软件是否满足用户需求和设计要求。验收测试报告起到了非常重要的作用,不仅可以帮助开发者了解软件开发的质量…...
![](https://img-blog.csdnimg.cn/direct/3fc9d7c395044c16a753af4ee9818e4a.png)
【arm扩容】docker load -i tar包 空间不足
背景: 首先我在/home/nvidia/work下导入了一些镜像源码tar包。然后逐个load进去。当我 load -i dev-aarch64-18.04-20210423_2000.tar包的时候,出现 Error processing tar file(exit status 1): write /9818cf5a7cbd5a828600d9a4d4e62185a7067e2a6f2ee…...
![](https://img-blog.csdnimg.cn/direct/d438666d27a6476fae3e629650e08f9c.png)
基于PID的直流电机自动控制系统的设计【MATLAB】
摘 要 本文在广泛查阅资料,了解直流电机特性的基础上,对直流电机的控制原理进行了的研究,设计了一款基于PID控制器的简单直流电机自动控制系统。 首先,分析了直流电机的应用背景和发展现状,对直流电机的工作原理和数学…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL----事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如,在学校管理系统中,我们删除一个学生,既需要删除学生的基本资料,也要删除和该学生相关的信息,如班级,考试成绩等等,这样&#…...
![](https://img-blog.csdnimg.cn/img_convert/fb035ba7656ef65ef481556da849025a.jpeg)
客观评价,可道云teamOS搭建的企业网盘,如Windows本地电脑一般的使用体验真的蛮不错
不管是企业网盘还是私有网盘,简单易用一直是我比较在意的。快速能上手使用,甚至不需要习惯一套新的操作逻辑,代表着不需要学习适应,能够迅速投入正常使用。 在这个过程中,可道云teamos以其Windows电脑般的流畅体验&am…...
![](https://www.ngui.cc/images/no-images.jpg)
当页面中有多个echarts图表的时候,resize不生效的修改方法
一、本来的代码 var myChart1 this.$echarts.init(document.getElementById(‘xxxx’)); let option {}; myChart1.setOption(option); setTimeout(function () {window.onresize function () {myChart1.resize();} }, 200) 二、修改后的代码 var myChart1 this.$echart…...
![](https://img-blog.csdnimg.cn/img_convert/8d489d7afd3979a65b0dc64f78fa5e9c.jpeg)
connect-caption-and-trace——用于共同建模图像、文本和人类凝视轨迹预测
介绍 论文地址:https://arxiv.org/abs/2105.05964 源码地址:https://github.com/facebookresearch/connect-caption-and-trace 在过去,计算机视觉和自然语言处理领域的模型和算法的发展只有偶尔的重叠,但近年来,这两…...
![](https://www.ngui.cc/images/no-images.jpg)
iOS API方法弃用警告说明及添加
一、常见系统方法警告或说明释义 NS_DEPRECATED_IOS(6_0, 8_0) 释义:iOS用;且在6.0被引用,将在8.0后废弃此方法。NS_DEPRECATED(6_0, 6_6, 8_0, 8_8) 释义:MacOS与iOS中都可用;但Mac系统中是在6.0被引用,6…...
![](https://img-blog.csdnimg.cn/direct/a65e26f6fed240fb96db55f77a75ea87.png)
canvas绘制红绿灯路口(二)
系列文章 canvas绘制红绿灯路口(一) 无图不欢,先上图 优化项: 一:加入人行道红绿信号 二:加入专用车道标识(无方向标识时采用专用车道标识) 三:东南西北四项路口优化绘…...
![](https://img-blog.csdnimg.cn/direct/531e5c329fb14eb59bfea257c869f936.png#pic_center)
Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope
本文主要介绍如何在无需网关,无需配置 HttpClient 的情况下,使用 Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope 等 OpenAI 接口兼容的大模型服务。 1. 背景 一直以来,我们都在探索如何更好地利用大型语言模型(LLM&…...
![](https://www.ngui.cc/images/no-images.jpg)
【人工智能】深度解读 ChatGPT基本原理
ChatGPT是OpenAI开发的一种基于人工智能技术的自然语言处理工具,它代表了自然语言处理(NLP)技术的前沿进展。ChatGPT的基本原理建立在一系列先进技术和方法之上,主要包括GPT(Generative Pre-trained Transformer&#…...
![](https://img-blog.csdnimg.cn/direct/1b058adaed794366b73d753725a49864.png)
【教程】2024年如何快速提取爆款视频的视频文案?
关于如何提取爆款视频的视频文案,很朋友都不是很清楚,今天小编就带大家了解一下,希望这个知识点对大家有所帮助。 剪辑工作者有剪映、arctime、视频字幕等,但唯独编辑工作者或者编导没用直接提取视频文案的工具今天就说说可直接在…...
![](https://img-blog.csdnimg.cn/direct/07f61af9bc914a6682cf09216adc0309.jpeg#pic_center)
【MySQL连接器(Python)指南】02-MySQL连接器(Python)版本与实现
文章目录 前言MySQL连接器(Python)版本MySQL连接器(Python)实现总结前言 MySQL连接器(Python),用于让Python程序能够访问MySQL数据库。要想让Python应用程序正确高效地使用MySQL数据,就需要深入了解MySQL连接器的特性和使用方法。 MySQL连接器(Python)版本 下表总结了可用的…...
![](https://www.ngui.cc/images/no-images.jpg)
Vim入门教程
Vim是一个高度可配置的文本编辑器,用于创建和修改各种类型的文本文件。以下是一些基本的Vim使用示例,展示如何在Vim中进行编辑和操作。 1. 打开和保存文件 打开一个名为example.txt的文件: vim example.txt 打开多个文件,使用大…...
机器学习课程复习——隐马尔可夫
不考计算题 Q:概率图有几种结构? 条件独立性的公式? 顺序结构发散结构汇总结构Q:隐马尔可夫模型理解? 概念 集合:状态集合、观测集合 序列:状态序列、观测序列...
![](https://img-blog.csdnimg.cn/direct/f57b4d53f547424f94cc8825921d46bf.png)
大数据-数据分析初步学习,待补充
参考视频:数据分析只需3小时从入门到进阶(up亲身实践)_哔哩哔哩_bilibili 数据指标: 对当前业务有参考价值的统计数据 分类:用户数据,业务数据,行为数据 用户数据 存量: DAU&#…...
![](https://www.ngui.cc/images/no-images.jpg)
微服务为什么使用RPC而不使用HTTP通信
微服务架构中使用RPC(Remote Procedure Call)而不是HTTP通信,主要是因为RPC在某些方面相比HTTP具有显著的优势。以下是一些关键原因: 性能: RPC通常比HTTP性能更高。RPC协议可以使用二进制序列化格式(如gRP…...
![](https://img-blog.csdnimg.cn/direct/2777542368b04acabec886b32ec9427e.png)
怪物猎人物语什么时候上线?游戏售价多少?
怪物猎人物语是一款全新的RPG游戏,玩家在游戏中将化身为骑士,不断与怪物建立羁绊、不断成长,踏上前往外面世界的旅程,且最终目的地是以狩猎怪物为生的猎人世界。因为最近有不少玩家在关注这款游戏,所以下面就给大家分享…...
![](https://img-blog.csdnimg.cn/direct/2b1814ca4f024417921dcf95c585b7a8.png)
以创新思维点亮盲盒小程序:探索未来零售新趋势
随着科技的飞速发展和消费者需求的不断变化,零售行业正迎来一场前所未有的变革。在这个变革的浪潮中,盲盒小程序凭借其独特的魅力和巨大的潜力,成为未来零售新趋势的代表之一。本文将探讨如何以创新思维点亮盲盒小程序,探索未来零…...
![](https://img-blog.csdnimg.cn/img_convert/b67fa67aca3e818ed51a42b5de60298f.png)
DzzOffice集成功能最丰富的开源PHP+MySQL办公系统套件
DzzOffice是一套开源办公套件,旨在为企业和团队提供类似“Google企业应用套件”和“微软Office365”的协同办公平台。以下是对DzzOffice的详细介绍: 主要功能和应用: 网盘:支持企业、团队文件的集中管理,提供文件标签…...
![](https://img-blog.csdnimg.cn/direct/0a5c367c410b40c3ba86909addec72c2.jpeg)
关于生成式人工智能的发展
近年来,人工智能的发展引起了广泛关注,尤其是在深度学习领域,以深度神经网络为代表的人工智能技术已经取得了重大突破。然而,深度神经网络也有其局限性。深度学习技术在处理一些复杂问题时表现良好,但在解决更广泛的任…...
![](https://img-blog.csdnimg.cn/direct/bbeaffeb53934a8d8176bab168e8dc02.png)
Python魔法方法__call__深入详解
目录 1、魔法方法__call__初探 🧙♂️ 1.1 什么是__call__? 1.2 基础用法演示 1.3 自定义行为与参数传递 2、实现轻量级装饰器模式 🎗️ 2.1 装饰器概念回顾 2.2 利用__call__构建装饰器 2.3 深入理解装饰器应用场景 3、类实例变身函数调用 🔮 3.1 类似函数的…...
![](https://img-blog.csdnimg.cn/direct/937beee68db8422394aa45266a421881.png)
PyQt5 生成py文件不能运行;pushButton点击事件;QTextEdit 获取输入框内容
目录 cant open file c.pyuic: c.pyuic $FileName$ -o $FileNameWithoutExtension$.p PyQt5 生成py文件不能运行 pushButton点击事件 QTextEdit 获取输入框内容 整体运行代码: Creating a Qt Widget Based Application | Qt Creator Manual cant open file c.pyuic: c.…...
![](https://img-blog.csdnimg.cn/direct/f7b42c5df3d14ea8ac1c71278077d2eb.png)
HarmonyOS最佳实践文档总结汇总(面试题可能会问)
api12 上面来了最佳实现方案,未来面试题有的问了 编号分类内容子类链接 1性能体验设计体验设计概述 文档中心用户体验设计 文档中心流畅评测指标 文档中心交互流畅体验设计 文档中心视觉流畅体验设计 文档中心2性能优化开发高性能ArkUIUI组件性能优化文档中心合…...
![](https://img-blog.csdnimg.cn/direct/d673903746e6453e99b02ce4fc479dda.jpeg)
leetcode 56合并区间
思路 合并就是首先应该按照left左边界排序,排完序以后,如果i的左边界小于等于i-1的右边界,说明有重合,此时这两个可以合并,右边界应该取最大值。 代码 排序 我是定义了一个类,存储左右边界,先将数组转化…...
![](https://img-blog.csdnimg.cn/direct/aabb1f59c1b242299c2da3fdd639f256.png)
企业微信内嵌H5项目接入聊天功能
产品需求是,在列表中把符合条件的列表接入聊天功能,以下是详细步骤: 1.引入企业微信 <script src"https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script> 2.获取wx签名(必须要) /*** 获取wx签名**/ export function getWxJsApi(data) {r…...
![](https://img-blog.csdnimg.cn/direct/50eece6e30a549e18611a3e0d891361d.png)
微信小程序 this.setData高级用法(只更改单个数据)
合理使用 setData | 微信开放文档 1、页面 <view class"h-100px"></view> <view>最简单的数据:</view> <button bind:tap"handleAdd" data-type"1">点我加 1: {{text}}</button> &…...
![](https://www.ngui.cc/images/no-images.jpg)
使用npm发布自己的插件包
文章目录 1. 准备工作1.1 拥有一个npm账号1.2 准备你的插件代码1.3 编写package.json文件 2. 本地测试3. 发布到npm3.1 登录npm3.2 发布插件3.3 更新插件 4. 注意事项 在JavaScript和Node.js的生态系统中,npm(Node Package Manager)是一个非常…...
![](./transition-demo/4.jpg)
前端入门篇(五十二)练习6:transition过渡小动画
所以应该先找到第n个li,找到li再找img,li没有找错,底下又各自只有一个img,解决 ul li:nth-child(1) img { } 描述文字从下往上: 一开始描述也在框框下面,当hover时,translateY(0)࿰…...
![](/images/no-images.jpg)
购物网站设计目标/百度平台客服联系方式
Android 面试题下列哪些语句关于内存回收的说明是正确的 ? (b )A 、 程序员必须创建一个线程来释放内存B 、 内存回收程序负责释放无用内存C 、 内存回收程序允许程序员直接释放内存D 、 内存回收程序可以在指定的时间释放内存对象下面异常是属于 Runtime Exception 的是( abc…...
![](https://img-blog.csdnimg.cn/img_convert/4b299d235324564404eaf503395d04ff.png)
小程序可以做企业网站/今日头条官方正版
自适应与响应式布局,别再傻傻分不清,本文作者从以下几点详细介绍响应式和自适应有什么区别。自适应布局自适应布局是网页内容根据设备的不同而进行适应;通过检测视口分辨率,来判断当前访问的设备是pc端、平板还是手机,…...
![](https://img2018.cnblogs.com/blog/573911/201907/573911-20190709173512174-1131800883.png)
网站建设合同附加协议/百度西安分公司地址
1.Configuration有什么用? configuration 2.Spring是如何获取Bean的定义的? 1):通过启动一个AnnotationConfigApplicationContext 来引导这个Configuration 注解的类,比如: AnnotationConfigApplicationCo…...
![](http://images.cnblogs.com/cnblogs_com/artech/WindowsLiveWriter/WCF_10DBE/image_thumb_1.png)
石家庄企业网站开发/全国疫情最新情报
由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的(参考《并发的本质》《并发中的同步》),所以在不同的实例上下文模式下,会表现出不同的并发行为。接下来,我们从具体的实例上下文模式的角度来剖析WCF的并…...
![](https://img-blog.csdnimg.cn/20210419232048436.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDAyMzQwMw==,size_16,color_FFFFFF,t_70)
网站建设中的多语言翻译如何实现/关键词优化排名用什么软件比较好
前言:最近开始接触bugku,感觉适合新人培养兴趣。自己在学习的时候写个笔记,督促自己多去学习和巩固知识。如果文章和代码有表述不当之处,还请大佬不吝赐教。 Bugku CTF-web5 矛盾知识积累解题知识积累 is_numeric()函数…...
![](/images/no-images.jpg)
h5建设网站教程/铜仁搜狗推广
一、前言 很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句。这类SQL语句性能不好的首要原因是缺乏高效的索引。没有索引除了导致语句本身运行速度慢外,更是导致大量的磁盘读写操作,使得整个系统性能都受之影…...