久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
SHT30溫濕度傳感器STM32 IIC程序源碼
[打印本頁]
作者:
zhaosj
時(shí)間:
2018-2-2 10:17
標(biāo)題:
SHT30溫濕度傳感器STM32 IIC程序源碼
SHT30源碼 溫濕度傳感器IIC源碼C stm32平臺
0.png
(3.96 KB, 下載次數(shù): 163)
下載附件
2018-2-2 16:21 上傳
單片機(jī)源程序如下:
/*******************************************************************************
*Filename: sht30_dis.c
*Revised: $Date: 06-15 15:23 $
*Author: double
*Description: 溫濕度傳感器驅(qū)動
*******************************************************************************
*************************引腳配置**********************************************
*******************************************************************************
*
* --------------------
* | PB7 |--> SCL
* | PB6 |--> SDA
* --------------------
*******************************************************************************/
#include "sht30_dis.h"
unsigned char TemValue = 0;
unsigned char RhValue = 0;
unsigned char buffer[6];
//IIC所有操作函數(shù)
//void IIC_Init(void); //初始化IIC的IO口
void SCL_L(void);
void SCL_H(void);
void SDA_L(void);
void SDA_H(void);
unsigned char SDA_Read(void);
void i2c_delay(void);
void i2c_noAck(void);
void i2c_ack(void);
void i2c_stop(void);
void i2c_delay(void);
unsigned char i2c_star(void);
unsigned char i2c_waitAck(void);
void i2c_sendByte( unsigned char byte );
unsigned char i2c_readByte(void);
void SHT3X_WriteCMD(unsigned int cmd);
void SHT3X_ReadState(unsigned char *temp);
void SHT3X_SetPeriodicMeasurement(void);
void SHX3X_ReadResults(unsigned int cmd, unsigned char *p);
unsigned char SHT3X_CalcCrc(unsigned char *data, unsigned char nbrOfBytes);
unsigned char SHT3X_CheckCrc(unsigned char *pdata, unsigned char nbrOfBytes, unsigned char checksum);
unsigned int SHT3X_CalcTemperature(unsigned int rawValue);
unsigned char SHT3X_CalcRH(unsigned int rawValue);
void SHT_GetValue(void);
/*******************************************************************************
* @fn sht30_dis_init
*
* @brief 初始化
*
* @return none
*
******************************************************************************/
void sht30_dis_init(void){
// SCL_OUT();
GPIO_InitTypeDef GPIO_InitStructure;
// __HAL_RCC_GPIOB_CLK_ENABLE();
// HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空輸入,或者改成上拉輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);
delay_us(250);
SHT3X_SetPeriodicMeasurement();//設(shè)置測量周期和模式
delay_us(150);
SHT_GetValue();
delay_us(150);
}
void SDA_IN(void){
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空輸入,或者改成上拉輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void SDA_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void SDA_H(void)
{
SDA_OUT();
IIC_SDA_H;
}
void SDA_L(void)
{
SDA_OUT();
IIC_SDA_L;
}
unsigned char SDA_Read(void)
{
SDA_IN();
return READ_SDA;
}
void SCL_H(void)
{
IIC_SCL_H;
}
void SCL_L(void)
{
IIC_SCL_L;
}
void i2c_delay(void)
{
// unsigned int z;
//
// for(z=0;z<10;z++);
//2M時(shí)鐘,一個(gè)指令周期就行。測量速度是20ms讀取完數(shù)據(jù)
__nop();
}
unsigned char i2c_star(void)
{
SDA_H();
SCL_H();
i2c_delay();
if (!SDA_Read())
return 1;
SDA_L();
i2c_delay();
if (SDA_Read())
return 1;
SDA_L();
SCL_L();
i2c_delay();
return 0;
}
void i2c_stop(void)
{
SCL_L();
i2c_delay();
SDA_L();
i2c_delay();
SCL_H();
i2c_delay();
SDA_H();
i2c_delay();
}
void i2c_ack(void)
{
SCL_L();
i2c_delay();
SDA_L();
i2c_delay();
SCL_H();
i2c_delay();
SCL_L();
i2c_delay();
}
void i2c_noAck(void)
{
SCL_L();
i2c_delay();
SDA_H();
i2c_delay();
SCL_H();
i2c_delay();
SCL_L();
i2c_delay();
}
unsigned char i2c_waitAck(void)
{
unsigned char t = 200;
SCL_L();
i2c_delay();
SDA_H();
i2c_delay();
//////////////////////////此處為金句,IO輸入輸出切換的瞬間有抖動,造成異常應(yīng)答
SDA_Read();
//////////////////////////
SCL_H();
i2c_delay();
while( SDA_Read() )
{
t --;
i2c_delay();
if(t==0)
{
SCL_L();
return 1;
}
i2c_delay();
}
i2c_delay();
SCL_L();
i2c_delay();
return 0;
}
void i2c_sendByte( unsigned char byte )
{
unsigned char i = 8;
while (i--) {
SCL_L();
i2c_delay();
if (byte & 0x80)
SDA_H();
else
SDA_L();
byte <<= 1;
i2c_delay();
SCL_H();
i2c_delay();
}
SCL_L();
i2c_delay();
}
unsigned char i2c_readByte(void)
{
unsigned char i = 8;
unsigned char byte = 0;
SDA_H();
SDA_Read();
while (i--)
{
byte <<= 1;
SCL_L();
i2c_delay();
SCL_H();
i2c_delay();
if (SDA_Read())
{
byte |= 0x01;
}
}
SCL_L();
i2c_delay();
return byte;
}
void SHT3X_WriteCMD(unsigned int cmd)
{
i2c_star();
i2c_sendByte(i2cAddWrite_8bit);
i2c_waitAck();
i2c_sendByte(cmd>>8);
i2c_waitAck();
i2c_sendByte(cmd);
i2c_waitAck();
i2c_stop();
}
void SHT3X_SetPeriodicMeasurement(void)
{
SHT3X_WriteCMD(CMD_MEAS_PERI_2_H);
}
//讀取SHT30寄存器狀態(tài)
void SHT3X_ReadState(unsigned char *temp)
{
i2c_star();
i2c_sendByte(i2cAddWrite_8bit);
i2c_waitAck();
i2c_sendByte(0xf3);
i2c_waitAck();
i2c_sendByte(0X2d);
i2c_waitAck();
i2c_star();
i2c_sendByte(i2cAddRead_8bit);
i2c_waitAck();
temp[0] = i2c_readByte();//高
i2c_ack();
temp[1] = i2c_readByte();//低
i2c_ack();
temp[2] = i2c_readByte();//校驗(yàn)
i2c_noAck();
i2c_stop();
}
//讀取SHT30結(jié)果
void SHX3X_ReadResults(unsigned int cmd, unsigned char *p)
{
i2c_star();
i2c_sendByte(i2cAddWrite_8bit);
i2c_waitAck();
i2c_sendByte(cmd>>8);
i2c_waitAck();
i2c_sendByte(cmd);
i2c_waitAck();
i2c_star();
i2c_sendByte(i2cAddRead_8bit);
if(i2c_waitAck()==0){
i2c_delay();
i2c_delay();
i2c_delay();
p[0] = i2c_readByte();//溫度高
i2c_ack();
p[1] = i2c_readByte();//溫度低
i2c_ack();
p[2] = i2c_readByte();//校驗(yàn)
i2c_ack();
p[3] = i2c_readByte();//濕度高
i2c_ack();
p[4] = i2c_readByte();//濕度低
i2c_ack();
p[5] = i2c_readByte();//校驗(yàn)
i2c_noAck();
i2c_stop();
}
}
//校驗(yàn)
unsigned char SHT3X_CalcCrc(unsigned char *data, unsigned char nbrOfBytes)
{
unsigned char bit; // bit mask
unsigned char crc = 0xFF; // calculated checksum
unsigned char byteCtr; // byte counter
// calculates 8-Bit checksum with given polynomial
for(byteCtr = 0; byteCtr < nbrOfBytes; byteCtr++) {
crc ^= (data[byteCtr]);
for(bit = 8; bit > 0; --bit) {
if(crc & 0x80) {
crc = (crc << 1) ^ POLYNOMIAL;
} else {
crc = (crc << 1);
}
}
}
return crc;
}
//校驗(yàn)檢測
unsigned char SHT3X_CheckCrc(unsigned char *pdata, unsigned char nbrOfBytes, unsigned char checksum)
{
unsigned char crc;
crc = SHT3X_CalcCrc(pdata, nbrOfBytes);// calculates 8-Bit checksum
if(crc != checksum)
{
return 1;
}
return 0;
}
//計(jì)算溫度
unsigned int SHT3X_CalcTemperature(unsigned int rawValue)
{
// calculate temperature
unsigned int temp;
temp = (175 * (float)rawValue / 65535 - 45) ; // T = -45 + 175 * rawValue / (2^16-1)
return temp;
}
//計(jì)算濕度
unsigned char SHT3X_CalcRH(unsigned int rawValue)
{
// calculate relative humidity [%RH]
unsigned char temp1 = (100 * (float)rawValue / 65535) ; // RH = rawValue / (2^16-1) * 10
return temp1;
}
//讀取溫度---20ms即可讀取完成
void SHT_GetValue(void)
{
unsigned char temp = 0;
unsigned int dat;
unsigned char p[3];
unsigned char cnt;
unsigned char tem_status,hum_status;
cnt = 0;
tem_status = 0;
hum_status = 0;
while(cnt++<2){
SHX3X_ReadResults(CMD_FETCH_DATA, buffer);//獲取溫度濕度
p[0] = buffer[0];
p[1] = buffer[1];
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
下載:
sht30_dis.zip
(3.67 KB, 下載次數(shù): 767)
2018-2-2 10:17 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhangshoubu
時(shí)間:
2018-4-2 15:32
根本不能用,騙分
作者:
~IOT夙愿
時(shí)間:
2018-4-28 21:20
下來試試
作者:
aaron96031
時(shí)間:
2018-5-3 09:04
可以去參考下,不能完全依靠
作者:
heyangfengyue
時(shí)間:
2018-7-2 10:00
謝謝分享,什么時(shí)候可以下載呢
作者:
wuanxian
時(shí)間:
2018-7-7 16:47
謝謝分享,什么時(shí)候可以下載呢
作者:
wuanxian
時(shí)間:
2018-7-7 18:37
我的可以下
作者:
jiaximodo
時(shí)間:
2018-7-10 09:44
下來參考一下!!!
作者:
hhk001
時(shí)間:
2018-7-25 17:21
可以下載下來參考一下~
作者:
dinghx
時(shí)間:
2018-8-11 20:30
謝謝分享,不知道嫩不嫩用
作者:
xxianhua
時(shí)間:
2018-8-22 20:21
謝謝分享,什么時(shí)候可以下載呢
作者:
qzz1314521
時(shí)間:
2018-8-27 16:42
你再好好看看數(shù)據(jù)手冊 GPIO
是PB6-->SCL PB7-->SDA 而不是你說的 PB7 |--> SCL PB6 |--> SDA
作者:
qzz1314521
時(shí)間:
2018-8-27 16:42
你gpio 使用錯(cuò)誤了
作者:
jxsunyao
時(shí)間:
2018-9-7 09:01
非常好的一個(gè)程序
作者:
liu281469315
時(shí)間:
2018-9-21 15:53
感謝提供源碼,剛好做這個(gè)項(xiàng)目,無線發(fā)送
作者:
ebingyu
時(shí)間:
2018-10-11 17:45
學(xué)習(xí)了
作者:
遇見1111111
時(shí)間:
2018-11-24 18:18
感謝分享,stm32自帶的iic太難用了,果斷拋棄了
作者:
kingbaobo
時(shí)間:
2018-12-11 09:37
SHT35可以用這個(gè)程序調(diào)試嗎?在做一個(gè)項(xiàng)目,用到sht35
作者:
pm1981
時(shí)間:
2018-12-28 14:40
參考一下
作者:
yuri_su
時(shí)間:
2019-3-23 11:26
軟件IIC,我喜歡
作者:
yo_mmmmm
時(shí)間:
2019-3-27 11:49
讀回來都是00 00啊樓主
作者:
zzt223
時(shí)間:
2019-4-7 22:45
為什么我讀到的溫度值,用串口發(fā)回來是80多
作者:
hpdell
時(shí)間:
2019-4-8 16:41
灰常給力呀
作者:
nb1123
時(shí)間:
2019-4-10 10:33
感謝分享
作者:
yanglq0822
時(shí)間:
2019-6-19 10:53
好東西!!!!
作者:
hollandcy
時(shí)間:
2019-7-31 09:04
在找這東西 希望能用到
作者:
pwtpwt
時(shí)間:
2020-2-6 21:31
太好了,正好crc效驗(yàn)沒有搞出來,可以參考一下
作者:
pwtpwt
時(shí)間:
2020-2-6 21:35
上當(dāng)了,程序根本就不齊,還差東西,SHT3X_CalcCrc()中的data[]在哪里,根本就沒有定義,上當(dāng)上當(dāng),大家不要下
作者:
guolh
時(shí)間:
2021-4-29 09:20
正準(zhǔn)備用這東西,多謝分享!
作者:
lkmtdkjpl
時(shí)間:
2022-10-17 21:08
正準(zhǔn)備用這東西,多謝分享!
作者:
煙浮世間
時(shí)間:
2023-5-2 22:04
還有一個(gè)main.h也沒有
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美一级在线观看
|
中文字幕一区在线观看
|
懂色av一区二区三区
|
91久久
|
欧美日韩一区二
|
四虎黄色片
|
成人网在线观看
|
精品一区二区三区在线观看
|
午夜在线免费视频
|
av高清不卡
|
四虎久久久
|
国产一级特黄aaa大片
|
日韩欧美高清视频
|
国产乱码精品一品二品
|
久久久精品网
|
日韩国产一区二区
|
欧美黄色免费
|
久久精品国产免费
|
国产一区二区三区在线
|
久草青青草
|
欧美日韩中文字幕在线观看
|
中文字幕视频一区
|
超碰免费在线
|
五月婷在线
|
精品视频一区二区
|
欧美日韩a
|
毛片网站视频
|
www久久久
|
日韩小视频在线观看
|
日本不卡一区二区
|
激情高潮到大叫狂喷水
|
少妇xxxx69
|
青娱乐福利视频
|
久久在线
|
国产三级黄色片
|
色接久久
|
青久久
|
久久久精品一区二区
|
久精品视频
|
国产黄色片在线观看
|
国产片一区二区
|