资源简介
使用CCS811与HDC1080传感器获取物理量,STM32进行算法运算,从而判断空气质量。此代码提供例程供大家参考理解,并且可移植。
代码片段和文件信息
#include “IIC.h“
#include “delay.h“
#include “usart.h“
void I2C_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能与 I2C有关的时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE );
/* PC3-I2C_SCL、PC5-I2C_SDA*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOB &GPIO_InitStructure);
SCL_H;
SDA_H;
}
void delay_1us(u8 x)//粗略延时iic_40K
{
u8 i=20;
x=i*x;
while(x--);
}
////////IIC起始函数//////////
/*
IIC起始:当SCL处于高电平期间,SDA由高电平变成低电平出现一个下降沿,然后SCL拉低
*/
u8 I2C_Start(void)
{
SDA_H;
delay_1us(5); //延时保证时钟频率低于40K,以便从机识别
SCL_H;
delay_1us(5);//延时保证时钟频率低于40K,以便从机识别
if(!SDA_read) return 0;//SDA线为低电平则总线忙退出
SDA_L; //SCL处于高电平的时候,SDA拉低
delay_1us(5);
if(SDA_read) return 0;//SDA线为高电平则总线出错退出
SCL_L;
delay_1us(5);
return 1;
}
//**************************************
//IIC停止信号
/*
IIC停止:当SCL处于高电平期间,SDA由低电平变成高电平出现一个上升沿
*/
//**************************************
void I2C_Stop(void)
{
SDA_L;
SCL_L;
delay_1us(5);
SCL_H;
delay_1us(5);
SDA_H;//当SCL处于高电平期间,SDA由低电平变成高电平 //延时
}
//**************************************
//IIC发送应答信号
//入口参数:ack (0:ACK 1:NAK)
/*
应答:当从机接收到数据后,向主机发送一个低电平信号
先准备好SDA电平状态,在SCL高电平时,主机采样SDA
*/
//**************************************
void I2C_SendACK(u8 i)
{
if(1==i)
SDA_H; //准备好SDA电平状态,不应答
else
SDA_L; //准备好SDA电平状态,应答
SCL_H; //拉高时钟线
delay_1us(5); //延时
SCL_L ; //拉低时钟线
delay_1us(5);
}
///////等待从机应答////////
/*
当本机(主机)发送了一个数据后,等待从机应答
先释放SDA,让从机使用,然后采集SDA状态
*/
/////////////////
u8 I2C_WaitAck(void) //返回为:=1有ACK=0无ACK
{
uint16_t i=0;
SDA_H; //释放SDA
SCL_H; //SCL拉高进行采样
while(SDA_read)//等待SDA拉低
{
i++; //等待计数
if(i==500)//超时跳出循环
break;
}
if(SDA_read)//再次判断SDA是否拉低
{
SCL_L;
return RESET;//从机应答失败,返回0
}
delay_1us(5);//延时保证时钟频率低于40K,
SCL_L;
delay_1us(5); //延时保证时钟频率低于40K,
return SET;//从机应答成功,返回1
}
//**************************************
//向IIC总线发送一个字节数据
/*
一个字节8bit当SCL低电平时,准备好SDA,SCL高电平时,从机采样SDA
*/
//**************************************
void I2C_SendByte(u8 dat)
{
u8 i;
SCL_L;//SCL拉低,给SDA准备
for (i=0; i<8; i++) //8位计数器
{
if(dat&0x80)//SDA准备
SDA_H;
else
SDA_L;
SCL_H; //拉高时钟,给从机采样
delay_1us(5); //延时保持IIC时钟频率,也是给从机采样有充足时间
SCL_L; //拉低时钟,给SDA准备
delay_1us(5); //延时保持IIC时钟频率
dat <<= 1; //移出数据的最高位
}
}
//**************************************
//从IIC总线接收一个字节数据
//**************************************
u8 I2C_RecvByte()
{
u8 i;
u8 dat = 0;
SDA_H;//释放SDA,给从机使用
delay_1us(1); //延时给从机准备SDA时间
for (i=0; i<8; i++) //8位计数器
{
dat <<= 1;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-18 14:33 CJMCU_811\
文件 1057116 2016-11-04 10:09 CJMCU_811\CC-000619-DS-7-CCS811 Datasheet(1).pdf
目录 0 2016-11-04 18:03 CJMCU_811\CCS811开发资料\
目录 0 2016-11-04 18:03 CJMCU_811\CCS811开发资料\CCS811开发资料\
文件 1057116 2016-10-20 16:01 CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000619-DS-7-CCS811 Datasheet.pdf
文件 424183 2016-10-20 16:23 CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000774-AN-2-Assembly guidelines for CCS811.pdf
文件 572616 2016-10-20 16:23 CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000783-AN-1-Mechanical Considerations for CCS811.pdf
文件 921515 2016-10-20 16:23 CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000803-AN-5-CCS811 Programming and Interfacing Guide.pdf
文件 655441 2016-10-20 16:24 CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000840-AN-1-CCS811 Hand Soldering Method.pdf
文件 667763 2016-10-20 16:24 CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000921-AN-2-CCS811 Clean Air ba
文件 468791 2016-10-20 16:23 CJMCU_811\CCS811开发资料\CCS811开发资料\CC-000922-AN-2-CCS811 - Performing a Application code binary file download.pdf
目录 0 2016-11-04 10:13 CJMCU_811\CJMCU\
目录 0 2016-11-04 10:13 CJMCU_811\CJMCU\APP\
文件 6081 2016-11-04 17:42 CJMCU_811\CJMCU\APP\IIC.c
文件 668 2016-11-04 17:30 CJMCU_811\CJMCU\APP\IIC.h
文件 3732 2016-11-18 14:39 CJMCU_811\CJMCU\APP\main.c
文件 3063 2016-09-20 12:39 CJMCU_811\CJMCU\APP\spi.c
文件 334 2014-09-18 14:26 CJMCU_811\CJMCU\APP\spi.h
文件 633941 2011-03-10 10:51 CJMCU_811\CJMCU\APP\stm32f10x.h
文件 3264 2016-09-22 15:52 CJMCU_811\CJMCU\APP\stm32f10x_conf.h
文件 2418 2011-11-13 01:28 CJMCU_811\CJMCU\APP\stm32f10x_it.c
文件 1983 2011-04-04 18:57 CJMCU_811\CJMCU\APP\stm32f10x_it.h
文件 36577 2011-04-04 18:57 CJMCU_811\CJMCU\APP\system_stm32f10x.c
文件 2085 2011-03-10 10:51 CJMCU_811\CJMCU\APP\system_stm32f10x.h
文件 1712 2016-09-22 16:00 CJMCU_811\CJMCU\APP\wdg.c
文件 268 2016-09-22 15:51 CJMCU_811\CJMCU\APP\wdg.h
目录 0 2016-11-04 10:13 CJMCU_811\CJMCU\CORE\
文件 17273 2010-06-07 10:25 CJMCU_811\CJMCU\CORE\core_cm3.c
文件 85714 2011-02-09 14:59 CJMCU_811\CJMCU\CORE\core_cm3.h
文件 15503 2011-03-10 10:52 CJMCU_811\CJMCU\CORE\startup_stm32f10x_hd.s
目录 0 2016-11-04 10:13 CJMCU_811\CJMCU\FIELIB\
............此处省略175个文件信息
- 上一篇:上海交大翁惠玉老师计算机网络的课件
- 下一篇:机器人学.蔡自兴.pdf
相关资源
- 基于单片机的数字电压表
- 汇编语言指令大全(详解版).pdf
- 51单片机门禁上位机,下位机全部工程
- 基于单片机的智能定时插座
- HOT51 开发板配套资料
- GP2D12红外测距传感器使用介绍.rar
- STM32静态扭矩传感器源码
- 基于51单片机接入阿里云物联网.pdf
- STM32光敏传感器
- 基于DS18B20温度检测系统设计内含原理
- TOF10120规格书
- 51单片机自学笔记
- 《单片机基础》李广弟
- stm32 modbus主机程序125364
- “流速”可控的彩灯控制器
- city气体传感器技术手册
- 基于51单片机的智能窗户设计
- 普中科技51单片机开发板的实验程序资
- STM32二氧化碳传感器MH-Z19代码
- 基于STM32单片机的MQ3 传感器+OLED显示程
- ADS1115的驱动代码,基于STM32F103
- 基于51单片机的水箱、水塔水位检测系
- STC12C5A60S2配套例程
- 基于STM32 的智能手环源程序设计
- GP2Y粉尘传感器 stm32f1 驱动代码
- stm32普通直流电机串口控制模板
- 单片机原理及应用笔记
- 51 单片机智能小车代码
- 毕设-超声波测距仪
- 基于单片机的室内空气净化系统.zip
评论
共有 条评论