
一、前言(项目完整业务场景)实际工业采集终端需求:本地实时可视化温湿度,无需上位机即可直观查看数值,同时兼容两种主流高精度温湿度芯片 SHT30、SHT45,方便硬件选型替换。项目开发遇到典型综合类问题:IIC 与 SPI 总线并行运行,时序冲突导致屏幕花屏、传感器读取失败;屏幕频繁全屏刷新出现明显闪烁,视觉效果差;SHT30 与 SHT45 指令、CRC 算法不一致,切换芯片需要大面积改代码;采集、显示业务耦合严重,无法单独裁剪某一外设;缺少数据容错机制,总线干扰下脏数据直接打印到屏幕。本文核心优化点:统一封装温湿度读取接口,宏切换兼容 SHT30/SHT45;软件 SPI 局部刷新 OLED,消除屏幕闪烁;总线分时互斥调度,IIC/SPI 无抢占冲突;CRC 校验过滤错误数据,异常状态屏幕提示报错;分层架构:底层总线→传感器业务→屏幕显示→主逻辑,模块完全解耦。二、硬件与底层原理深度解析2.1 硬件整体架构主控:STM32F103C8T6 标准库。温湿度总线:通用软件 IIC(PA8-SCL、PA9-SDA)。SHT30:地址 0x44,单次测量指令 0x2400。SHT45:地址 0x44,单次测量指令 0xFD,内置独立 CRC8 校验。OLED 显示总线:通用软件 SPI(PA13-SCK、PA15-MOSI、PA0-CS、PA2-DC),模式 0 时序。外设联动:AT24C02 保存温度校准偏移,RS485 上传采集数据至 PLC,SD 卡定时存储日志。2.2 SHT30 与 SHT45 核心差异与兼容方案2.3 SPI-OLED 防闪屏原理常规全屏刷新:每次清空整屏再重绘,屏幕频繁黑白切换造成闪烁;本文采用局部坐标刷新:仅重绘数字区域,静态文字、标题只初始化绘制一次,大幅降低屏幕刷新负荷,完全消除频闪。2.4 多总线并行调度逻辑软件 IIC 与软件 SPI 共用 CPU 轮询时序,同一时间只执行一类总线操作:采集传感器 → 关闭 IIC 总线 → 切换 SPI 总线刷新屏幕,严格分时互斥,避免电平时序错乱。三、项目分层文件结构工程├─底层总线│ soft_iic.h / soft_iic.c 通用模拟IIC│ soft_spi.h / soft_spi.c 通用模拟SPI├─传感器业务层│ sht_x.h / sht_x.c 兼容SHT30/SHT45,带CRC校验├─显示业务层│ oled.h / oled.c SPI-OLED局部刷新驱动├─参数存储