国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32使用HAL庫(kù)驅(qū)動(dòng)DS18B20

這篇具有很好參考價(jià)值的文章主要介紹了STM32使用HAL庫(kù)驅(qū)動(dòng)DS18B20。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、STM32CubeMx配置IO口

STM32使用HAL庫(kù)驅(qū)動(dòng)DS18B20,stm32,嵌入式硬件,單片機(jī)
因?yàn)镈S18B20是單總線,數(shù)據(jù)接收發(fā)送都是這根線,所以單片機(jī)配置為開(kāi)漏上拉輸出。

2、定時(shí)器配置

因?yàn)镈S18B20對(duì)時(shí)序要求比較嚴(yán)格,建議用定時(shí)器延時(shí)獲得微秒延時(shí)函數(shù)。
STM32使用HAL庫(kù)驅(qū)動(dòng)DS18B20,stm32,嵌入式硬件,單片機(jī)
總線為48M,分頻48,獲得1us定時(shí)時(shí)基。

3、頭文件

#ifndef __DS18B20_H
#define __DS18B20_H

#include "main.h"

// 定義DS18B20相關(guān)命令
#define DS18B20_CMD_SKIP_ROM        0xCC
#define DS18B20_CMD_CONVERT_T       0x44
#define DS18B20_CMD_READ_SCRATCHPAD 0xBE

void DS18B20_Init(void);
uint8_t DS18B20_Reset(void);
void DS18B20_StartConv(void);
float DS18B20_GetTemp(void);

#endif

4、C文件

#include "ds18b20.h"
#include "tim.h"

#define DS18B20_Set(x) 		HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, (GPIO_PinState)(x))
#define DS18B20_Get()	 	HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_Pin)

void DS18B20_WriteByte(uint8_t byte);
uint8_t DS18B20_ReadByte(void);


/*****************************************************************************
* 說(shuō)明:DS18B20的微秒延時(shí)函數(shù)
* 輸入:_usTime時(shí)間
* 輸出:無(wú)
*****************************************************************************/
static void DS18B20_DelayUs(uint16_t _usTime)
{
	__HAL_TIM_SetCounter(&htim1,0);
	__HAL_TIM_ENABLE(&htim1);
	while(__HAL_TIM_GetCounter(&htim1) < _usTime);
	__HAL_TIM_DISABLE(&htim1);
}

/*****************************************************************************
* 說(shuō)明:復(fù)位并檢測(cè)DS18B20的存在
* 主機(jī)和DS18B20做任何通訊前都需要對(duì)其初始化。
* 初始化期間,總線控制器拉低總線并保持480us以上掛在總線上的器件將被復(fù)位,
* 然后釋放總線,等到15-60us,此時(shí)18B20將返回一個(gè)60-240us之間的低電平存在信號(hào)。
* 輸入:無(wú)
* 輸出:1=存在,0=不存在
*****************************************************************************/
uint8_t DS18B20_Reset(void)
{
    uint8_t presence = 0;
    // 拉低總線
    DS18B20_Set(0);
    DS18B20_DelayUs(600);
    
    // 釋放總線
    DS18B20_Set(1);
    DS18B20_DelayUs(60);
    
    // 檢測(cè)DS18B20響應(yīng)
    presence = DS18B20_Get();
    DS18B20_DelayUs(240);
    
    return !presence;
}

/*****************************************************************************
* 說(shuō)明:復(fù)位DS18B20

* 輸入:無(wú)
* 輸出:無(wú)
*****************************************************************************/
void DS18B20_Init(void)
{
    // 復(fù)位DS18B20
    DS18B20_Reset();
    
    // 發(fā)送跳過(guò)ROM命令
    DS18B20_WriteByte(DS18B20_CMD_SKIP_ROM);
}



