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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2038|回復: 11
打印 上一主題 下一主題
收起左側

DS18B20一直顯示0,實物仿真都不行,各位能不能幫我看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:1109789 發表于 2024-1-21 10:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我做了一個STM32驅動DS18B20在LCD1602上顯示溫度,時序我檢查了沒問題,但是仿真和實物都不行,一直顯示0,各位大佬能不能幫幫我,感謝
DS18B20.C
void DS18B20_GPIO_Init(void)
{
                GPIO_InitTypeDef  GPIO_InitStructure;
      
                RCC_APB2PeriphClockCmd(RCC_DS18B20_PORT, ENABLE);         
               
                GPIO_InitStructure.GPIO_Pin = DS18B20_GPIO_PIN;                              
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(DS18B20_GPIO_PORT, &GPIO_InitStructure);

                GPIO_SetBits(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN);   
}
u8 DS18B20_Init(void)
{
          unsigned char wait=0;
            
                DS18B20_IO_OUT();
         DS18B20_OUT_0;     
          delay_us(750);     
          DS18B20_OUT_1;     
          delay_us(15);      
          DS18B20_IO_IN();  
          while(READ_DS18B20_IO && wait++<200)delay_us(1);
          if(wait>=200)return 1;
          else wait=0;
          while(!READ_DS18B20_IO && wait++<240)delay_us(1);
          if(wait>=240)return 1;
          else return 0;
}
unsigned char DS18B20_ReadByte(void)
{
                unsigned char i;
    unsigned char dat = 0;

    for (i=0; i<8; i++)            
    {
        dat >>= 1;                 
                          DS18B20_IO_OUT();           
        DS18B20_OUT_0;              
        delay_us(2);               
        DS18B20_OUT_1;              
                          DS18B20_IO_IN();            
        delay_us(12);               
        if(READ_DS18B20_IO) dat |= 0x80;   
        delay_us(60);               
    }

    return dat;
}
void DS18B20_WriteByte(unsigned char dat)
{
          unsigned char i;
          unsigned char temp;
      
                DS18B20_IO_OUT();
    for (i=1; i<=8; i++)
                {
                                        temp = dat & 0x01;  
                                        dat  = dat >> 1;
                                        if (temp)
                                        {
                                                        DS18B20_OUT_0;
                                                        delay_us(2);                           
                                                        DS18B20_OUT_1;
                                                        delay_us(60);            
                                        }
                                        else
                                        {
                                                        DS18B20_OUT_0;
                                                        delay_us(60);            
                                                        DS18B20_OUT_1;
                                                        delay_us(2);                          
                                        }               
                }
}
float ReadTemperature(void)
{
    unsigned char TPH;                                                        
    unsigned char TPL;                                                        
    short i16=0;
    float f32=0;

          DS18B20_Init();
    DS18B20_WriteByte(0xCC);  
    DS18B20_WriteByte(0x44);   
    DS18B20_Init();
    DS18B20_WriteByte(0xCC);        
    DS18B20_WriteByte(0xBE);        
    TPL = DS18B20_ReadByte();      
    TPH = DS18B20_ReadByte();      
    i16 = 0;
    i16 = (TPH<<8) |TPL;                                
    f32 = i16 * 0.0625;                                
    return(f32);                                       
}
main.c調用
temperature=ReadTemperature();
LCD_Write_Char(5,0,temperature/100+0x30);
LCD_Write_Char(6,0,temperature%100/10+0x30);

附件太大了上傳不了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:275826 發表于 2024-1-21 20:20 | 只看該作者
delay_us(2);延時函數時間不對吧
回復

使用道具 舉報

板凳
ID:1109789 發表于 2024-1-22 11:18 | 只看該作者
tyrl800 發表于 2024-1-21 20:20
delay_us(2);延時函數時間不對吧

你說的是讀的還是寫的
回復

使用道具 舉報

地板
ID:140489 發表于 2024-1-22 12:00 | 只看該作者
多半是時序不對,用邏輯分析儀測下delay_us();延時函數的延時對不對
回復

使用道具 舉報

