STM32+二氧化碳传感器(FS00301)
配置串口4
uart.c
u8 USART4_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节
u16 USART4_RX_STA=0; //接收状态标记 void uart4_init(u32 bound){//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能USART1,GPIOA时钟//USART2_TX GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.2GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA.9//USART2_RX GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOA.10 //Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式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_Rx | USART_Mode_Tx; //收发模式USART_Init(UART4, &USART_InitStructure); //初始化串口1USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(UART4, ENABLE); //使能串口1 }
void UART4_Send_Data(u8 *buf,u16 len)
{u16 t;for(t=0;t<len;t++) //循环发送数据{while(USART_GetFlagStatus(UART4,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕USART_SendData(UART4,buf[t]);}while(USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET);}void UART4_IRQHandler(void) //串口1中断服务程序{int Res;if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res =USART_ReceiveData(UART4); //读取接收到的数据if(Res==0xff){USART4_RX_STA=0; //接收完成了 }else { USART4_RX_BUF[USART4_RX_STA]=Res ;USART4_RX_STA++; } } // USART_ClearFlag(UART4,USART_IT_RXNE); //一定要清除接收中断
}
uart.h
#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "sys.h"
#define USART_REC_LEN 20 //定义最大接收字节数 200
extern u16 USART4_RX_STA; //接收状态标记
extern u8 USART4_RX_BUF[USART_REC_LEN];
void uart4_init(u32 bound);
void UART4_Send_Data(u8 *buf,u16 len);
二氧化碳传感器
CO2.C
#include "CO2.h"/**************************************************
二氧化碳值计算函数
**************************************************/
int hextoDec(int hex)
{int sum=0,mul=1;int i,r;int count=0;do{r=hex%16;for(i=0;i<count;i++)mul*=16;mul*=r;sum+=mul;mul=1;count++; }while(hex/=16);return sum;
}/**************************************************
向二氧化碳发送命令
**************************************************/
void DATA(void)
{int i;u8 tr[]={0xff,0x01,0xa0,0x00,0x00,0x00,0x00,0x00,0x5f};for(i=0;i<9;i++){while((UART4->SR&0x0080)==0); UART4->DR=tr[i]; }
}
CO2.H
#ifndef __CO2_H
#define __CO2_H
#include "stdio.h"
#include "sys.h"
#include "usart.h" int hextoDec(int hex);
void DATA(void);#endif
主函数 main.c
#include "led.h"
#include "delay.h"
#include "CO2.h"
#include "sys.h"
#include "usart.h"
#include "stdio.h"int main(void){ u16 i,CO2; u16 CO2H,CO2L;delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(9600); //串口初始化为115200uart4_init(9600);LED2_Init(); //LED端口初始化while(1){DATA();for(i=0;i<5;i++)delay_ms(1000);CO2H=hextoDec(USART4_RX_BUF[3]);CO2L=hextoDec(USART4_RX_BUF[4]);CO2=CO2H*256+CO2L;printf("%d\r\n",CO2);for(i=0;i<5;i++)delay_ms(1000);}}
STM32+二氧化碳传感器(FS00301)相关推荐
- Sensirion SCD4x 二氧化碳传感器,STM32 I2C读取CO2浓度,温度,湿度值
目录: 一.描述 二.部分函数代码 1.开始周期测量. 2.停止周期测量. 3.读取传感器数据. 4.读取传感器序列号. 5.传感器自检. 6.传感器恢复出厂设置. 7.传感器软件复位. 8 查询传感 ...
- 【CO2二氧化碳传感器】senseair S8 LP
文章目录 一.Senseair S8 LP介绍 1.1 Senseair介绍 1.2 二氧化碳传感器S8介绍 1.3 S8结构和引脚 二.使用Senseair官方的软件读取CO2浓度 2.1 下载上位 ...
- YA-C21A型二氧化碳传感器
一.传感器简介 YA-C21A型二氧化碳传感器是一种通用智能小型传感器,利用非色散红外(NDIR)原理对空气中存在的二氧化碳进行探测,具有良好的选择性和无氧气依赖性,寿命长.内置温度补偿.该传感器同时 ...
- 二氧化碳传感器CCS811简单的测试驱动_基于Arduino
二氧化碳传感器CCS811简单的测试驱动_基于Arduino 目的 简单介绍 由于MOX Sensor材料特性在使用过程中要注意的问题 IC的初始化过程 IC的读数据过程 可配置参数 完整程序代码 数 ...
- NDIR二氧化碳传感器原理介绍
文章目录 1. 引言 2. 分类 3. 红外气体传感原理 3.1 朗伯-比尔定律 3.2 非分光红外(NDIR)法检测原理 3.3 浓度.温湿度标定 3.4 响应时间研究 4. 参考文献 1. 引言 ...
- lm91000——stm32 -气体传感器(氧气 硫化氢,氨气)
lm91000--stm32 -气体传感器(氧气 硫化氢,氨气) 最近我做了一下气体传感器,遇到了一些问题,摸索前进.最后还是有些收获.总结分享一下. 第一部分 总体部分电路 LMP91000 传感 ...
- SENSIRION SCD30 二氧化碳传感器 I2C 通信参数及相关命令
SENSIRION SCD30 二氧化碳传感器 I2C 地址: 0x61 I2C 通信速率: 100KHz 特别注意: SCD30 要求与其通信的 I2C Master 主机,必须支持 clock s ...
- 硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-121. MH-Z14A二氧化碳传感器模块
/** ****************************************************************************** * ...
- STM32光敏传感器原理
发现很多人都使用光敏电阻,但只是用了AD读取了电压值,或者算出了电阻值,就发送给上位机或者服务器,美其名曰获取了光照度,但其原理并...... 图中的 LS1 就是光敏传感器,其实就是一个光敏二极管, ...
最新文章
- 【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)
- Linux基础知识汇总(2)...持续更新中
- 2018阿里云云数据库RDS核心能力演进
- Windows多线程编程总结
- 就是这么迅猛的实现搜索需求--转
- vsFTP服务器的配置
- 亲手完成4大企业实战项目,挑战Python全栈高薪岗位!
- 在Windows上,迁移VisualSVN server
- 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 生成对抗网络
- JVM垃圾收集器基本思想
- MySQL和SQLyog安装配置教程
- http和https协议下,http可以正常下载,但是https却不能
- 手把手教你 VSCode搭建STM32开发环境
- python密码安全性检查代码
- 配置postfix邮件监控
- Sublime 中快速打开网页
- 计算机c语言基础字符,2008计算机二级考试:C语言基础教程-C语言字符型数据
- parseInt()和parseFloat()的解析原理
- Iframe框架+table布局 +div布局实例
- 联阳IT6561|IT6561FN方案电路|替代IT6561方案设计DP转HDMI音视频转换器资料
热门文章
- 主板和机箱螺丝孔对不上?
- 群辉NAS+为知笔记docker定制私有云笔记
- 第十四届蓝桥杯模拟赛c++ 试题 I
- DBeaver导出结果集为CSV文件,数据用引号括起来
- python爬虫找漫画出现断章?那你就得看这篇爬虫思想教学咯!
- html5 可拖动悬浮按钮,前端vue开发:可移动的悬浮按钮的应用
- 半乳糖-人血清白蛋白 Gal-HSA,Gal-PEG-HSA 半乳糖修饰人血清白蛋白
- UKF-协方差矩阵分解
- [升级][报错]zipimport.ZipImportError: can‘t decompress data; zlib not available
- 2015计算机考试成绩查询网址,2015年下半年软考成绩查询入口!