資源簡(jiǎn)介
使用CCS811與HDC1080傳感器獲取物理量,STM32進(jìn)行算法運(yùn)算,從而判斷空氣質(zhì)量。此代碼提供例程供大家參考理解,并且可移植。

代碼片段和文件信息
#include?“IIC.h“
#include?“delay.h“
#include?“usart.h“
?void?I2C_GPIO_Config(void)
{
GPIO_InitTypeDef?GPIO_InitStructure;
/*?使能與?I2C有關(guān)的時(shí)鐘?*/
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)//粗略延時(shí)iic_40K
{
u8?i=20;
x=i*x;
while(x--);
}
////////IIC起始函數(shù)//////////
/*
IIC起始:當(dāng)SCL處于高電平期間,SDA由高電平變成低電平出現(xiàn)一個(gè)下降沿,然后SCL拉低
*/
u8?I2C_Start(void)
{
SDA_H;?
delay_1us(5); //延時(shí)保證時(shí)鐘頻率低于40K,以便從機(jī)識(shí)別
SCL_H;
delay_1us(5);//延時(shí)保證時(shí)鐘頻率低于40K,以便從機(jī)識(shí)別
if(!SDA_read)?return?0;//SDA線(xiàn)為低電平則總線(xiàn)忙退出
SDA_L;???//SCL處于高電平的時(shí)候,SDA拉低
delay_1us(5);
??if(SDA_read)?return?0;//SDA線(xiàn)為高電平則總線(xiàn)出錯(cuò)退出
SCL_L;
??delay_1us(5);
??return?1;
}
//**************************************
//IIC停止信號(hào)
/*
IIC停止:當(dāng)SCL處于高電平期間,SDA由低電平變成高電平出現(xiàn)一個(gè)上升沿
*/
//**************************************
void?I2C_Stop(void)
{
????SDA_L;
SCL_L;
delay_1us(5);
SCL_H;
delay_1us(5);
SDA_H;//當(dāng)SCL處于高電平期間,SDA由低電平變成高電平?????????????//延時(shí)
}
//**************************************
//IIC發(fā)送應(yīng)答信號(hào)
//入口參數(shù):ack?(0:ACK?1:NAK)
/*
應(yīng)答:當(dāng)從機(jī)接收到數(shù)據(jù)后,向主機(jī)發(fā)送一個(gè)低電平信號(hào)
先準(zhǔn)備好SDA電平狀態(tài),在SCL高電平時(shí),主機(jī)采樣SDA
*/
//**************************************
void?I2C_SendACK(u8?i)
{
????if(1==i)
SDA_H; ?????????????//準(zhǔn)備好SDA電平狀態(tài),不應(yīng)答
????else?
SDA_L;?? //準(zhǔn)備好SDA電平狀態(tài),應(yīng)答?
??SCL_H;????????????????????//拉高時(shí)鐘線(xiàn)
????delay_1us(5);?????????????????//延時(shí)
????SCL_L?;??????????????????//拉低時(shí)鐘線(xiàn)
????delay_1us(5);????
}?
///////等待從機(jī)應(yīng)答////////
/*
當(dāng)本機(jī)(主機(jī))發(fā)送了一個(gè)數(shù)據(jù)后,等待從機(jī)應(yīng)答
先釋放SDA,讓從機(jī)使用,然后采集SDA狀態(tài)
*/
/////////////////
u8?I2C_WaitAck(void)? ?//返回為:=1有ACK=0無(wú)ACK
{
uint16_t?i=0;
SDA_H; ????????//釋放SDA
SCL_H;?????????//SCL拉高進(jìn)行采樣
while(SDA_read)//等待SDA拉低
{
i++;??????//等待計(jì)數(shù)
if(i==500)//超時(shí)跳出循環(huán)
break;
}
if(SDA_read)//再次判斷SDA是否拉低
{
SCL_L;?
return?RESET;//從機(jī)應(yīng)答失敗,返回0
}
??delay_1us(5);//延時(shí)保證時(shí)鐘頻率低于40K,
SCL_L;
delay_1us(5);?//延時(shí)保證時(shí)鐘頻率低于40K,
return?SET;//從機(jī)應(yīng)答成功,返回1
}
//**************************************
//向IIC總線(xiàn)發(fā)送一個(gè)字節(jié)數(shù)據(jù)
/*
一個(gè)字節(jié)8bit當(dāng)SCL低電平時(shí),準(zhǔn)備好SDA,SCL高電平時(shí),從機(jī)采樣SDA
*/
//**************************************
void?I2C_SendByte(u8?dat)
{
??u8?i;
SCL_L;//SCL拉低,給SDA準(zhǔn)備
??for?(i=0;?i<8;?i++)?????????//8位計(jì)數(shù)器
??{
if(dat&0x80)//SDA準(zhǔn)備
SDA_H;??
else?
SDA_L;
????SCL_H;????????????????//拉高時(shí)鐘,給從機(jī)采樣
????delay_1us(5);????????//延時(shí)保持IIC時(shí)鐘頻率,也是給從機(jī)采樣有充足時(shí)間
????SCL_L;????????????????//拉低時(shí)鐘,給SDA準(zhǔn)備
????delay_1us(5);? ??//延時(shí)保持IIC時(shí)鐘頻率
dat?<<=?1;??????????//移出數(shù)據(jù)的最高位??
??} ?
}
//**************************************
//從IIC總線(xiàn)接收一個(gè)字節(jié)數(shù)據(jù)
//**************************************
u8?I2C_RecvByte()
{
????u8?i;
????u8?dat?=?0;
????SDA_H;//釋放SDA,給從機(jī)使用
????delay_1us(1);?????????//延時(shí)給從機(jī)準(zhǔn)備SDA時(shí)間????????????
????for?(i=0;?i<8;?i++)?????????//8位計(jì)數(shù)器
????{?
??dat?<<=?1;
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????目錄???????????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開(kāi)發(fā)資料\
?????目錄???????????0??2016-11-04?18:03??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\
?????文件?????1057116??2016-10-20?16:01??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\CC-000619-DS-7-CCS811?Datasheet.pdf
?????文件??????424183??2016-10-20?16:23??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\CC-000774-AN-2-Assembly?guidelines?for?CCS811.pdf
?????文件??????572616??2016-10-20?16:23??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\CC-000783-AN-1-Mechanical?Considerations?for?CCS811.pdf
?????文件??????921515??2016-10-20?16:23??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\CC-000803-AN-5-CCS811?Programming?and?Interfacing?Guide.pdf
?????文件??????655441??2016-10-20?16:24??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\CC-000840-AN-1-CCS811?Hand?Soldering?Method.pdf
?????文件??????667763??2016-10-20?16:24??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\CC-000921-AN-2-CCS811?Clean?Air?ba
?????文件??????468791??2016-10-20?16:23??CJMCU_811\CCS811開(kāi)發(fā)資料\CCS811開(kāi)發(fā)資料\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個(gè)文件信息
評(píng)論
共有 條評(píng)論