資源簡介
基于STM32F103的SHT11溫濕度傳感器采集程序

代碼片段和文件信息
/*************************************************
?*
?*?????????DS10采集程序
?*
?*?????????
?*????????
?*?????????
?*?????????
?***************************************************/
#include?“dsh10.h“
#include?“delay.h“
//溫度轉換結果
????float?TempResult;
????//濕度轉換結果
????float?HumResult;
?
/*???PA5PA4??????*/
void?Dsh10_Config(void)
{
???GPIO_InitTypeDef?GPIO_InitStructure;
???/*?Enable?GPIOC??clock?*/
??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB?ENABLE);
??GPIO_InitStructure.GPIO_Pin?=??DS_DATA_BIT|DS_CLK_BIT;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;
??GPIO_InitStructure.GPIO_Speed?=GPIO_Speed_50MHz;
??GPIO_Init(GPIOB?&GPIO_InitStructure);
??
}
void?DS_DATA_GPIO_OUTPUT(void)
{
??GPIO_InitTypeDef?GPIO_InitStructure;
???/*?Enable?GPIOC??clock?*/
??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB?ENABLE);
??GPIO_InitStructure.GPIO_Pin?=??DS_DATA_BIT;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;
??GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
??GPIO_Init(GPIOB?&GPIO_InitStructure);
}
void?DS_DATA_GPIO_INPUT(void)
{
??GPIO_InitTypeDef?GPIO_InitStructure;
???/*?Enable?GPIOC??clock?*/
??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB?ENABLE);
??GPIO_InitStructure.GPIO_Pin?=??DS_DATA_BIT;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_IN_FLOATING;//設置為輸入
?//?GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
??GPIO_Init(GPIOB?&GPIO_InitStructure);
}
/*
--------------------------------------
*這里采用typ這里的典型時序
f=0.1MHzT=10uS如何實現(xiàn)nS的延時?
采用野火所提供的延時,大概f=10000Hz
--------------------------------------
*/
/*
*
*????name:????????DS_Start
*????function:????sht10?start?pragram
*???????????????input/output??NON
*
*
*/
void?DS_Start(void)
{
DS_DATA_GPIO_OUTPUT();
??DS_DATA_H();
DS_CLK_L();
??delay_us(16);????//數據線高電平
DS_CLK_H();
delay_us(16);?????//時鐘線拉高
??DS_DATA_L();
??delay_us(16);
??DS_CLK_L();
??delay_us(36);?
??DS_CLK_H();
delay_us(16);
DS_DATA_H();
delay_us(16);
DS_CLK_L();
delay_us(16);
//delay_us(36);
??DS_DATA_L();
delay_us(16);???////整個時序到這里的時候就已經結束了,后面緊跟著測量了
}
/*
?*嚴格按照啟動時序之后的時序圖來寫
?*功能:測量12bit的數據
?*輸入:
?*寫一個字節(jié)到SHT10???CLK周期大概是30uS
?*/
unsigned?int??WriteCmd(unsigned?char?cmd)
{
??int?i;???
//DS_DATA_GPIO_OUTPUT();
//delay_us(36);??????????????????????//先延時一段時間,在開始時序之后
??????
for(i=0;i<8;i++)
??{
??????
if((cmd< {
// delay_us(1);
DS_DATA_H();
}
else{
DS_DATA_L();
??????????}
//delay_us(1);//是否應該先延時一點時間再給CLK?
???????CLK();?
?}
//ACK
????????DS_DATA_GPIO_INPUT();
???????//?CLK();?
????????DS_CLK_H();
????????????????????????????????//問題應該在這
????????do???????????????????????/*?這里時序有問題???*/
????????delay_us(1);
????????while(!DS_DATA_STATE);//ACK校驗,在CLK高的時候數據線被拉低
//LED2(0);
DS_CLK_L();
//時鐘拉低
delay_us(16);??
while(DS_DATA_STATE)//等待DATA被拉高
//LED1(0);
// delay_us(1000000);
do
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-04-29?15:59??SHT10\
?????文件????????5978??2016-08-04?17:44??SHT10\Dsh10.c
?????文件?????????990??2016-08-04?17:45??SHT10\dsh10.h
評論
共有 條評論