• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: 传感器  

资源简介

基于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如何实现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的数据
 *输入:
 *写一个字节到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

评论

共有 条评论