資源簡介
本文是我參考了CSDN里許多博主的文檔和代碼改編的,檢測的數據比較穩定,具體的優化算法可以再簡便寫,代碼里的檢測模式設置的選擇可以改變檢測的時間,具體的根據自己的要求而定,該文檔和代碼只供參考,如有不足之處,煩請各位大牛指出,謝謝!

代碼片段和文件信息
#include?“i2c_hal.h“
//?SDA?on?PB7
#define?SDA_LOW()??IIC_SDA=0?//?set?SDA?to?low
#define?SDA_OPEN()?IIC_SDA=1?//?set?SDA?to?open-drain
#define?SDA_READ???READ_SDA??//?read?SDA
//?SCL?on?PB6??????????? /*?--?adapt?the?defines?for?your?uC?--?*/
#define?SCL_LOW()??IIC_SCL=0?//?set?SCL?to?low
#define?SCL_OPEN()?IIC_SCL=1?//?set?SCL?to?open-drain
#define?SCL_READ???READ_SCL??//?read?SCL
//-----------------------------------------------------------------------------
void?I2c_Init(void)??????????????????????/*?--?adapt?the?init?for?your?uC?--?*/
{
RCC->APB2ENR|=1<<3; //先使能外設IO?PORTB時鐘?
??SDA_OPEN();
SCL_OPEN();
GPIOB->CRL&=0X00FFFFFF; //PB6/7?推挽輸出
GPIOB->CRL|=0X55000000; ???
}
//-----------------------------------------------------------------------------
void?I2c_StartCondition(void)//起始信號
{
??SDA_OPEN();?????//sda線輸出
delay_us(10);
SCL_OPEN();
delay_us(10);
? SDA_LOW();//START:when?CLK?is?highDATA?change?form?high?to?low?
delay_us(100);
SCL_LOW();//鉗住I2C總線,準備發送或接收數據?
delay_us(100);
}
//-----------------------------------------------------------------------------
void?I2c_StopCondition(void)
{
??SCL_LOW();
delay_us(10);
SDA_LOW();
delay_us(10);
SCL_OPEN();
delay_us(100);//STOP:when?CLK?is?high?DATA?change?form?low?to?high
SDA_OPEN();
delay_us(100);
}
//-----------------------------------------------------------------------------
etError?I2c_WriteByte(u8t?txByte)
{
??etError?error?=?NO_ERROR;
??u8t?????mask;
??for(mask?=?0x80;?mask?>?0;?mask?>>=?1) //?shift?bit?for?masking?(8?times)
??{
????if((mask?&?txByte)?==?0)?{SDA_LOW();?}? //數據線拉低,發送0--printf(“%ld\r\n“SDA_LOW());
????else?????????????????????{SDA_OPEN();} //數據線拉高,發送1--printf(“%ld\r\n“SDA_OPEN());
delay_us(10);
SCL_OPEN(); ??//時鐘線拉高,告訴從機,主機數據發送完畢
????delay_us(50);??//電平保持時間,等待從機接收數據
????SCL_LOW(); ??//時鐘線拉低,告訴從機,主機需要發送數據
????delay_us(10);??//電平保持時間,等待時鐘線穩定
??}
??SDA_OPEN();? //數據線上拉
??SCL_OPEN(); //時鐘線拉高,告訴從機,主機現在開始讀取數據
??delay_us(100);????????????????? //?data?set-up?time?(t_SU;DAT)
??if(GPIOB->IDR&(1<<7))?error?=?ACK_ERROR;???????//?檢測從機是否回應應答,SDA_READ(GPIOB_7)為1則應答失敗
SCL_LOW();
??delay_us(200);???????????????? //?wait?to?see?byte?package?on?scope
??return?error;?????????????????????????//?return?error?code
}
//-----------------------------------------------------------------------------
etError?I2c_ReadByte(u8t?*rxByte?etI2cAck?ack?u8t?timeout)
{
etError?error?=?NO_ERROR;
u8t?mask;
*rxByte?=?0x00;
for(mask?=?0x80;?mask?>?0;?mask?>>=?1)?//?shift?bit?for?masking?(8?times)
{?
SCL_LOW(); ?//時鐘線拉低,告訴從機,主機需要數據
delay_us(20);????//電平保持時間,等待時鐘線穩定?
SCL_OPEN();??????//時鐘線拉高,告訴從機,主機現在正在讀取數據??
delay_us(30);???????????????? //?SCL?high?time?(t_HIGH)
if(GPIOB->IDR&(1<<7))?*rxByte?|=?mask;???//?read?bit
delay_us(20);???????????????? //?clock?set-up?time?(t_SU;CLK)???????
}
SCL_LOW();
if(ack?==?ACK)?{SDA_LOW();}??????????????//?send
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-01-18?11:00??STH3x參考代碼\
?????文件??????633166??2018-01-18?11:00??STH3x參考代碼\IIC協議總結.docx
?????文件??????926221??2017-12-12?12:19??STH3x參考代碼\Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital.pdf
?????目錄???????????0??2018-01-15?20:19??STH3x參考代碼\SHT30代碼\
?????文件????????3584??2018-01-10?14:55??STH3x參考代碼\SHT30代碼\core_cm3.crf
?????文件??????????95??2018-01-10?14:55??STH3x參考代碼\SHT30代碼\core_cm3.d
?????文件???????10500??2018-01-10?14:55??STH3x參考代碼\SHT30代碼\core_cm3.o
?????文件??????226547??2018-01-10?15:49??STH3x參考代碼\SHT30代碼\i2c_hal.crf
?????文件?????????296??2018-01-10?15:49??STH3x參考代碼\SHT30代碼\i2c_hal.d
?????文件??????240036??2018-01-10?15:49??STH3x參考代碼\SHT30代碼\i2c_hal.o
?????文件????????1859??2018-01-15?15:47??STH3x參考代碼\SHT30代碼\Jli
?????文件?????????671??2018-01-10?15:50??STH3x參考代碼\SHT30代碼\Jli
?????文件??????230591??2018-01-10?15:49??STH3x參考代碼\SHT30代碼\main.crf
?????文件?????????295??2018-01-10?15:49??STH3x參考代碼\SHT30代碼\main.d
?????文件??????241764??2018-01-10?15:49??STH3x參考代碼\SHT30代碼\main.o
?????目錄???????????0??2018-01-15?20:19??STH3x參考代碼\SHT30代碼\OBJ\
?????文件????????3584??2018-01-10?16:31??STH3x參考代碼\SHT30代碼\OBJ\core_cm3.crf
?????文件?????????103??2018-01-10?16:31??STH3x參考代碼\SHT30代碼\OBJ\core_cm3.d
?????文件???????10568??2018-01-10?16:31??STH3x參考代碼\SHT30代碼\OBJ\core_cm3.o
?????文件??????224495??2018-01-15?17:49??STH3x參考代碼\SHT30代碼\OBJ\delay.crf
?????文件?????????289??2018-01-15?17:49??STH3x參考代碼\SHT30代碼\OBJ\delay.d
?????文件??????236856??2018-01-15?17:49??STH3x參考代碼\SHT30代碼\OBJ\delay.o
?????文件??????????19??2018-01-15?15:41??STH3x參考代碼\SHT30代碼\OBJ\ExtDll.iex
?????文件??????232267??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\i2c_hal.crf
?????文件?????????511??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\i2c_hal.d
?????文件??????246052??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\i2c_hal.o
?????文件??????235828??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\main.crf
?????文件?????????502??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\main.d
?????文件??????247996??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\main.o
?????文件??????243104??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\sht3x.crf
?????文件?????????516??2018-01-15?18:01??STH3x參考代碼\SHT30代碼\OBJ\sht3x.d
............此處省略76個文件信息
評論
共有 條評論