1. 项目概述与硬件选型
这个项目基于STM32单片机,通过DS18B20温度传感器采集环境温度数据,并在0.96寸OLED显示屏上实时显示。整个系统采用I2C通信协议连接OLED模块,单总线协议连接DS18B20传感器,是一个典型的嵌入式传感器数据采集与显示系统。
选择STM32F103C8T6作为主控芯片主要基于以下考虑:
- 72MHz主频足够处理传感器数据和显示刷新
- 丰富的外设接口(I2C、GPIO等)
- 性价比高,开发资源丰富
- 与Cubemx工具链完美兼容
DS18B20温度传感器的优势在于:
- 单总线接口,仅需一个GPIO引脚
- ±0.5℃的测量精度
- -55℃~+125℃的宽测量范围
- 每个器件有唯一64位序列号,支持多设备并联
0.96寸OLED选择SSD1306驱动芯片的型号,原因包括:
- I2C接口节省IO资源
- 128x64分辨率足够显示温度信息
- 自发光无需背光,功耗低
- 对比度高,可视角度大
2. 开发环境搭建与工程创建
2.1 CubeMX基础配置
使用STM32CubeMX创建工程时,关键配置步骤如下:
- 选择正确的芯片型号(STM32F103C8T6)
- 配置系统调试接口为Serial Wire(否则无法烧录程序)
- 设置RCC时钟源为外部高速晶振(HSE)
- 配置系统时钟为72MHz(最大化性能)
时钟树配置要点:
- PLL源选择HSE
- PLL倍频系数设为9
- APB1分频设为2(36MHz)
- APB2不分频(72MHz)
2.3 GPIO引脚分配
根据硬件连接配置各功能引脚:
- DS18B20数据线:PA0(配置为GPIO_Output)
- OLED I2C接口:
- SCL:PB7(配置为GPIO_Output)
- SDA:PB6(配置为GPIO_Output)
特别注意:
- 所有使用的GPIO都要在CubeMX中正确配置
- I2C引脚虽然用软件模拟,但仍需配置为输出模式
- 避免使用JTAG调试占用的引脚(PA13-PA15)
3. DS18B20温度传感器驱动实现
3.1 单总线协议解析
DS18B20采用单总线通信协议,关键时序包括:
- 初始化时序:
- 主机拉低总线4
