久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5145|回復: 4
打印 上一主題 下一主題
收起左側(cè)

求大佬解答下SHT30程序方面的問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:187258 發(fā)表于 2018-6-19 21:09 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
求大佬解答下SHT30 的程序問題

TIM圖片20180619210755.png (58.35 KB, 下載次數(shù): 37)

TIM圖片20180619210755.png

TIM圖片20180619210752.png (93.3 KB, 下載次數(shù): 45)

TIM圖片20180619210752.png

TIM圖片20180619210749.png (103.04 KB, 下載次數(shù): 58)

TIM圖片20180619210749.png

TIM圖片20180619210744.png (82.39 KB, 下載次數(shù): 53)

TIM圖片20180619210744.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:354780 發(fā)表于 2018-6-20 10:06 | 只看該作者
因CPU連接的外圍器件較多,一般放在中心區(qū)域,外圍器件根據(jù)與CPU的連接關(guān)系而確定布局位置。原則是連線最短、過孔最少
回復

使用道具 舉報

板凳
ID:187258 發(fā)表于 2018-6-20 22:52 | 只看該作者
wooooooo 發(fā)表于 2018-6-20 10:06
因CPU連接的外圍器件較多,一般放在中心區(qū)域,外圍器件根據(jù)與CPU的連接關(guān)系而確定布局位置。原則是連線最短 ...

什么意思,請問我這個是程序的問題還是硬件的問題啊,謝謝
回復

使用道具 舉報

地板
ID:400591 發(fā)表于 2018-9-20 16:33 | 只看該作者
樓主,啥問題?
回復

使用道具 舉報

5#
ID:400591 發(fā)表于 2019-10-5 20:47 | 只看該作者
我正在用的SHT30程序,模擬時序:

