1. 项目概述
在嵌入式开发领域,温度监测是最基础也最广泛的应用场景之一。DS18B20作为一款经典的单总线数字温度传感器,以其高精度、抗干扰能力强和接线简单的特点,成为STM32开发者的常用选择。而STM32F103C8T6这款Cortex-M3内核的MCU,凭借出色的性价比和丰富的外设资源,在各类中小型嵌入式项目中占据重要地位。
这个项目要实现的是通过STM32F103C8T6的GPIO口模拟单总线时序,准确读取DS18B20采集的环境温度数据。看似简单的传感器驱动,实际上涉及到精确的时序控制、数据校验和错误处理等关键技术点。我在工业温控设备开发中多次使用这个组合,积累了一些值得分享的实战经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与连接
2.1 元器件选型要点
DS18B20有TO-92、SOIC和µSOP三种封装,对于原型开发推荐使用TO-92封装(如图1)。注意要确认是寄生供电模式还是外部供电模式——虽然DS18B20支持寄生供电,但在长距离传输或复杂电磁环境下,建议使用外部供电以提高稳定性。
STM32F103C8T6的GPIO口驱动能力为±25mA,直接驱动DS18B20没有问题。但若总线长度超过1米,建议增加一个MOSFET作为总线缓冲器。我的经验是:当环境温度变化剧烈时,寄生供电模式可能导致温度转换不准确,这时改用3.3V外部供电能立即解决问题。
2.2 典型电路连接
标准接线方式如下:
code复制DS18B20 STM32F103C8T6
VDD → 3.3V
DQ → PA0 (需4.7K上拉电阻)
GND → GND
关键细节:上拉电阻必须接在传感器DQ脚与3.3V之间,阻值范围4.7K-10K。我曾遇到过因忘记接上拉电阻导致始终读取85°C(默认值)的情况。
3. 软件驱动实现
3.1 单总线时序模拟
DS18B20的严格时序要求是驱动开发的最大难点。以复位脉冲为例:
c复制// 发送复位脉冲
void DS18B20_Reset(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置为推挽输出
GPIO_InitStruct.Pin = DS18