5#
ID:275826 發表于 2024-1-22 14:05 | 只看該作者
sanzi 發表于 2024-1-22 11:18
你說的是讀的還是寫的

延時函數看不到,時間太快了不行
回復

使用道具 舉報

6#
ID:69038 發表于 2024-1-22 15:00 | 只看該作者
弱弱地問一句:在單總線讀狀態時,你的IO配置有改為輸入了嗎?
DS18B20_IO_OUT();//這個原型是什么樣的?
DS18B20_IO_IN(); //這個原型又是什么樣的?
回復

使用道具 舉報

7#
ID:226055 發表于 2024-1-23 09:39 | 只看該作者
    1、一定確保硬件沒問題==單總線上有且只有一個上拉電阻,各元件是好的,DS18B20方向是對的。
    2、接下來考慮軟件的事情。那么重點就是DS18B20時序:


   3、STM32移植起來很方便,下面給下手頭艾克姆STM32F103ZET6的DS18B20的例子,可以先使用這個例子測試下硬件是不是好的。程序見附件




DS18B20.rar

1 MB, 下載次數: 4

回復

使用道具 舉報

8#
ID:1109789 發表于 2024-1-24 11:36 | 只看該作者
zhuls 發表于 2024-1-22 15:00
弱弱地問一句:在單總線讀狀態時,你的IO配置有改為輸入了嗎?
DS18B20_IO_OUT();//這個原型是什么樣的? ...

#define DS18B20_IO_IN()  {DS18B20_GPIO_PORT->CRH&=0xFFFFFFF0;DS18B20_GPIO_PORT->CRH|=0x00000008;}
#define DS18B20_IO_OUT() {DS18B20_GPIO_PORT->CRH&=0xFFFFFFF0;DS18B20_GPIO_PORT->CRH|=0x00000003;}
回復

使用道具 舉報

9#
ID:1109789 發表于 2024-1-24 16:35 | 只看該作者
tyrl800 發表于 2024-1-22 14:05
延時函數看不到,時間太快了不行
static u8  fac_us=0;
static u16 fac_ms=0;


void delay_init()         
{
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);        
        fac_us=SystemCoreClock/8000000;        
        fac_ms=(u16)fac_us*1000;
}                                                                    
                                                                                      
void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us;
        SysTick->VAL=0x00;        
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;         
        do
        {
                temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;      
        SysTick->VAL =0X00;      
}

void delay_ms(u16 nms)
{                                    
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;
        SysTick->VAL =0x00;           
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;         
        do
        {
                temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;      
        SysTick->VAL =0X00;      
}

回復

使用道具 舉報

10#
ID:1109789 發表于 2024-1-25 15:37 | 只看該作者
這是仿真

仿真.zip

34.25 KB, 下載次數: 3

回復

使用道具 舉報

11#
ID:1109789 發表于 2024-2-4 12:21 | 只看該作者
實物可以了但是仿真不行
回復

使用道具 舉報

12#
ID:1100218 發表于 2024-4-23 21:09 | 只看該作者
請問解決了嗎 我也是這樣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线一区二区三区 | 黄色a一级片 | 日本高清视频www | 午夜国产一区 | 成人玩具h视频 | 99久久精品国产一区二区三区 | 午夜tv | 国产一区二区自拍 | 久久精品视频一区二区 | 亚洲福利网站 | 国产在线观看一区二区三区 | 毛片一级片 | 日韩免费看片 | 亚洲福利专区 | 欧美一级视频 | 亚洲欧美网站 | 99在线播放 | av免费网站| 97国产在线 | 亚洲av毛片成人精品 | 91久久综合亚洲鲁鲁五月天 | 午夜视频在线播放 | 97超碰资源站 | 欧美日韩黄 | 天堂91| 免费av在线网站 | 久久免费国产视频 | 草少妇 | 三a毛片 | 好吊妞这里只有精品 | 亚洲高清视频在线观看 | 伊久久 | 亚洲国产精品自拍 | 亚洲高清免费 | 九月色婷婷| 一级片免费| 中文字幕精品视频 | 国产xxx | 久草视频免费看 | 四虎海外| av一区二区三区四区 |