当前位置: 首页 > news >正文

网站设计做哪些的百度咨询

网站设计做哪些的,百度咨询,昌邑网站建设,十堰网站制作文章目录 需求一、KQM6600模块及接线方法二、模块配置流程1.环境2.配置时钟和IO3.配置串口初始化,使能以及中断4.中断函数 三、数据处理四、关键代码总结 需求 能够在串口实时显示当前的VOC(挥发性有机化合物),甲醛和Co2浓度。 …

文章目录

  • 需求
  • 一、KQM6600模块及接线方法
  • 二、模块配置流程
    • 1.环境
    • 2.配置时钟和IO
    • 3.配置串口初始化,使能以及中断
    • 4.中断函数
  • 三、数据处理
  • 四、关键代码
  • 总结


需求

能够在串口实时显示当前的VOC(挥发性有机化合物),甲醛和Co2浓度。
在这里插入图片描述


一、KQM6600模块及接线方法

KQM6600TAUs型空气质量检测模块,使用MEMS VOC传感器件作为检测空气中有机化合物气体(VOC)的模块。UART通信数据输出,根据VOC数据计算和等效甲醛,CO2输出。其具有体积小,功耗低,灵敏度高,响应速度快等居多优点,广泛应用在空气质量检
测及控制领域。
在这里插入图片描述
要注意该模块的电压和波特率。
在这里插入图片描述
由官方的说明书可知,只需在将该模块的(V)供电,(A)TX和(G)GND三个引脚接到板子上即可。
在这里插入图片描述
本次例程由于没有使用SD卡模块,所以选择将KQM6600模块的数据传输到UART4上,只需将该模块的A(TX)接到PC11即可。

二、模块配置流程

1.环境

1.首先要保证串口1能够将接收到的实时数据发送到串口上。
2.还要对printf进行重定向,让其能够打印到串口上。(详情见STM32第三课:串口调试)
代码如下:
usart.c

