STM32ds18b20
时间: 2025-02-22 11:26:48 浏览: 48
### STM32与DS18B20温度传感器连接及使用
#### 连接方法
为了使STM32能够成功读取来自DS18B20的数据,硬件上的连接至关重要。通常情况下,仅需三根线来完成这一过程:电源(VCC),接地(GND)以及数据(DATA)[^1]。
- VCC 接到 STM32 的 3.3V 或者 5V 输出端口。
- GND 接到 STM32 地线 (GND) 上。
- DATA 线接到任意一个 GPIO 引脚上,在此案例中选择了PA1作为示例[^2]。
值得注意的是,DATA线上应当并联一个4.7kΩ至10kΩ之间的上拉电阻以确保信号稳定传输给MCU。
#### 示例代码实现
下面提供了一段基于标准外设库的C语言程序片段用于初始化和配置GPIO引脚以便于后续操作:
```c
#include "stm32f10x.h"
#define DS18B20_PORT GPIOA
#define DS18B20_PIN GPIO_Pin_1
void DS18B20_GPIO_Config(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Configure the DS18B20 pin */
GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; // Open-drain output mode.
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);
}
```
接着定义几个辅助函数来进行单总线协议下的基本交互动作,比如发送复位脉冲、写入比特/字节、接收响应等:
```c
u8 DS18B20_Reset(void){...} // 复位命令
void DS18B20_WriteBit(uint8_t bit){...} // 写入单一bit
uint8_t DS18B20_ReadBit(void){...} // 读取单一bit
void DS18B20_WriteByte(uint8_t byte){...}// 发送一字节
uint8_t DS18B20_ReadByte(void){...} // 获取一字节
float DS18B20_ReadTemperature(void){...}// 测量当前环境温湿度
```
上述功能的具体实现在这里省略了具体细节部分,实际应用时可以根据需求调整这些接口的行为逻辑。
当一切准备就绪之后就可以编写主循环中的业务逻辑了——启动一次完整的测量流程,并最终打印出所测得的结果值:
```c
int main(){
...
while(1){
float temperature = DS18B20_ReadTemperature();
printf("Current Temperature:%.2f°C\n",temperature);
Delay_ms(1000); // 延迟一秒再重复下一轮采样
}
}
```
需要注意的是首次开机后的初次读数可能会返回异常高的数值(通常是85℃),这是因为器件内部默认状态所致;因此建议在正式投入使用前先执行多次连续查询直至获得合理范围内的结果为止[^4]。
阅读全文
相关推荐














