正点原子-stm32温度传感器

本文详细介绍了DS18B20温度传感器的使用方法,包括复位、数据传输(写入和读取)以及温度读取的过程,重点在于其半双工单总线通信的时序设计。

DS18B20

在这里插入图片描述
DS18B20用来测量绝对温度!!! 半双工,单总线的通信方式
在这里插入图片描述

NC就是没有引用的引脚,以上是两种不同的封装方式。
在这里插入图片描述

最重要的是时序部分

在这里插入图片描述

//复位DS18B20
void DS18B20_Rst(void)	   
{                 
	DS18B20_IO_OUT(); 	//SET PG11 OUTPUT
    DS18B20_DQ_OUT=0; 	//拉低DQ
    delay_us(750);    	//拉低750us(至少480us)
    DS18B20_DQ_OUT=1; 	//DQ=1 
	delay_us(15);     	//15US
    //进入接收模式
}
//等待DS18B20的回应
//返回1:未检测到DS18B20的存在
//返回0:存在
u8 DS18B20_Check(void) 	   
{   
	u8 retry=0;
	DS18B20_IO_IN();	//SET PG11 INPUT	 
    while (DS18B20_DQ_IN&&retry<200)
	{
		retry++;
		delay_us(1);
	};	 
	if(retry>=200)return 1;
	else retry=0;
    while (!DS18B20_DQ_IN&&retry<240)
	{
		retry++;
		delay_us(1);
	};
	if(retry>=240)return 1;	    
	return 0;
}

在这里插入图片描述

写时序周期基本都是62us

//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
	DS18B20_IO_OUT();	//SET PG11 OUTPUT;
    for (j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;	// Write 1
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;	// Write 0
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
}

在这里插入图片描述

//从DS18B20读取一个位
//返回值:1/0
u8 DS18B20_Read_Bit(void) 	 
{
    u8 data;
	DS18B20_IO_OUT();	//SET PG11 OUTPUT
    DS18B20_DQ_OUT=0; 
	delay_us(2);
    DS18B20_DQ_OUT=1; 
	DS18B20_IO_IN();	//SET PG11 INPUT
	delay_us(12);
	if(DS18B20_DQ_IN)data=1;
    else data=0;	 
    delay_us(50);           
    return data;
}
//从DS18B20读取一个字节
//返回值:读到的数据
u8 DS18B20_Read_Byte(void)     
{        
    u8 i,j,dat;
    dat=0;
	for (i=1;i<=8;i++) 
	{
        j=DS18B20_Read_Bit();
        dat=(j<<7)|(dat>>1);
    }						    
    return dat;
}

在这里插入图片描述

读取温度过程:
在这里插入图片描述

### 关于正点原子STM32精英版传感器使用教程及相关开发资料 #### 一、概述 正点原子STM32精英版是一款基于STM32F103芯片的高性能开发板,广泛应用于嵌入式系统的教学与实际开发中。其配套资源丰富,涵盖了硬件设计文档、驱动程序以及多种外设接口的应用实例[^1]。 --- #### 二、传感器相关资料汇总 1. **DHT11 温湿度传感器** DHT11 是一种常见的温湿度传感器,在正点原子STM32系列开发板中有相应的应用案例。尽管Mini版本未提供官方DHT11例程,但可以通过参考战舰版的相关代码并适配到Elite(精英版)上实现功能移植[^3]。 下面是一个简单的DHT11读取温度和湿度的伪代码示例: ```c void DHT11_Read(void) { uint8_t data[5]; // 存储接收到的数据 // 初始化GPIO配置 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_X; // 替换为具体引脚 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; HAL_GPIO_Init(GPIOX, &GPIO_InitStruct); // 发送启动信号并等待响应... // 接收数据帧... // 计算校验值 if (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) { float humidity = data[0]; float temperature = data[2]; printf("Humidity: %.1f%%\n", humidity); printf("Temperature: %.1f°C\n", temperature); } } ``` 2. **通用定时器实验** 定时器是STM32微控制器的重要组成部分之一,可用于PWM波形生成、延时控制等功能。在正点原子精英版的教程中提供了详细的定时器初始化函数说明及其状态标志位操作方法[^4]。以下是部分核心API定义: ```c /** * @brief 配置指定TIMx模块中断使能或禁用. */ void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); /* 示例:启用TIM2更新事件中断 */ TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); ``` 3. **Wi-Fi模组 ESP8266 实践指南** 对于物联网应用场景而言,将STM32与ESP8266相结合可以快速构建网络连接能力。通过UART通信协议发送AT指令完成WiFi参数设置及云端对接工作流程已被详细记录下来供开发者查阅学习[^2]。 --- #### 三、推荐参考资料链接 - 原理图与PCB文件下载页面:https://gitcode.com/open-source-toolkit/bffcc - STM32F103 Elite + ESP8266接入机智云实战手册:https://gitcode.com/Resource-Bundle-Collection/5c19d ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值