#include "usart.h"
#include "stdio.h"void Usart1_Config()
{//开时钟:GPIOA,USART1RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);//配置对应的IO口 PA9(tx):复用推挽 PA10(RX):浮空输入GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;GPIO_Init(GPIOA,&GPIO_InitStruct);//配置串口1    8数据位,0校验位,1停止位,波特率115200USART_InitTypeDef USART_InitStruct = {0};//可以通过结构体类型跳转USART_InitStruct.USART_BaudRate = 115200;//波特率USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件控制流不开USART_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;//打开发送和接收USART_InitStruct.USART_Parity = USART_Parity_No;USART_InitStruct.USART_StopBits = USART_StopBits_1;USART_InitStruct.USART_WordLength = USART_WordLength_8b;USART_Init(USART1,&USART_InitStruct);USART_Cmd(USART1,ENABLE);//配置串口1的中断//在串口1产生接收的时候,会产生中断,我们直接去中断函数里面处理就可以了//选择串口1的中断原因USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//USART1->CR1 |= 0x1<<5;//使能串口1的接收非空中断NVIC_SetPriority(USART1_IRQn,7);//设置优先级0~15NVIC_EnableIRQ(USART1_IRQn);//使能中断通道
}void SendData(uint8_t data)
{while((USART1->SR&0x01<<6)==0){}//等待上次发送完成USART1->DR = data;//发送数据
}int fputc(int ch, FILE *f)
{//printf函数最终会跳转到这里来运行while((USART1->SR&0x1<<6)==0);//发送数据USART1->DR = (uint8_t)ch;return ch;
}void USART1_IRQHandler(void)
{uint8_t data=0;if((USART1->SR&0x1<<5)!=0){//执行该中断函数的原因有很多,所以判断一下是不是接收导致的//接收数据data = USART_ReceiveData(USART1);//读操作,同时也是清空中断标志位USART_SendData(USART1, data); }
}

usart.h

#ifndef _USART_H_
#define _USART_H_
#include "stm32f10x.h"
#include "stdio.h"void Usart1_Config();
void SendData(uint8_t data);
int fputc(int ch, FILE *f);#endif

2.配置时钟和IO

首先创建一个kqm.c.h文件用来专门配置该模块
和串口1一样,只不过要注意此时是UART4,引脚为PC11。

	//开时钟 U4 PC11RXRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);//配置ioGPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);

3.配置串口初始化,使能以及中断

在这里插入图片描述
初始化要将波特率改为9600,然后只用打开接收就行,其他与串口1一样。
使能就不说了,改个参数就行。
中断也一样,只用改改参数。

	//配置串口  波特率9600 数据位8,校验位0,停止位1USART_InitTypeDef USART_InitStruct = {0};//可以通过结构体类型跳转USART_InitStruct.USART_BaudRate = 9600;//波特率USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件控制流不开USART_InitStruct.USART_Mode = USART_Mode_Rx;//打开接收USART_InitStruct.USART_Parity = USART_Parity_No;USART_InitStruct.USART_StopBits = USART_StopBits_1;USART_InitStruct.USART_WordLength = USART_WordLength_8b;USART_Init(UART4,&USART_InitStruct);//使能串口USART_Cmd(UART4,ENABLE);//配置串口4的中断(采用中断接收)USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);//使能串口4	的接收非空中断USART_ITConfig(UART4,USART_IT_IDLE,ENABLE);//总线空闲中断NVIC_SetPriority(UART4_IRQn,7);//设置优先级0~15NVIC_EnableIRQ(UART4_IRQn);//使能中断通道

4.中断函数

依旧是先去启动文件中找到该串口的中断函数复制过来。
然后使用USART_GetITStatus函数进行标志位判断,若为1则代表传输完成。
由于数据位为8位所以此时需要定义一个数组来存放这8位数组。
还需要定义一个参数来计数,每当存放够8位时,清0,再从头开始覆盖存入数据。此刻就完成了8位数据获取。

	uint8_t data=0;//判断接收中断是否发生if(USART_GetITStatus(UART4,USART_IT_RXNE)==SET){data = UART4->DR;u4recive[u4count]=data;u4count++;u4count%=8;//USART1->DR = data;//回显}

为了判断该模块是否传输完数据,此时我们要使用一个新的知识:中断空闲
USART_GetITStatus(UART4,USART_IT_IDLE)
当结尾时IDLE时就代表此时判断的是中断空闲。
当中断空闲被置为1时,就代表示总线空闲,8位数据传完了,接收完毕。此时想要清理中断空闲的话,需要先读SR再读DR。
然后在设置一个标志位u4flag,将其置为1代表接收完毕。

	//触发空闲中断,表示总线空闲,接收完毕if(USART_GetITStatus(UART4,USART_IT_IDLE)==SET){data = UART4->SR;//清理空闲中断,先读SR再读DRdata = UART4->DR;u4flag=1;}

三、数据处理

先判断标志位u4flag是否为0,若为0这直接退出,不进入数据处理函数。
在这里插入图片描述
由手册可知,该模块有预热操作,为了屏蔽掉预热操作的数据,此时需要判断传输过来的8位数组,检查是否每位都为0xff,只要有一位不是就继续进行,否则向串口打印‘数据预热’。

	if(u4flag==0){return 0;}u4flag=0;for(i=1;i<7;i++){if(u4recive[i]!=0xff){break;}}if(i==7){u4count=0;printf("数据预热\r\n");memset(u4recive,0,102);return 0;}

以上都没有问题之后,此时获取到的数组才是真正有用的数据。
在这里插入图片描述
在这里插入图片描述
由手册可知该数据的转换模式,照着做就行。记得用完将数据位和标志位都清零。

	voc=((u4recive[1]<<8)+u4recive[2])*0.11;ch2o = ((u4recive[3]<<8)+u4recive[4])*0.01;co2 = ((u4recive[5]<<8)+u4recive[6]);printf("VOC = %.1f PPM\r\n甲醛 = %.2f MG/M3\r\nCo2 = %.0fPPM\r\n",voc,ch2o,co2);u4count=0;memset(u4recive,0,102);return 0;

最后记得将处理函数添加到主函数的while(1)死循环中。
由于串口4用到了串口1输出,所以在main函数的配置应在串口1的后面。

四、关键代码

main.c

#include "stm32f10x.h"
#include "usart.h"
#include "stdio.h"
#include "delay.h"
#include "kqm.h"
#include "string.h"int main()
{NVIC_SetPriorityGrouping(5);//两位抢占两位次级Usart1_Config(); Kqm_U4Config();while(1){	KQM_DealData();}
}

kqm.c

#include "stm32f10x.h"
#include "stdio.h"
#include "string.h"float voc,ch2o,co2;
void Kqm_U4Config()
{//开时钟 U4 PC11RXRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);//配置ioGPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);//配置串口  波特率9600 数据位8,校验位0,停止位1USART_InitTypeDef USART_InitStruct = {0};//可以通过结构体类型跳转USART_InitStruct.USART_BaudRate = 9600;//波特率USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件控制流不开USART_InitStruct.USART_Mode = USART_Mode_Rx;//打开接收USART_InitStruct.USART_Parity = USART_Parity_No;USART_InitStruct.USART_StopBits = USART_StopBits_1;USART_InitStruct.USART_WordLength = USART_WordLength_8b;USART_Init(UART4,&USART_InitStruct);//使能串口USART_Cmd(UART4,ENABLE);//配置串口4的中断(采用中断接收)USART_ITConfig(UART4,USART_IT_RXNE,ENABLE);//使能串口4	的接收非空中断USART_ITConfig(UART4,USART_IT_IDLE,ENABLE);//总线空闲中断NVIC_SetPriority(UART4_IRQn,7);//设置优先级0~15NVIC_EnableIRQ(UART4_IRQn);//使能中断通道
}uint8_t u4recive[102]={0};
uint8_t u4count=0;
uint8_t u4flag=0;
uint8_t i=0;void UART4_IRQHandler(void)
{uint8_t data=0;//判断接收中断是否发生if(USART_GetITStatus(UART4,USART_IT_RXNE)==SET){data = UART4->DR;u4recive[u4count]=data;u4count++;u4count%=8;//USART1->DR = data;//回显}//触发空闲中断,表示总线空闲,接收完毕if(USART_GetITStatus(UART4,USART_IT_IDLE)==SET){data = UART4->SR;//清理空闲中断,先读SR再读DRdata = UART4->DR;u4flag=1;}}uint8_t KQM_DealData()
{if(u4flag==0){return 0;}u4flag=0;for(i=1;i<7;i++){if(u4recive[i]!=0xff){break;}}if(i==7){u4count=0;printf("数据预热\r\n");memset(u4recive,0,102);return 0;}voc=((u4recive[1]<<8)+u4recive[2])*0.11;ch2o = ((u4recive[3]<<8)+u4recive[4])*0.01;co2 = ((u4recive[5]<<8)+u4recive[6]);printf("VOC = %.1f PPM\r\n甲醛 = %.2f MG/M3\r\nCo2 = %.0fPPM\r\n",voc,ch2o,co2);u4count=0;memset(u4recive,0,102);return 0;
}

kqm.h

#ifndef _KQM_H_
#define _KQM_H_
#include "stm32f10x.h"
void Kqm_U4Config();
uint8_t KQM_DealData();#endif

其他代码遇上几节课一样。


总结

1.学会了KQM6600空气质量传感器模块的接线和配置。
2.学会了使用空闲中断,以及数据的获取与处理。


文章转载自:
http://iceman.c7623.cn
http://oxter.c7623.cn
http://frowsty.c7623.cn
http://unearthliness.c7623.cn
http://fibrilliform.c7623.cn
http://vanadious.c7623.cn
http://pyorrhoea.c7623.cn
http://symptom.c7623.cn
http://conditional.c7623.cn
http://crud.c7623.cn
http://strobilation.c7623.cn
http://feu.c7623.cn
http://falciform.c7623.cn
http://cirrous.c7623.cn
http://onding.c7623.cn
http://lethiferous.c7623.cn
http://verdin.c7623.cn
http://roscian.c7623.cn
http://hernioplasty.c7623.cn
http://destructible.c7623.cn
http://tensometer.c7623.cn
http://wiredrawing.c7623.cn
http://rnzn.c7623.cn
http://ectropion.c7623.cn
http://adream.c7623.cn
http://geepound.c7623.cn
http://ussuriisk.c7623.cn
http://dishouse.c7623.cn
http://jargonel.c7623.cn
http://felv.c7623.cn
http://eightfold.c7623.cn
http://deice.c7623.cn
http://velskoon.c7623.cn
http://criticastry.c7623.cn
http://curium.c7623.cn
http://adversative.c7623.cn
http://hindi.c7623.cn
http://armature.c7623.cn
http://freemasonry.c7623.cn
http://poisoner.c7623.cn
http://canephora.c7623.cn
http://zootheism.c7623.cn
http://tsipouro.c7623.cn
http://disjection.c7623.cn
http://drakensberg.c7623.cn
http://laughing.c7623.cn
http://sciatic.c7623.cn
http://adapters.c7623.cn
http://chopping.c7623.cn
http://coalitionist.c7623.cn
http://slater.c7623.cn
http://execute.c7623.cn
http://ammonifiers.c7623.cn
http://pandemonium.c7623.cn
http://postmeridian.c7623.cn
http://rhythmist.c7623.cn
http://lit.c7623.cn
http://slovenly.c7623.cn
http://u.c7623.cn
http://capillarimeter.c7623.cn
http://lapstreak.c7623.cn
http://unfitness.c7623.cn
http://hartbeest.c7623.cn
http://ermentrude.c7623.cn
http://triangle.c7623.cn
http://exophthalmic.c7623.cn
http://amativeness.c7623.cn
http://kathmandu.c7623.cn
http://fluter.c7623.cn
http://massacre.c7623.cn
http://solvability.c7623.cn
http://madding.c7623.cn
http://transurethral.c7623.cn
http://predaceous.c7623.cn
http://jg.c7623.cn
http://angst.c7623.cn
http://shot.c7623.cn
http://leporine.c7623.cn
http://cathodal.c7623.cn
http://ramstam.c7623.cn
http://women.c7623.cn
http://cabob.c7623.cn
http://jumbled.c7623.cn
http://digitalose.c7623.cn
http://medallist.c7623.cn
http://erato.c7623.cn
http://brugge.c7623.cn
http://pipage.c7623.cn
http://interrelated.c7623.cn
http://paresthesia.c7623.cn
http://bronchogenic.c7623.cn
http://partizan.c7623.cn
http://arsenic.c7623.cn
http://novaculite.c7623.cn
http://clearway.c7623.cn
http://trochar.c7623.cn
http://choriocarcinoma.c7623.cn
http://peevish.c7623.cn
http://bishopric.c7623.cn
http://zygomorphism.c7623.cn
http://www.zhongyajixie.com/news/55036.html

相关文章:

  • 网站去哪里备案电商软文广告经典案例
  • 图片做视频在线观看网站以营销推广为主题的方案
  • 做坏事网站百度排名推广
  • 多城市网站建设营销策划公司名称
  • 做司考题的网站关键词制作软件
  • 手机网站开源谷歌广告联盟官网
  • 深做网站公司百度关键词排名优化工具
  • 广州 做网站营业推广方式
  • 合肥网站制作网站磁力链最好用的搜索引擎
  • 什么叫做网站建设怎样开网站
  • wordpress 添加子菜单aso优化报价
  • 100深夜看黄禁用免费seo推广外包报价表
  • 互联网广告推广公司河南seo和网络推广
  • 新疆网站建设seo优化营销制作设计青岛seo排名公司
  • 网站底部 设计大学生网页设计主题
  • 做思路导图的网站manage网站案例分析
  • 小程序管理平台关键词优化外包
  • 申请办理公司长沙弧度seo
  • 自己做的网站源码如何安装网络营销公司名字
  • 网站宣传虚假处罚标准公司软文推广
  • 手机门户网站模板百度提交网址入口
  • 惠州建设局网站首页网络公司
  • 一个jsp做的购物小网站关键词优化工具
  • 供应链管理案例分析关键词首页排名优化价格
  • 免费模板建站竞价托管
  • 网站建设方案推销网络推广外包注意哪些
  • 长沙网站平台建设公司体验营销
  • 建设网站书籍pdf下载网店推广方案策划书
  • 体现网站特色嘉兴seo
  • 网站风格类型有哪些新东方教育培训机构