/*****************************************************************************
* 說(shuō)明:發(fā)送一個(gè)字節(jié)給DS18B20
* 1.總線控制器要產(chǎn)生一個(gè)寫時(shí)序,必須將總線拉低最少1us,
* 2.產(chǎn)生寫0時(shí)序時(shí)總線必須保持低電平60~120us之間,然后釋放總線,
* 3.產(chǎn)生寫1時(shí)序時(shí)在總線產(chǎn)生寫時(shí)序后的15us內(nèi)允許把總線拉高。
* 4.注意:2次寫周期之間至少間隔1us
* 輸入:無(wú)
* 輸出:無(wú)
*****************************************************************************/
void DS18B20_WriteByte(uint8_t byte)
{
    for (uint8_t i = 0; i < 8; i++)
    {
        // 發(fā)送低位
        DS18B20_Set(0);
        DS18B20_DelayUs(2);
        
        // 發(fā)送高位,根據(jù)byte的第i位來(lái)決定
        if (byte & (1 << i))
        {
            DS18B20_Set(1);
        }
        
        DS18B20_DelayUs(60);
        
        // 釋放總線
        DS18B20_Set(1);
    }
}
 

/*****************************************************************************
* 說(shuō)明:從DS18B20讀取一個(gè)字節(jié)
* 1.總線控制器要產(chǎn)生一個(gè)讀時(shí)序,必須將總線拉低至少1us,
* 2.然后釋放總線,在讀信號(hào)開(kāi)始后15us內(nèi)總線控制器采樣總線數(shù)據(jù),讀一位數(shù)據(jù)至少保持在60us以上。
* 3.注意:2次讀周期之間至少間隔1us
* 輸入:無(wú)
* 輸出:無(wú)
*****************************************************************************/
uint8_t DS18B20_ReadByte(void)
{
    uint8_t byte = 0;
    
    for (uint8_t i = 0; i < 8; i++)
    {
        // 發(fā)送低位
        DS18B20_Set(0);
        DS18B20_DelayUs(2);
        
        // 釋放總線
        DS18B20_Set(1);
        DS18B20_DelayUs(8);
        
        // 讀取高位數(shù)據(jù)
        if (DS18B20_Get())
        {
            byte |= (1 << i);
        }
        
        DS18B20_DelayUs(50);
    }
    
    return byte;
}

/*****************************************************************************
* 說(shuō)明:?jiǎn)?dòng)DS18B20轉(zhuǎn)換
* 輸入:無(wú)
* 輸出:無(wú)
*****************************************************************************/
void DS18B20_StartConv(void)
{
	DS18B20_Init();
    // 發(fā)送溫度轉(zhuǎn)換命令
    DS18B20_WriteByte(DS18B20_CMD_CONVERT_T);	
}

/*****************************************************************************
* 說(shuō)明:讀取DS18B20溫度
* 1.溫度精度及轉(zhuǎn)換時(shí)間表
--------------------------------------
R1	R0	精度	最大轉(zhuǎn)換時(shí)間	溫度LSB
--------------------------------------
0	0	9bit	93.75ms			0.5℃
0	1	10bit	187.5ms			0.25℃
1	0	11bit	375ms			0.125℃
1	1	12bit	750ms			0.0625℃
--------------------------------------
* 輸入:無(wú)
* 輸出:浮點(diǎn)型溫度數(shù)據(jù)
*****************************************************************************/
float DS18B20_GetTemp(void)
{
    
    // 復(fù)位DS18B20并跳過(guò)ROM
    DS18B20_Init();
    
    // 發(fā)送讀取寄存器命令
    DS18B20_WriteByte(DS18B20_CMD_READ_SCRATCHPAD);
    
    // 讀取溫度數(shù)據(jù)
    uint8_t tempLow = DS18B20_ReadByte();
    uint8_t tempHigh = DS18B20_ReadByte();
    
    // 計(jì)算溫度值
    int16_t temp = (tempHigh << 8) | tempLow;
    float temperature = (float)temp / 16.0f;/*0.0625℃*/
    
    return temperature;
}


5、使用方法

使用“void DS18B20_StartConv(void)”函數(shù)啟動(dòng)轉(zhuǎn)換,因?yàn)檗D(zhuǎn)換時(shí)間需要750ms(12Bit精度),所以隔1秒后,使用“float DS18B20_GetTemp(void)”函數(shù)獲取溫度。
STM32使用HAL庫(kù)驅(qū)動(dòng)DS18B20,stm32,嵌入式硬件,單片機(jī)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-726390.html