void IIC_Init(void)
{                                             
  GPIO_InitTypeDef GPIO_InitStructure;
        //=============================================================================                         
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);                                                  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_4|GPIO_Pin_1|GPIO_Pin_0;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
/*       
        SCL_1;
        SDA1_1;
        SCL_0;
        SDA1_0;
        SCL_1;
        SDA1_1;
        IIC_SCL_1;
        IIC_SCL_0;
        IIC_SCL_1;
        IIC_SCL_0;

        IIC_SDA1_1;
        IIC_SDA1_0;
        IIC_SDA1_1;
        IIC_SDA1_0;

        IIC_SDA1_1;
        IIC_SDA1_0;
        IIC_SDA1_1;
        IIC_SDA1_0;

        IIC_SDA2_1;
        IIC_SDA2_0;
        IIC_SDA2_1;
        IIC_SDA2_0;
       
        IIC_SDA3_1;
        IIC_SDA3_0;
        IIC_SDA3_1;
        IIC_SDA3_0;

        IIC_SDA4_1;
        IIC_SDA4_0;
        IIC_SDA4_1;
        IIC_SDA4_0;
*/
}
/***********************************************
調(diào)用方式:void I2Cstart(void)
************************************************/
void I2CStart1(void)
{
  SDA1_1;
  SCL_1;
  Delay_Nus(N1);
  SDA1_0;
  Delay_Nus(N1);
  SCL_0;
}
void I2CStart2(void)
{
  SDA2_1;
  SCL_1;
  Delay_Nus(N1);
  SDA2_0;
  Delay_Nus(N1);
  SCL_0;
}
void I2CStart3(void)
{
  SDA3_1;
  SCL_1;
  Delay_Nus(N1);
  SDA3_0;
  Delay_Nus(N1);
  SCL_0;
}
void I2CStart4(void)
{
  SDA4_1;
  SCL_1;
  Delay_Nus(N1);
  SDA4_0;
  Delay_Nus(N1);
  SCL_0;
}
/***********************************************
停止:void I2CStop(void)
************************************************/
void I2CStop1(void)
{
  SCL_0;
  SDA1_0;
  Delay_Nus(N1);
  SCL_1;  Delay_Nus(N2);
  SDA1_1;//stop
  Delay_Nus(N1);
}
void I2CStop2(void)
{
  SCL_0;
  SDA2_0;
  Delay_Nus(N1);
  SCL_1;  Delay_Nus(N2);
  SDA2_1;//stop
  Delay_Nus(N1);
}
void I2CStop3(void)
{
  SCL_0;
  SDA3_0;
  Delay_Nus(N1);
  SCL_1;  Delay_Nus(N2);
  SDA3_1;//stop
  Delay_Nus(N1);
}
void I2CStop4(void)
{
  SCL_0;
  SDA4_0;
  Delay_Nus(N1);
  SCL_1;  Delay_Nus(N2);
  SDA4_1;//stop
  Delay_Nus(N1);
}
/***********************************************
應答:void SendAck(void)
主器件為接收方,從器件為發(fā)送方,應答信號
************************************************/
void SendAck1(void)
{
  SCL_0;
  SDA1_0;//低電平表示應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
void SendAck2(void)
{
  SCL_0;
  SDA2_0;//低電平表示應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
void SendAck3(void)
{
  SCL_0;
  SDA3_0;//低電平表示應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
void SendAck4(void)
{
  SCL_0;
  SDA4_0;//低電平表示應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
/***********************************************
非應答:void SendNotAck(void)
主器件為接收方,從器件為發(fā)送方
************************************************/
void SendNotAck1(void)
{
  SCL_0;
  SDA1_1;//高電平表示非應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
void SendNotAck2(void)
{
  SCL_0;
  SDA2_1;//高電平表示非應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
void SendNotAck3(void)
{
  SCL_0;
  SDA3_1;//高電平表示非應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
void SendNotAck4(void)
{
  SCL_0;
  SDA4_1;//高電平表示非應答
  Delay_Nus(N1);
  SCL_1;
  Delay_Nus(N1);
  SCL_0;
}
/***********************************************
等待應答?unsigned char WaitAck(void)
等待從器件接收方的應答
************************************************/
unsigned char WaitAck1(void)
{
        unsigned char errtime=255;//因故障接收方無ACK,超時值為255
  SDA1_1;//SDA,SCL均高,釋放數(shù)據(jù)線準備接收應答
  SCL_1;  
  Delay_Nus(N1);

  //切換為輸入
  // {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=(u32)8<<20;}//利用上拉此行可省略
  while(GPIOA->IDR&PIN_SDA1)//判斷從設備輸出SDA是否為1,
  {
    errtime--;
    if(!errtime){I2CStop1();SystemError=0x11;return 0;}
  }
  SCL_0;Delay_Nus(N1);
  return 1;
}
unsigned char WaitAck2(void)
{
        unsigned char errtime=255;//因故障接收方無ACK,超時值為255
  SDA2_1;//SDA,SCL均高,釋放數(shù)據(jù)線準備接收應答
  SCL_1;  
  Delay_Nus(N1);

  //切換為輸入
  // {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=(u32)8<<20;}//利用上拉此行可省略
  while(GPIOA->IDR&PIN_SDA2)//判斷從設備輸出SDA是否為1,
  {
    errtime--;
    if(!errtime){I2CStop2();SystemError=0x11;return 0;}
  }
  SCL_0;Delay_Nus(N1);
  return 1;
}
unsigned char WaitAck3(void)
{
        unsigned char errtime=255;//因故障接收方無ACK,超時值為255
  SDA3_1;//SDA,SCL均高,釋放數(shù)據(jù)線準備接收應答
  SCL_1;  
  Delay_Nus(N1);

  //切換為輸入
  // {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=(u32)8<<20;}//利用上拉此行可省略
  while(GPIOA->IDR&PIN_SDA3)//判斷從設備輸出SDA是否為1,
  {
    errtime--;
    if(!errtime){I2CStop3();SystemError=0x11;return 0;}
  }
  SCL_0;Delay_Nus(N1);
  return 1;
}
unsigned char WaitAck4(void)
{
        unsigned char errtime=255;//因故障接收方無ACK,超時值為255
  SDA4_1;//SDA,SCL均高,釋放數(shù)據(jù)線準備接收應答
  SCL_1;  
  Delay_Nus(N1);

  //切換為輸入
  // {GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=(u32)8<<20;}//利用上拉此行可省略
  while(GPIOA->IDR&PIN_SDA4)//判斷從設備輸出SDA是否為1,
  {
    errtime--;
    if(!errtime){I2CStop4();SystemError=0x11;return 0;}
  }
  SCL_0;Delay_Nus(N1);
  return 1;
}
/***********************************************
發(fā)送字節(jié):void I2CSendByte(unsigned char ch)
發(fā)送一個字節(jié)
************************************************/
void I2CSendByte1(unsigned char ch)
{
  unsigned char i=8;
  while(i--)
  {
    if((ch&0x80)==0x80){SDA1_1;}//字節(jié)的最高位為1,SDA=1,否則SDA=0
    else{SDA1_0;}
    ch<<=1;
    Delay_Nus(N1);
    SCL_1;
    Delay_Nus(N1);
    SCL_0;
    Delay_Nus(N1);
  }
}
void I2CSendByte2(unsigned char ch)
{
  unsigned char i=8;
  while(i--)
  {
    if((ch&0x80)==0x80){SDA2_1;}//字節(jié)的最高位為1,SDA=1,否則SDA=0
    else{SDA2_0;}
    ch<<=1;
    Delay_Nus(N1);
    SCL_1;
    Delay_Nus(N1);
    SCL_0;
    Delay_Nus(N1);
  }
}
void I2CSendByte3(unsigned char ch)
{
  unsigned char i=8;
  while(i--)
  {
    if((ch&0x80)==0x80){SDA3_1;}//字節(jié)的最高位為1,SDA=1,否則SDA=0
    else{SDA3_0;}
    ch<<=1;
    Delay_Nus(N1);
    SCL_1;
    Delay_Nus(N1);
    SCL_0;
    Delay_Nus(N1);
  }
}
void I2CSendByte4(unsigned char ch)
{
  unsigned char i=8;
  while(i--)
  {
    if((ch&0x80)==0x80){SDA4_1;}//字節(jié)的最高位為1,SDA=1,否則SDA=0
    else{SDA4_0;}
    ch<<=1;
    Delay_Nus(N1);
    SCL_1;
    Delay_Nus(N1);
    SCL_0;
    Delay_Nus(N1);
  }
}
/***********************************************
接收字節(jié):Byte I2CReceieveByte(void)
接收一個字節(jié)
************************************************/
unsigned char I2CReceieveByte1(void)
{
  unsigned char i=8;
  unsigned char ddata=0;
  SDA1_1;
  while(i--)
  {
    ddata<<=1;
    SCL_0;
    Delay_Nus(N1);//等待從器件送出數(shù)據(jù)
    SCL_1;
    Delay_Nus(N1);
    //切換為輸入
                if(READ_SDA1)ddata++;//非0,
    Delay_Nus(N1);
  }
  return ddata;
}
unsigned char I2CReceieveByte2(void)
{
  unsigned char i=8;
  unsigned char ddata=0;
  SDA2_1;
  while(i--)
  {
    ddata<<=1;
    SCL_0;
    Delay_Nus(N1);//等待從器件送出數(shù)據(jù)
    SCL_1;
    Delay_Nus(N1);
    //切換為輸入
                if(READ_SDA2)ddata++;//非0,
    Delay_Nus(N1);
  }
  return ddata;
}
unsigned char I2CReceieveByte3(void)
{
  unsigned char i=8;
  unsigned char ddata=0;
  SDA3_1;
  while(i--)
  {
    ddata<<=1;
    SCL_0;
    Delay_Nus(N1);//等待從器件送出數(shù)據(jù)
    SCL_1;
    Delay_Nus(N1);
    //切換為輸入
                if(READ_SDA3)ddata++;//非0,
    Delay_Nus(N1);
  }
  return ddata;
}
unsigned char I2CReceieveByte4(void)
{
  unsigned char i=8;
  unsigned char ddata=0;
  SDA4_1;
  while(i--)
  {
    ddata<<=1;
    SCL_0;
    Delay_Nus(N1);//等待從器件送出數(shù)據(jù)
    SCL_1;
    Delay_Nus(N1);
    //切換為輸入
                if(READ_SDA4)ddata++;//非0,
    Delay_Nus(N1);
  }
  return ddata;
}
//
void SHT_INI(void)
{
  I2CStart1();
  I2CSendByte1(0x88);//器件的寫地址
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x20);//
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x2F);//
    Delay_Nus(N2);
  WaitAck1();
}

void SHT_SoftReset(void)
{
  I2CStart1();
  I2CSendByte1(0x88);//器件的寫地址
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x30);//
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0xA2);//
    Delay_Nus(N2);
  WaitAck1();
  I2CStop1();}
void SHT_Heat(void)
{
  I2CStart1();
  I2CSendByte1(0x88);//器件的寫地址
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x30);//
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x6D);//
    Delay_Nus(N2);
  WaitAck1();
  I2CStop1();
}
void SHT_DisHeat(void)
{
  I2CStart1();
  I2CSendByte1(0x88);//器件的寫地址
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x30);//
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x66);//
    Delay_Nus(N2);
  WaitAck1();
  I2CStop1();
}
void ReadSHT1(unsigned char ad,unsigned char count,unsigned char *buff)
{
  unsigned char i;
  I2CStart1();
  I2CSendByte1(0x88);//器件的寫地址
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x2C);//
    Delay_Nus(N2);
  WaitAck1();
  I2CSendByte1(0x06);//
    Delay_Nus(N2);
  WaitAck1();
  I2CStart1();
  I2CSendByte1(0x89);//器件的讀地址
    Delay_Nus(N2);
   WaitAck1();
  SCL_1;//釋放SCL
  //切換為輸入
        //{GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=(u32)8<<20;}//利用上拉此行可省略
  while((GPIOA->IDR&PIN_SCL)==0)//等待轉(zhuǎn)換完畢
  {
    ;
  }
  I2CStart1();
  I2CSendByte1(0x89);//器件的讀地址
    Delay_Nus(N2);
  WaitAck1();
  for(i=0;i<count;i++)//連續(xù)讀取count個數(shù)值
  {
    buff[i]=I2CReceieveByte1();
    if(i!=count-1)SendAck1();//除非最后一個字節(jié),其它都要從MASTER發(fā)應答
  }
  SendNotAck1();
  I2CStop1();
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 香蕉视频一区二区 | 午夜精品一区 | 久久人人网 | 99久久久国产精品 | 国产欧美日韩二区 | 亚洲成人www | av免费看在线 | 91精品国产91综合久久蜜臀 | 天堂网中文字幕在线观看 | 国产线视频精品免费观看视频 | 91精品久久久久久久久 | 99国内精品久久久久久久 | 在线观看免费毛片 | 亚洲精品自在在线观看 | 欧美二区三区 | 国产日韩精品视频 | 人人做人人澡人人爽欧美 | 中文字幕在线视频免费观看 | 国产精品小视频在线观看 | 一级片av| 国产成人亚洲精品 | 日韩高清中文字幕 | 亚洲小视频 | www亚洲精品 | 超碰人人人人 | 精品欧美一区二区精品久久 | 天堂视频免费 | 中文字字幕在线中文乱码范文 | 久久另类视频 | 久久久久久国产精品免费免费男同 | 国产精品久久久久久久免费大片 | 国产清纯白嫩初高生视频在线观看 | 一级在线毛片 | 中文字幕一区二区在线观看 | 中文字幕在线一区二区三区 | 国产精品视频专区 | 久久91精品 | 国产一区二区三区久久久久久久久 | 麻豆一区二区三区精品视频 | 日本在线一区二区 | 欧美一区不卡 |