欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STM32驅動溫濕度傳感器SHT3X的代碼,自己在用的,能用。
[打印本頁]
作者:
firstzzc
時間:
2018-7-11 17:01
標題:
STM32驅動溫濕度傳感器SHT3X的代碼,自己在用的,能用。
0.png
(40.66 KB, 下載次數: 106)
下載附件
2018-7-11 17:32 上傳
單片機源程序如下:
#include "sht3x.h"
#include "mdelay.h"
// SHT3x用到的IO腳
#define SCL PBout(6)
#define SDAOUT PBout(7)
#define SDAIN PBin(7)
// SHT3x的地址(ADDR引腳已經硬件接地)
#define SLAVEADDRESS 0x88 // ( 0x44<<1 )
// SHT3x管腳初始化
void Sht3x_Init(void)
{
RCC->APB2ENR |= (1<<3); // PB口時鐘使能
GPIOB->ODR |= (3<<6); // PB6、PB7輸出高電平
GPIOB->CRL &= 0x00ffffff; // PB6、PB7設為開漏輸出
GPIOB->CRL |= 0x77000000;
}
static void SDAsetOUT(void)
{
GPIOB->CRL &= 0x0fffffff; // 設置為開漏輸出
GPIOB->CRL |= 0x70000000;
}
static void SDAsetIN(void)
{
GPIOB->CRL &= 0x0fffffff; // 設置為三態輸入
GPIOB->CRL |= 0x40000000;
}
static void I2C_Start(void)
{
SDAsetOUT();
SDAOUT = 1; // 拉高數據線
SCL = 1; // 拉高時鐘線
udelay(5); // 延時
SDAOUT = 0; // 產生下降沿
udelay(5); // 延時
SCL = 0; // 拉低時鐘線
}
static void I2C_Stop(void)
{
SDAsetOUT();
SDAOUT = 0; // 拉低數據線
SCL = 1; // 拉高時鐘線
udelay(5); // 延時
SDAOUT = 1; // 產生上升沿
udelay(5); // 延時
}
static void I2C_SendACK(u8 ack)
{
SDAsetOUT();
SDAOUT = ack; // 寫應答信號
udelay(5);
SCL = 1; // 拉高時鐘線
udelay(5); // 延時
SCL = 0; // 拉低時鐘線
SDAOUT = 1;
udelay(20); // 延時
}
static u8 I2C_RecvACK(void)
{
u8 temp;
SDAsetIN();
SCL = 1; // 拉高時鐘線
udelay(5); // 延時
temp = SDAIN; // 讀應答信號
SCL = 0; // 拉低時鐘線
udelay(5); // 延時
return temp;
}
static void I2C_SendByte(u8 dat)
{
u8 i;
SDAsetOUT();
for ( i=0; i<8; i++ ) // 8位計數器
{
SDAOUT = ( dat&0x80 ) ? 1 : 0 ;
dat <<= 1;
SCL = 1; // 拉高時鐘線
udelay(5); // 延時
SCL = 0; // 拉低時鐘線
udelay(5); // 延時
}
I2C_RecvACK(); // 接收ACK
}
static u8 I2C_RecvByte(void)
{
u8 i;
u8 dat = 0;
for ( i=0; i<8; i++ ) // 8位計數器
{
dat <<= 1;
SCL = 1; // 拉高時鐘線
udelay(5); // 延時
dat |= SDAIN; // 讀數據
SCL = 0; // 拉低時鐘線
udelay(5); // 延時
}
return dat;
}
void SHT3X_GetTempAndHumi(u16 cmd, s16 *temp, u16 *humi)
{
u8 bytes[2];
// u8 checksum;
u16 temperature,humidity;
I2C_Start(); // 起始信號
I2C_SendByte( SLAVEADDRESS ); // 發送設備地址+寫信號
I2C_SendByte( cmd>>8 ); // 發送16BIT的命令碼
I2C_SendByte( cmd&0x00ff );
//mdelay( 30 ); // 延時等待傳感器檢測溫濕度
mdelay(20);
I2C_Start();
I2C_SendByte(SLAVEADDRESS+1); // 發送設備地址+讀信號
bytes[0] = I2C_RecvByte(); // 讀取溫度
I2C_SendACK( 0 );
bytes[1] = I2C_RecvByte(); //
I2C_SendACK( 0 );
//checksum = I2C_RecvByte(); // 讀取CRC
I2C_RecvByte(); // 讀取CRC
I2C_SendACK( 0 );
temperature = bytes[0];
temperature <<= 8;
temperature |= bytes[1];
bytes[0] = I2C_RecvByte(); // 讀取濕度
I2C_SendACK( 0 );
bytes[1] = I2C_RecvByte(); //
I2C_SendACK( 0 );
//checksum = I2C_RecvByte(); // 讀取CRC
I2C_RecvByte(); // 讀取CRC
I2C_SendACK( 1 );
humidity = bytes[0];
humidity <<= 8;
humidity |= bytes[1];
I2C_Stop(); // 發送停止信號
*temp = ((s32)temperature*1750)/65535-450; // 將溫度原始數據轉換成攝氏度數據
*humi = ((u32)humidity*1000)/65535; // 將濕度原始數據轉換成相對濕度
}
復制代碼
所有資料51hei提供下載:
sht3x.zip
(1.65 KB, 下載次數: 232)
2018-7-11 17:00 上傳
點擊文件名下載附件
STM32驅動SHT3X傳感器
下載積分: 黑幣 -5
作者:
alai318
時間:
2018-7-12 09:32
如果單獨測溫度比較簡單,用LM35直接ADC測電壓就好,濕度麻煩
作者:
alai318
時間:
2018-7-12 13:50
濕敏電阻也好像也以用ADC方式測出電壓換算.
作者:
ebingyu
時間:
2018-10-10 10:51
學習了,謝謝樓主。
作者:
jijkf
時間:
2018-10-11 20:04
你是用什么顯示的
作者:
jijkf
時間:
2018-10-11 20:09
你好,你是用什么來顯示的
作者:
shixuegui
時間:
2018-10-25 09:52
找了很久了,多謝分享
作者:
shixuegui
時間:
2018-10-25 09:53
你好,你是用什么來顯示的啊
作者:
leihao1998810
時間:
2018-12-10 16:05
想知道你的16位命令碼是什么,我照著寫了,但是SHT不回應答信號
作者:
yph2101224133
時間:
2019-1-11 21:58
謝謝分享
作者:
1565446
時間:
2019-1-26 23:15
濕度一直是百分百是為何
作者:
dpj121
時間:
2019-5-29 12:10
謝謝樓主
作者:
林龍龍
時間:
2019-6-28 13:54
官方代碼太復雜了
作者:
dongbaolu
時間:
2019-6-28 18:07
學習了,謝謝
作者:
dongbaolu
時間:
2019-6-28 18:08
學習了,謝謝樓主!!1
作者:
wenqian
時間:
2020-2-26 11:22
謝謝了 分享精神值得贊賞
作者:
mos1971
時間:
2020-2-29 02:05
SHT3X學習中,感謝樓主分享
作者:
526637566@qq.co
時間:
2020-5-10 22:37
謝謝分享點贊
作者:
hejin123
時間:
2020-8-18 15:31
這是屬于用GPIO口模擬的IIC嗎
作者:
迷失森林
時間:
2022-5-15 18:04
用什么顯示的?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1