到了這里,關(guān)于STM32使用HAL庫(kù)驅(qū)動(dòng)DS18B20的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32讀取DS18B20溫度,并在OLED上顯示

    STM32讀取DS18B20溫度,并在OLED上顯示

    部分代碼來(lái)源于網(wǎng)絡(luò),侵權(quán)刪 本文使用硬件:STM32F103C8T6最小系統(tǒng)板、IIC協(xié)議0.96寸OLED屏幕顯示、DS18B20傳感器 ?實(shí)現(xiàn)功能:在OLED上顯示出DS18B20采集到的溫度,精確到小數(shù)點(diǎn)后一位。 DS18B20.c DS18B20.h main.c 實(shí)物效果圖: 工程文件百度網(wǎng)盤鏈接:鏈接:https://pan.baidu.com/s/17QLXeaq2

    2024年02月15日
    瀏覽(18)
  • STM32 Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20 -0065

    STM32 Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20 -0065

    STM32?Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20?-0065 Proteus 仿真小實(shí)驗(yàn): STM32?Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20?-0065 功能: 硬件組成:STM32F103C8單片機(jī)?+LCD1602顯示器+ADC220V轉(zhuǎn)3.3V電路+DS18B20溫度+多個(gè)按鍵(設(shè)置溫度和水位)+繼電器模擬加熱+繼電器模擬加水。 1.人工

    2024年02月15日
    瀏覽(20)
  • STM32CubeMX 讀取DS18B20溫度傳感器數(shù)據(jù)串口打印顯示

    STM32CubeMX 讀取DS18B20溫度傳感器數(shù)據(jù)串口打印顯示

    本文要做的所有工作標(biāo)題基本都包括了,讀取溫度傳感器的溫度數(shù)值,再通過(guò)串口打印到串口助手; 好多博主大神的教程我按步驟做了之后總是出現(xiàn)程序不報(bào)錯(cuò)并且檢測(cè)不到傳感器的情況,后來(lái)找到原因并且修改后調(diào)試正常。 我用的是普中科技的實(shí)驗(yàn)板,主控芯片為STM3210

    2024年02月05日
    瀏覽(20)
  • 通過(guò)stm32讀取DS18B20并在顯示屏上顯示溫度值(附源碼)

    通過(guò)stm32讀取DS18B20并在顯示屏上顯示溫度值(附源碼)

    使用stm32f103c8t6的芯片,在OLED顯示屏上顯示DS18B20的溫度值。 DS18B20 數(shù)字溫度計(jì)提供 9 位溫度讀數(shù),指示器件的溫度信息經(jīng)過(guò)單線接口送入 DS18B20 或從 DS18B20 送出, 因此從中央處理器到 DS18B20 僅需連接一條線。?讀、寫和完成溫度變換所需的電源可以由數(shù)據(jù)線本身提供而不需要外

    2024年02月15日
    瀏覽(24)
  • 【基于STM32F103C8T6的DS18b20溫度檢測(cè)系統(tǒng)】

    庫(kù)函數(shù)是ST公司針對(duì)STM32系列微控制器提供的一套API,可以方便地實(shí)現(xiàn)各種功能。下面是一個(gè)基于STM32F103C8T6的溫度檢測(cè)系統(tǒng)的示例,使用了STM32F10x標(biāo)準(zhǔn)庫(kù)函數(shù)。 硬件部分: - STM32F103C8T6微控制器 - 電源模塊 - 溫度傳感器模塊 軟件部分: - Keil C編譯器 - STM32F10x_StdPeriph_Driver庫(kù)文件

    2024年01月20日
    瀏覽(24)
  • 【正點(diǎn)原子STM32連載】 第四十二章 DS18B20數(shù)字溫度傳感器實(shí)驗(yàn) 摘自【正點(diǎn)原子】STM32F103 戰(zhàn)艦開(kāi)發(fā)指南V1.2

    【正點(diǎn)原子STM32連載】 第四十二章 DS18B20數(shù)字溫度傳感器實(shí)驗(yàn) 摘自【正點(diǎn)原子】STM32F103 戰(zhàn)艦開(kāi)發(fā)指南V1.2

    1)實(shí)驗(yàn)平臺(tái):正點(diǎn)原子stm32f103戰(zhàn)艦開(kāi)發(fā)板V4 2)平臺(tái)購(gòu)買地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套實(shí)驗(yàn)源碼+手冊(cè)+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html# 本章,我們將介紹STM32F103如何讀取外部溫度傳感器的溫度,來(lái)得到較為準(zhǔn)確的環(huán)境溫度。我們將學(xué)習(xí)

    2024年02月04日
    瀏覽(24)
  • ESP32設(shè)備驅(qū)動(dòng)-OLED顯示單個(gè)或多個(gè)DS18B20傳感器數(shù)據(jù)

    在本文中,我們將介紹如何ESP32驅(qū)動(dòng)單個(gè)或多個(gè)DS18B20傳感器,并將DS18B20傳感器數(shù)據(jù)在OLE中顯示。 DS18B20 是一種溫度傳感器,本質(zhì)上是單線可編程的。 它廣泛用于測(cè)量存在于硬環(huán)境中的化學(xué)溶液和物質(zhì)的溫度。 使用此傳感器的優(yōu)勢(shì)之一是我們只需要 ESP 板上的一個(gè)引腳即可傳

    2024年02月07日
    瀏覽(22)
  • 【嵌入式 – GD32開(kāi)發(fā)實(shí)戰(zhàn)指南(ARM版本)】第2部分 外設(shè)篇 - 第3章 溫度傳感器DS18B20

    【嵌入式 – GD32開(kāi)發(fā)實(shí)戰(zhàn)指南(ARM版本)】第2部分 外設(shè)篇 - 第3章 溫度傳感器DS18B20

    DS18B20 是 DALLAS 最新單線數(shù)字溫度傳感器,新的\\\"一線器件\\\"體積更小、適用電壓更寬、更經(jīng)濟(jì)。Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器 DS1820 是世界上第一片支持 \\\"一線總線\\\"接口的溫度傳感器。 DS18B20采用的單總線協(xié)議,也就是只需占用主機(jī)一個(gè)I/O口,無(wú)需其他外圍電路,直接將

    2024年02月21日
    瀏覽(20)
  • 單片機(jī)驅(qū)動(dòng)多個(gè)ds18b20

    單片機(jī)驅(qū)動(dòng)多個(gè)ds18b20

    目錄 1設(shè)計(jì)內(nèi)容 2ds18b20介紹 2.1傳感器引腳及原理圖 2.2寄存器配置 3程序?qū)崿F(xiàn) 3.1配置初始化 3.2配置寄存器 3.3ROM讀取 3.4溫度讀取 通過(guò)51單片機(jī),讀取總線上掛載的多個(gè)ds18b20的溫度信息。 如下圖,成功讀取到3路溫度數(shù)據(jù)。 DS18B20傳感器的引腳及封裝圖如下: DS18B20一共有三個(gè)引腳

    2024年02月21日
    瀏覽(20)
  • Linux下ds18b20驅(qū)動(dòng)開(kāi)發(fā)獲取溫度

    Linux下ds18b20驅(qū)動(dòng)開(kāi)發(fā)獲取溫度

    對(duì)ds18b20不了解的可以查看這篇文章,講解的比較詳細(xì)的:STM32一線協(xié)議-DS18B20溫度傳感器采樣實(shí)現(xiàn) 源碼是根據(jù)上一屆學(xué)長(zhǎng)的,想要參考的可以去拜訪一下gitee:代碼鏈接 (1)修改設(shè)備樹 在路徑 linux-imx/arch/arm/boot/dts/ 下修改設(shè)備樹 igkboard.dts : 主節(jié)點(diǎn): 從節(jié)點(diǎn): 在源碼路徑下

    2023年04月22日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包