ds18b20温度传感器stm32103 hal库
时间: 2025-01-04 18:10:11 浏览: 6
### 使用 STM32F103 和 HAL 库读取 DS18B20 温度传感器
为了实现 STM32F103 微控制器与 DS18B20 温度传感器之间的通信并利用 HAL 库进行开发,以下是详细的说明以及示例代码。
#### 初始化硬件连接
确保 DS18B20 的数据线 (DQ) 连接到 STM32F103 上指定的 GPIO 引脚。通常情况下,可以将 DQ 接到 PA12 或其他可用引脚上,并通过电阻将其拉高至 VCC[^3]。
#### 配置 CubeMX 工程
启动 STM32CubeMX 并创建新项目,选择目标器件为 STM32F103RCT6(或其他兼容型号)。设置时钟树结构、启用必要的外设(如 UART 用于调试),最后生成初始化代码框架。
#### 编写 `ds18b20.h` 文件
定义头文件中的宏命令来简化操作过程:
```c
#ifndef __DS18B20_H
#define __DS18B20_H
#include "main.h"
// 定义常量
#define SkipROM 0xCC
#define StartConvert 0x44
#define ReadScratchpad 0xBE
#define DS_PORT GPIOA
#define DS_DQIO GPIO_PIN_12
void ds18b20_init(void);
float ds18b20_read(void);
#endif /* __DS18B20_H */
```
此部分来源于已有资料。
#### 实现 `ds18b20.c` 中的功能函数
接下来,在源文件中完成具体功能逻辑:
```c
#include "ds18b20.h"
#include "string.h"
static uint8_t OneWireReset(void){
// ...省略...
}
static void OneWireWriteByte(uint8_t dat){
// ...省略...
}
static uint8_t OneWireReadByte(void){
// ...省略...
}
void ds18b20_init(){
// 设置端口模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = DS_DQIO;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(DS_PORT, &GPIO_InitStruct);
}
float ds18b20_read(){
int8_t temp_lsb,temp_msb;
float temperature;
if(OneWireReset()){
OneWireWriteByte(SkipROM); // 跳过 ROM 地址匹配指令
OneWireWriteByte(StartConvert); // 发送转换温度指令
while(!OneWireReadBit()); // 等待转换结束
OneWireReset(); // 再次复位总线
OneWireWriteByte(SkipROM);
OneWireWriteByte(ReadScratchpad); // 请求寄存器数据
temp_lsb=OneWireReadByte();
temp_msb=OneWireReadByte();
temperature=((temp_msb<<8)|temp_lsb)*0.0625f;
return temperature;
}
}
```
上述代码实现了对 DS18B20 的基本控制流程,包括初始化接口、发送命令序列以触发温度采集动作,并最终解析返回的数据得到实际测得的摄氏度数值。
#### 主程序调用方法
在主循环内定期调用 `ds18b20_read()` 函数即可获得当前环境下的实时温度信息:
```c
int main(void)
{
// 初始化系统时钟和其他资源...
ds18b20_init();
while (1)
{
printf("Temperature:%.2f C\r\n", ds18b20_read());
HAL_Delay(1000); // 延迟一秒再重复测量
}
}
```
这样就可以成功地使用 STM32F103 结合 HAL 库读取出 DS18B20 所感知到的周围空气温湿度情况了。
阅读全文