配置串口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)相关推荐

  1. Sensirion SCD4x 二氧化碳传感器,STM32 I2C读取CO2浓度,温度,湿度值

    目录: 一.描述 二.部分函数代码 1.开始周期测量. 2.停止周期测量. 3.读取传感器数据. 4.读取传感器序列号. 5.传感器自检. 6.传感器恢复出厂设置. 7.传感器软件复位. 8 查询传感 ...

  2. 【CO2二氧化碳传感器】senseair S8 LP

    文章目录 一.Senseair S8 LP介绍 1.1 Senseair介绍 1.2 二氧化碳传感器S8介绍 1.3 S8结构和引脚 二.使用Senseair官方的软件读取CO2浓度 2.1 下载上位 ...

  3. YA-C21A型二氧化碳传感器

    一.传感器简介 YA-C21A型二氧化碳传感器是一种通用智能小型传感器,利用非色散红外(NDIR)原理对空气中存在的二氧化碳进行探测,具有良好的选择性和无氧气依赖性,寿命长.内置温度补偿.该传感器同时 ...

  4. 二氧化碳传感器CCS811简单的测试驱动_基于Arduino

    二氧化碳传感器CCS811简单的测试驱动_基于Arduino 目的 简单介绍 由于MOX Sensor材料特性在使用过程中要注意的问题 IC的初始化过程 IC的读数据过程 可配置参数 完整程序代码 数 ...

  5. NDIR二氧化碳传感器原理介绍

    文章目录 1. 引言 2. 分类 3. 红外气体传感原理 3.1 朗伯-比尔定律 3.2 非分光红外(NDIR)法检测原理 3.3 浓度.温湿度标定 3.4 响应时间研究 4. 参考文献 1. 引言 ...

  6. lm91000——stm32 -气体传感器(氧气 硫化氢,氨气)

    lm91000--stm32  -气体传感器(氧气 硫化氢,氨气) 最近我做了一下气体传感器,遇到了一些问题,摸索前进.最后还是有些收获.总结分享一下. 第一部分 总体部分电路 LMP91000 传感 ...

  7. SENSIRION SCD30 二氧化碳传感器 I2C 通信参数及相关命令

    SENSIRION SCD30 二氧化碳传感器 I2C 地址: 0x61 I2C 通信速率: 100KHz 特别注意: SCD30 要求与其通信的 I2C Master 主机,必须支持 clock s ...

  8. 硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-121. MH-Z14A二氧化碳传感器模块

    /**   ******************************************************************************   *             ...

  9. STM32光敏传感器原理

    发现很多人都使用光敏电阻,但只是用了AD读取了电压值,或者算出了电阻值,就发送给上位机或者服务器,美其名曰获取了光照度,但其原理并...... 图中的 LS1 就是光敏传感器,其实就是一个光敏二极管, ...

最新文章

  1. 【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)
  2. Linux基础知识汇总(2)...持续更新中
  3. 2018阿里云云数据库RDS核心能力演进
  4. Windows多线程编程总结
  5. 就是这么迅猛的实现搜索需求--转
  6. vsFTP服务器的配置
  7. 亲手完成4大企业实战项目,挑战Python全栈高薪岗位!
  8. 在Windows上,迁移VisualSVN server
  9. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 生成对抗网络
  10. JVM垃圾收集器基本思想
  11. MySQL和SQLyog安装配置教程
  12. http和https协议下,http可以正常下载,但是https却不能
  13. 手把手教你 VSCode搭建STM32开发环境
  14. python密码安全性检查代码
  15. 配置postfix邮件监控
  16. Sublime 中快速打开网页
  17. 计算机c语言基础字符,2008计算机二级考试:C语言基础教程-C语言字符型数据
  18. parseInt()和parseFloat()的解析原理
  19. Iframe框架+table布局 +div布局实例
  20. 联阳IT6561|IT6561FN方案电路|替代IT6561方案设计DP转HDMI音视频转换器资料

热门文章

  1. 主板和机箱螺丝孔对不上?
  2. 群辉NAS+为知笔记docker定制私有云笔记
  3. 第十四届蓝桥杯模拟赛c++ 试题 I
  4. DBeaver导出结果集为CSV文件,数据用引号括起来
  5. python爬虫找漫画出现断章?那你就得看这篇爬虫思想教学咯!
  6. html5 可拖动悬浮按钮,前端vue开发:可移动的悬浮按钮的应用
  7. 半乳糖-人血清白蛋白 Gal-HSA,Gal-PEG-HSA 半乳糖修饰人血清白蛋白
  8. UKF-协方差矩阵分解
  9. [升级][报错]zipimport.ZipImportError: can‘t decompress data; zlib not available
  10. 2015计算机考试成绩查询网址,2015年下半年软考成绩查询入口!