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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1835|回復(fù): 11
收起左側(cè)

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

[復(fù)制鏈接]
ID:1109789 發(fā)表于 2024-1-21 10:39 | 顯示全部樓層 |閱讀模式
我做了一個STM32驅(qū)動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調(diào)用
temperature=ReadTemperature();
LCD_Write_Char(5,0,temperature/100+0x30);
LCD_Write_Char(6,0,temperature%100/10+0x30);

附件太大了上傳不了
回復(fù)

使用道具 舉報

ID:275826 發(fā)表于 2024-1-21 20:20 | 顯示全部樓層
delay_us(2);延時函數(shù)時間不對吧
回復(fù)

使用道具 舉報

ID:1109789 發(fā)表于 2024-1-22 11:18 | 顯示全部樓層
tyrl800 發(fā)表于 2024-1-21 20:20
delay_us(2);延時函數(shù)時間不對吧

你說的是讀的還是寫的
回復(fù)

使用道具 舉報

ID:140489 發(fā)表于 2024-1-22 12:00 | 顯示全部樓層
多半是時序不對,用邏輯分析儀測下delay_us();延時函數(shù)的延時對不對
回復(fù)

使用道具 舉報

ID:275826 發(fā)表于 2024-1-22 14:05 | 顯示全部樓層
sanzi 發(fā)表于 2024-1-22 11:18
你說的是讀的還是寫的

延時函數(shù)看不到,時間太快了不行
回復(fù)

使用道具 舉報

ID:69038 發(fā)表于 2024-1-22 15:00 | 顯示全部樓層
弱弱地問一句:在單總線讀狀態(tài)時,你的IO配置有改為輸入了嗎?
DS18B20_IO_OUT();//這個原型是什么樣的?
DS18B20_IO_IN(); //這個原型又是什么樣的?
回復(fù)

使用道具 舉報

ID:226055 發(fā)表于 2024-1-23 09:39 | 顯示全部樓層
    1、一定確保硬件沒問題==單總線上有且只有一個上拉電阻,各元件是好的,DS18B20方向是對的。
    2、接下來考慮軟件的事情。那么重點就是DS18B20時序:
DS18B20發(fā)起時序.jpg DS18B20發(fā)起時序2.jpg DS18B20讀寫時序1.jpg DS18B20讀寫時序2.jpg DS18B20讀寫時序3.jpg

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



DS18B20.rar

1 MB, 下載次數(shù): 4

回復(fù)

使用道具 舉報

ID:1109789 發(fā)表于 2024-1-24 11:36 | 顯示全部樓層
zhuls 發(fā)表于 2024-1-22 15:00
弱弱地問一句:在單總線讀狀態(tài)時,你的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;}
回復(fù)

使用道具 舉報

ID:1109789 發(fā)表于 2024-1-24 16:35 | 顯示全部樓層
tyrl800 發(fā)表于 2024-1-22 14:05
延時函數(shù)看不到,時間太快了不行
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;      
}

回復(fù)

使用道具 舉報

ID:1109789 發(fā)表于 2024-1-25 15:37 | 顯示全部樓層
這是仿真

仿真.zip

34.25 KB, 下載次數(shù): 3

回復(fù)

使用道具 舉報

ID:1109789 發(fā)表于 2024-2-4 12:21 | 顯示全部樓層
實物可以了但是仿真不行
回復(fù)

使用道具 舉報

ID:1100218 發(fā)表于 2024-4-23 21:09 | 顯示全部樓層
請問解決了嗎 我也是這樣
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久网站 | www.99热这里只有精品 | 国产高清一区二区三区 | 亚洲欧美第一视频 | 国产男女猛烈无遮掩视频免费网站 | 97久久精品午夜一区二区 | 成人亚洲 | 国产高清视频一区二区 | 亚洲精品一区二区三区中文字幕 | 久久精品一级 | 日韩一区中文字幕 | 偷拍亚洲色图 | 91在线精品播放 | 中文字幕在线一区 | 北条麻妃99精品青青久久主播 | 国产精品久久国产愉拍 | 国产日韩精品在线 | 日韩精品一区二区三区在线播放 | 精品欧美一区二区精品久久久 | 久久国产精品无码网站 | 亚洲精品免费观看 | 337p日本欧洲亚洲大胆精蜜臀 | 久草网站| 日韩在线播放av | 最近最新中文字幕 | 久久噜噜噜精品国产亚洲综合 | 日韩精品一区二区三区中文字幕 | 久久久久国产一级毛片高清网站 | 亚州av| 欧美一区二区免费在线 | 在线观看中文字幕 | 日韩精品免费在线 | 涩涩操 | 午夜免费视频 | 四虎免费视频 | 日日夜夜精品视频 | 久久草视频| 一区二区三区亚洲 | 最新91在线| 国产日韩精品在线 | 欧美一区二区三区高清视频 |