news 2026/4/24 8:28:57

基于STM32的PID恒温恒湿控制系统 | 保姆式教程 开源可复刻

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32的PID恒温恒湿控制系统 | 保姆式教程 开源可复刻

  恒温恒湿控制是工业测控、小型农业种植、精密元器件存储、实验环境搭建等场景的核心需求,市面成品控制器普遍存在功能固化、价格高昂、无法自定义逻辑、新手难以二次开发的痛点,而网上零散的开源方案大多只有极简代码包,无完整的原理拆解、全流程实操和调试排坑指南,新手很难完整复刻。本项目基于STM32F103C8T6核心控制器,采用HAL库开发,完整实现基于位置式PID算法的恒温恒湿闭环控制,全程采用无跳步保姆式教学,零基础也能跟着完成项目复刻,是STM32 HAL库开发、PID算法实战、工程化思维提升的优质可复刻项目,同时适配电赛备赛实战的核心需求。

目录

  • 一、项目整体介绍
    • 1.1 项目背景与意义
    • 1.2 项目核心功能
    • 1.3 项目难度与适配说明
    • 1.4 项目硬件成本说明
    • 1.5 适配人群与前置知识要求
  • 二、硬件选型与采购指南
    • 2.1 核心控制器选型
    • 2.2 完整硬件BOM清单
    • 2.3 硬件采购避坑指南
  • 三、硬件接线保姆式指南
    • 3.1 硬件接线表
    • 3.2 接线步骤分步讲解
    • 3.3 接线完成自检方法
    • 3.4 硬件接线避坑指南
  • 四、代码全流程保姆式讲解
    • 4.1 开发环境与工程创建全流程
    • 4.2 代码整体架构
    • 4.3 核心代码逐行讲解
    • 4.4 单模块验证代码
    • 4.5 完整工程主函数代码
    • 4.6 代码自定义修改指南
  • 五、调试排坑万能指南
    • 5.1 分场景全流程排查逻辑
    • 5.2 高频问题排查表
    • 5.3 新手最容易踩的致命坑及解决方案
    • 5.4 【博主真实踩坑实录】
  • 六、功能演示与验证
    • 6.1 核心功能分步测试步骤
    • 6.2 功能验证标准
  • 七、核心要点速记
  • 八、小结

一、项目整体介绍

1.1 项目背景与意义

  恒温恒湿控制是嵌入式测控领域的经典入门进阶项目,不仅覆盖了STM32核心外设的全场景应用,还能让新手彻底掌握PID闭环控制算法的底层逻辑与工程落地方法,是从基础外设学习进阶到综合项目开发的关键一步。传统的开关式恒温恒湿控制存在控温控湿精度低、设备启停频繁、寿命短、能耗高等问题,而PID算法可以实现平滑的线性控制,大幅提升控制精度与设备使用寿命。

  本项目完全开源,所有硬件均为市面通用模块,代码采用模块化分文件设计,带逐行注释,可直接编译运行,新手跟着步骤一步步操作,就能顺利完成项目复刻。通过本项目的开发,你可以彻底掌握STM32 HAL库综合开发、多传感器数据融合、PID算法整定与落地、闭环控制系统设计的核心能力,既可以用于实际场景的恒温恒湿控制,也可以作为电赛备赛的核心实战项目,完全贴合STM32进阶学习的核心需求。

1.2 项目核心功能

  1. 高精度温湿度实时采集:采用工业级温湿度传感器,同步采集环境温度、湿度数据,带数字滤波处理,数据刷新频率≤500ms,温度测量精度±0.2℃,湿度测量精度±2%RH,满足绝大多数场景的控制需求。
  2. 双路PID闭环控制:独立的温度PID控制、湿度PID控制,支持加热/制冷双模式、加湿/除湿双模式,可根据设定的目标值自动调节输出功率,实现恒温恒湿精准控制。
  3. 自动/手动双模式切换:自动模式下由PID算法自动控制输出;手动模式下可手动设置加热/制冷/加湿/除湿的输出功率,适配调试、应急等不同场景。
  4. 参数掉电记忆与在线配置:目标温湿度、PID参数、控制阈值等所有配置参数,掉电后不丢失,无需每次上电重新设置;支持通过按键在线修改所有参数,无需重新烧录代码。
  5. 异常保护与声光报警:当检测到传感器离线、温度/湿度超量程、执行器过载等异常状态时,自动触发声光报警,同时切断执行器输出,保障设备与环境安全。
  6. 串口数据上报与调试:所有采集数据、运行状态、PID输出值通过串口实时上报,支持上位机调试、参数远程配置,方便后续扩展物联网远程控制功能。

1.3 项目难度与适配说明

  • 难度等级:进阶级,基于STM32F103C8T6裸机开发,适配STM32 HAL库开发实战学习需求
  • 知识覆盖范围:STM32CubeMX工程配置、GPIO输入输出、I2C/USART串口通信、ADC多通道采集、定时器PWM输出、定时器中断、多传感器数据滤波、位置式PID算法、模块化分文件编程、闭环控制系统设计
  • 适配学习阶段:已完成STM32基础外设学习,想要通过综合项目掌握PID算法落地、多模块整合开发、闭环控制系统设计的开发者;有51单片机基础,想要平滑过渡到STM32进阶项目开发的学习者;电赛备赛阶段,需要练习测控类项目全流程开发的参赛者。
  • 实操落地性:所有硬件均为市面通用直插模块,杜邦线即可完成所有接线,无需复杂焊接,代码可直接编译运行,无跳步保姆式讲解,新手可完整复刻项目。

1.4 项目硬件成本说明

本项目整体参考总成本区间为80-350元,针对不同需求设置3个分级预算方案,所有元器件均为通用型号,可灵活替换:

预算方案参考总成本核心配置说明适配人群
极简版≤100元STM32最小系统板+SHT30温湿度传感器+0.96寸OLED屏+单路PWM加热片驱动+按键模块纯新手入门,仅实现恒温核心功能,预算有限
推荐版150-220元极简版全配置+半导体制冷片驱动+加湿模块+除湿模块+声光报警+AT24C02掉电存储模块绝大多数学习者,实现完整恒温恒湿双控功能,兼顾性价比与实用性
进阶版280-350元推荐版全配置+高精度PT100铂电阻温度采集+多路PWM输出+WiFi模块+上位机通信模块进阶开发者,想要扩展高精度控制、物联网远程控制、上位机监控功能

1.5 适配人群与前置知识要求

适配人群
  • 有C语言基础,完成STM32基础外设学习,想要进阶PID算法与闭环控制开发的嵌入式入门学习者
  • 想要搭建小型恒温恒湿箱、育苗箱、元器件存储箱,有一定动手能力的电子爱好者
  • 电赛备赛阶段,需要练习测控类项目全流程开发、PID算法落地的参赛者
  • 想要提升STM32 HAL库开发、模块化编程、工程化闭环系统设计能力的嵌入式开发者
前置知识要求

【前置知识回顾】本项目核心外设的基础操作逻辑,均在我的《STM32入门保姆式教程》中有完整讲解,老粉可以直接跳过:

  1. GPIO输入输出、推挽输出与上拉输入的配置逻辑,可回顾《STM32入门保姆式教程》第2章
  2. I2C总线通信的底层原理与HAL库驱动方法,可回顾《STM32入门保姆式教程》第4章
  3. ADC多通道采集与数据滤波处理,可回顾《STM32入门保姆式教程》第3章
  4. 定时器PWM输出与中断配置方法,可回顾《STM32入门保姆式教程》第5章
  5. 串口异步通信与数据收发逻辑,可回顾《STM32入门保姆式教程》第4章
  6. C语言结构体、函数封装的基础用法,可回顾《C语言保姆式学习笔记》第6章

二、硬件选型与采购指南

2.1 核心控制器选型

本项目核心控制器选用STM32F103C8T6最小系统板,核心选型优势如下:

  1. 性价比极高,市面通用现货充足,参考单价仅15-25元,新手入门无成本压力
  2. 外设资源完全满足项目需求:内置3路USART、2路I2C、2路SPI、3路12位ADC、4个通用定时器,可同时对接温湿度采集、4路PWM输出、按键、显示、存储、报警等所有模块,无需扩展IO
  3. 运算能力完全满足双路PID算法的运算需求,72MHz系统时钟可实现微秒级的PID运算,控制无延迟
  4. 开发资料极其丰富,完全适配STM32CubeMX图形化配置工具,HAL库固件包完善,和我的《STM32入门保姆式教程》完全适配,新手可无缝衔接
  5. 引脚兼容同系列多款芯片,后续可无缝升级到STM32F103RCT6、GD32F103C8T6等型号,扩展空间充足

和同类型号对比:相比STM32F407,成本仅为1/5,外设与运算能力完全满足项目需求,无需性能过剩;相比STM32G031,开发资料更多,新手入门门槛更低;相比51单片机,运算能力更强,可轻松实现双路PID浮点运算,PWM输出精度更高,控制效果更好。

2.2 完整硬件BOM清单

【合规提示】以下所有元器件仅提供型号参考,采购渠道仅可选择电商通用平台、正规元器件商城,无任何指定店铺推荐,所有单价为市面通用参考价格,实际价格以采购时为准。

序号元器件名称型号数量核心功能参考单价(元)缺货替代型号备注
1核心控制器STM32F103C8T6最小系统板1项目核心控制、数据处理、PID运算、逻辑调度22.0GD32F103C8T6、STM32F103RCT6建议选择带排针焊好的版本,新手无需焊接
2温湿度传感器SHT301环境温度、湿度高精度采集12.0SHT20、AHT20、DHT22I2C接口,工业级精度,新手友好
3OLED显示屏0.96寸I2C接口 128*641实时显示温湿度数据、PID输出、运行状态、参数设置12.01.3寸SPI/I2C OLED屏必须选择I2C接口,接线更少,新手不易翻车
4按键模块轻触按键直插模块5模式切换、参数增减、设置确认、返回功能1.0/个矩阵按键模块不带自锁,带上拉电阻,新手无需额外加元件
5加热驱动模块5V PWM加热片+MOS管驱动模块1温度加热控制,PWM线性调节功率8.012V加热片+继电器模块建议选择5V低压版本,新手无安全风险
6制冷驱动模块半导体制冷片TEC1-12706+L298N驱动1温度制冷控制,PWM线性调节功率25.0TEC1-12705搭配散热片与风扇使用,避免过热损坏
7加湿驱动模块5V超声波雾化模块+MOS管驱动1湿度加湿控制,PWM调节雾化量15.0蠕动泵加湿模块低压安全版本,适配小型密闭空间
8除湿驱动模块半导体制冷除湿模块+MOS管驱动1湿度除湿控制,PWM调节功率35.0风扇除湿模块适配小型空间,新手可先省略,仅实现加湿控制
9声光报警模块有源蜂鸣器+LED指示灯模块1异常状态声光报警提醒5.0无源蜂鸣器模块有源蜂鸣器无需PWM驱动,新手更易上手
10掉电存储模块AT24C02 I2C接口1系统参数掉电记忆存储3.5AT24C04、AT24C08容量完全满足参数存储需求,I2C接口驱动通用
11电源模块5V/3A+12V/2A双路开关电源1整个控制系统供电18.012V/5A单路电源+降压模块必须选择足功率、带隔离的正规电源模块
12杜邦线/端子1P-4P杜邦线、接线端子1套硬件接线、线路连接8.0同规格接线配件建议选择公对母、母对母全套杜邦线,适配所有模块
推荐版合计参考成本167.5元

2.3 硬件采购避坑指南

  1. 新手最高发采购坑1:温湿度传感器选错型号
    很多新手为了省钱选择DHT11传感器,DHT11精度低、误差大、温漂严重,无法满足PID闭环控制的需求,会导致控制效果极差,频繁出现超调、震荡。
    避坑方案:新手必须选择SHT30/AHT20这类工业级数字温湿度传感器,精度高、稳定性强、带温度补偿,完全适配PID闭环控制需求,成本仅比DHT11高几块钱,控制效果提升巨大。

  2. 新手最高发采购坑2:执行器驱动模块选错
    很多新手直接用单片机IO口驱动加热片、雾化模块,单片机IO口的输出电流最大只有20mA,无法驱动大功率执行器,会直接烧坏单片机引脚,甚至烧坏整个核心板。
    避坑方案:所有大功率执行器必须通过MOS管驱动模块/继电器模块驱动,单片机IO口仅输出控制信号,不直接承担负载电流,同时驱动模块必须和单片机共地,确保控制信号正常传输。

  3. 新手最高发采购坑3:电源功率不足
    半导体制冷片、加热片、雾化模块都是大功率器件,很多新手买的电源功率不足,带载后电压严重跌落,导致执行器无法正常工作,甚至单片机频繁死机重启。
    避坑方案:电源额定功率必须大于所有执行器最大功率之和的1.5倍,预留足够的功率余量,必须选择带隔离、有3C认证的正规电源模块,不要买三无产品。

  4. 新手最高发采购坑4:半导体制冷片无散热
    半导体制冷片工作时,热面会产生大量热量,如果没有散热片和风扇,会导致制冷片温度快速升高,几分钟内就会彻底烧坏,无法修复。
    避坑方案:购买半导体制冷片时,必须同时购买匹配的散热片和散热风扇,制冷片热面必须和散热片紧密贴合,涂好导热硅脂,确保散热正常,上电前必须确认风扇正常转动。

  5. 缺货通用替代方案
    若核心传感器缺货,可直接替换为同接口、同精度的替代型号,本项目代码采用模块化设计,仅需修改对应驱动文件的少量代码,无需修改主逻辑;核心控制器缺货,可直接替换为GD32F103C8T6,CubeMX配置、HAL库代码99%兼容,仅需修改时钟配置即可。


三、硬件接线保姆式指南

3.1 硬件接线表

所有接线均为低压安全接线,无强电风险,新手可放心操作,接线时严格遵循「先接GND,再接VCC」的顺序,避免模块上电损坏。

STM32控制器引脚外设模块引脚功能说明杜邦线颜色建议
5V所有模块VCC引脚(5V供电)5V模块电源供电红色
3.3VSHT30、OLED、AT24C02模块VCC引脚3.3V模块电源供电橙色
GND所有模块GND引脚所有模块共地连接黑色
PB6OLED屏 SCLI2C1时钟线,OLED屏驱动黄色
PB7OLED屏 SDAI2C1数据线,OLED屏驱动蓝色
PB6AT24C02 SCLI2C1时钟线,掉电存储模块驱动黄色(并联)
PB7AT24C02 SDAI2C1数据线,掉电存储模块驱动蓝色(并联)
PB8SHT30 SCLI2C2时钟线,温湿度传感器驱动绿色
PB9SHT30 SDAI2C2数据线,温湿度传感器驱动白色
PA0按键1(模式切换)运行模式切换按键输入棕色
PA1按键2(参数+)参数增加按键输入灰色
PA2按键3(参数-)参数减少按键输入橙色
PA3按键4(确认)参数设置确认按键输入粉色
PA4按键5(返回)设置界面返回按键输入紫色
TIM2 CH1 PA5加热模块 PWM IN加热PWM输出,控制加热功率红色
TIM2 CH2 PA6制冷模块 PWM IN制冷PWM输出,控制制冷功率蓝色
TIM3 CH1 PA7加湿模块 PWM IN加湿PWM输出,控制雾化量绿色
TIM3 CH2 PB0除湿模块 PWM IN除湿PWM输出,控制除湿功率白色
PB1有源蜂鸣器 IN报警蜂鸣器控制IO口橙色
PB10报警LED IN报警指示灯控制IO口黄色
USART1 PA9(TX)上位机 RX串口数据上报,上位机调试青色
USART1 PA10(RX)上位机 TX串口参数配置,上位机控制青色

老粉都知道,所有模块必须共地,这是单片机系统稳定运行的核心前提,这里给大家划个重点:所有传感器、驱动模块、显示模块的GND引脚,必须全部和STM32最小系统板的GND引脚可靠连接,绝对不能出现模块单独供电、不共地的情况,否则会出现数据乱跳、模块不工作、甚至烧芯片的问题。

3.2 接线步骤分步讲解

  1. 第一步:电源主线接线
    先将STM32最小系统板固定在面包板/亚克力外壳上,确保所有引脚无短路、无虚接。先接GND主线:将所有模块的GND引脚用黑色杜邦线,全部连接到STM32最小系统板的GND引脚,确保所有模块共地;再接VCC主线:将3.3V供电的模块VCC引脚连接到STM32的3.3V引脚,5V供电的模块VCC引脚连接到STM32的5V引脚,先接GND,再接VCC,避免模块上电瞬间出现电平异常,导致芯片损坏。

  2. 第二步:I2C设备接线
    按照接线表,依次连接OLED屏、AT24C02存储模块、SHT30温湿度传感器。OLED屏和AT24C02共用I2C1总线(PB6/PB7),SHT30单独使用I2C2总线(PB8/PB9),避免I2C设备地址冲突。每接完一个模块,核对一次引脚,确保SCL/SDA没有接反,VCC/GND没有接反,新手最容易在这里翻车,I2C引脚接反会导致模块完全无法通信,甚至烧坏芯片。

  3. 第三步:按键模块接线
    5个按键的一端分别连接到对应的STM32 GPIO引脚,另一端全部连接到GND,本项目GPIO配置为上拉输入模式,按键按下时引脚为低电平,松开时为高电平,无需额外加外部上拉电阻,接线更简单,新手不易出错。每接完一个按键,用万用表通断档测量,确保按键按下时引脚和GND导通,松开时断开,无粘连、无虚接。

  4. 第四步:PWM执行器接线
    按照接线表,依次连接加热、制冷、加湿、除湿四个驱动模块的PWM输入引脚,分别连接到STM32对应的定时器通道引脚。所有驱动模块的GND必须和STM32的GND可靠连接,驱动模块的电源单独接对应的供电电源,不要从STM32核心板取电,避免大功率负载导致核心板电压跌落,出现死机重启的问题。

  5. 第五步:报警与串口模块接线
    连接有源蜂鸣器、报警LED模块,控制引脚连接到对应的GPIO,VCC接5V,GND接STM32的GND;串口模块的TX/RX交叉连接,STM32的TX接上位机的RX,STM32的RX接上位机的TX,确保串口通信正常。

3.3 接线完成自检方法

  1. 第一步:断电通断自检
    所有模块接线完成后,先不要给STM32上电,用万用表通断档,测量3.3V和GND之间、5V和GND之间的阻值,若阻值接近0,说明存在短路,必须立即排查接线,重点检查是否有VCC和GND接反、杜邦线毛刺导致短路的问题,直到短路问题解决,绝对不能上电,否则会直接烧芯片。

  2. 第二步:空载上电自检
    短路排查完成后,拔掉所有执行器模块的供电电源,仅给STM32核心板通5V电,观察所有模块的电源指示灯是否正常亮起,若有模块指示灯不亮,立即断电,排查该模块的VCC/GND是否接反、是否虚接。持续上电5分钟,观察所有模块无发热、冒烟、异味等异常情况,用万用表测量每个模块的供电电压,确保3.3V模块电压在3.2V-3.4V之间,5V模块电压在4.8V-5.2V之间,无电压过低、电压波动的问题。

  3. 第三步:功能自检
    下载单模块验证代码,依次测试每个模块的功能:OLED屏是否正常显示、按键是否正常响应、温湿度传感器是否正常采集数据、PWM输出是否正常、蜂鸣器和LED是否正常触发,确保所有模块功能正常,再接入执行器电源,进行整机测试。

3.4 硬件接线避坑指南

  1. 高频错误1:I2C设备地址冲突
    异常后果:多个I2C设备并联在同一组总线上,出现设备无法识别、数据乱跳、通信失败的问题。
    解决方案:将不同地址的I2C设备分开,使用两组独立的I2C总线,本项目将OLED/AT24C02和SHT30分开使用I2C1和I2C2,从根源上避免地址冲突;若必须共用一组总线,确保所有设备的I2C地址不同,且不超过总线最大挂载数量。

  2. 高频错误2:PWM定时器通道引脚选错
    异常后果:PWM无输出,执行器不工作,新手很难排查根因。
    解决方案:严格按照STM32引脚定义,选择对应定时器的通道引脚,在CubeMX中配置时,只有引脚标注了TIMx_CHx的,才能输出对应定时器的PWM信号,不要随便选择GPIO引脚,否则无法输出PWM波形。

  3. 高频错误3:执行器模块不共地
    异常后果:PWM信号无法正常传输,执行器不工作,或者工作异常、乱触发。
    解决方案:所有驱动模块的GND,必须和STM32核心板的GND可靠连接,即使驱动模块是单独供电的,也必须共地,否则控制信号无法形成回路,无法正常传输。

  4. 高频错误4:按键引脚配置错误
    异常后果:按键无响应,或者一直处于按下状态,无法正常使用。
    解决方案:本项目按键采用一端接GPIO、一端接GND的接法,GPIO必须配置为上拉输入模式,若配置为下拉输入,会导致按键逻辑完全相反,甚至一直处于按下状态;若配置为浮空输入,会出现按键误触发、电平不稳定的问题。

  5. 高频错误5:串口TX/RX接反
    异常后果:串口完全无法通信,无数据上报,也无法接收指令。
    解决方案:记住核心规则「MCU的TX接外设的RX,MCU的RX接外设的TX」,交叉连接,接线前先核对模块的引脚定义,不要凭经验接线,接反后不会烧坏模块,仅无法通信,新手排查时可先调换TX/RX接线测试。


四、代码全流程保姆式讲解

【合规声明】本代码仅供嵌入式学习与开发参考使用,禁止无修改直接复用提交课程作业/竞赛作品,需根据自身需求进行修改、优化与创新,严格遵守对应场景的学术规范与AI内容使用规则。本内容为教学参考框架,严禁直接AI生成后提交课程作业/竞赛作品,需开发者自主完成硬件调试、代码修改、创新优化。

4.1 开发环境与工程创建全流程

本项目采用STM32CubeMX+HAL库开发,完全适配我的《STM32入门保姆式教程》的开发流程,新手可无缝衔接,所有配置无跳步,跟着操作就能完成工程创建。

开发环境版本说明(必须匹配,避免编译报错)
  • STM32CubeMX版本:6.10.0
  • STM32Cube_FW_F1固件包版本:V1.8.5
  • Keil MDK版本:5.38
  • 编译器版本:ARM Compiler V6
STM32CubeMX工程配置分步教程
  1. 芯片选择
    打开STM32CubeMX,点击「ACCESS TO MCU SELECTOR」,在芯片搜索框输入「STM32F103C8T6」,选择对应芯片,点击「Start Project」,进入工程配置界面。

  2. 时钟源配置
    点击左侧「RCC」选项,在「High Speed Clock (HSE)」下拉菜单选择「Crystal/Ceramic Resonator」(外部高速晶振),「Low Speed Clock (LSE)」选择「Disable」,本项目无需外部低速晶振。
    点击顶部「Clock Configuration」选项卡,进入时钟树配置,将系统时钟配置为72MHz:HSE输入8MHz,PLL倍频为9倍,系统时钟源选择PLL,AHB分频器为1,APB1分频器为2,APB2分频器为1,配置完成后按回车,CubeMX会自动计算所有时钟频率,确保所有时钟无红色报错。

  3. 调试接口配置
    点击左侧「SYS」选项,在「Debug」下拉菜单选择「Serial Wire」(串行线调试接口),这是ST-Link下载器对应的调试接口,必须配置,否则后续无法下载代码、调试程序。

  4. GPIO外设配置
    按照接线表,依次配置所有GPIO引脚,点击对应引脚,选择对应的功能模式,所有GPIO配置完成后,在左侧「GPIO」选项中,统一配置引脚参数:

    引脚号功能模式上拉下拉输出速度引脚标签
    PA0输入模式上拉输入-KEY_MODE
    PA1输入模式上拉输入-KEY_ADD
    PA2输入模式上拉输入-KEY_SUB
    PA3输入模式上拉输入-KEY_ENTER
    PA4输入模式上拉输入-KEY_BACK
    PB1推挽输出无上下拉低速BEEP
    PB10推挽输出无上下拉低速ALARM_LED

    【前置知识回顾】GPIO推挽输出、上拉输入的配置逻辑,可回顾我的《STM32入门保姆式教程》第2章,老粉可以直接跳过。

  5. I2C外设配置
    本项目使用2组硬件I2C,分别驱动OLED/AT24C02、SHT30温湿度传感器:

    • 点击左侧「I2C1」选项,模式选择「I2C」,I2C时钟频率配置为100KHz(标准模式),GPIO引脚对应PB6(SCL)、PB7(SDA),保持默认参数即可。
    • 点击左侧「I2C2」选项,模式选择「I2C」,I2C时钟频率配置为100KHz,GPIO引脚对应PB8(SCL)、PB9(SDA),保持默认参数即可。
      【前置知识回顾】硬件I2C的配置与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第4章。
  6. 定时器PWM配置
    本项目使用2个定时器,4个通道,输出4路独立的PWM信号,分别控制加热、制冷、加湿、除湿4个执行器:

    • 点击左侧「TIM2」选项,时钟源选择「Internal Clock」(内部时钟),通道1选择「PWM Generation CH1」,通道2选择「PWM Generation CH2」,GPIO引脚对应PA5、PA6。
    • 定时器参数配置:预分频器PSC=71,自动重装载值ARR=999,这样PWM频率=72MHz/(71+1)/(999+1)=1KHz,完全适配加热、制冷等执行器的控制需求,PWM模式选择「PWM mode 1」,脉冲初始值为0,避免上电误触发。
    • 点击左侧「TIM3」选项,时钟源选择「Internal Clock」,通道1选择「PWM Generation CH1」,通道2选择「PWM Generation CH2」,GPIO引脚对应PA7、PB0,参数配置和TIM2完全一致,确保4路PWM频率相同。
      【前置知识回顾】定时器PWM输出的配置与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第5章。
  7. 串口外设配置
    本项目使用USART1用于上位机数据上报与调试:

    • 点击左侧「USART1」选项,模式选择「Asynchronous」(异步通信),波特率配置为115200,数据位8位,停止位1位,校验位无,GPIO引脚对应PA9(TX)、PA10(RX),开启USART1全局中断,中断优先级配置为1。
      【前置知识回顾】串口异步通信的配置与中断接收方法,可回顾我的《STM32入门保姆式教程》第4章。
  8. 工程生成配置
    点击顶部「Project Manager」选项卡,输入工程名称、工程保存路径(路径不能有中文、空格,否则会编译报错),工具链/IDE选择「MDK-ARM V5」,最小版本选择5.32。
    点击左侧「Code Generator」选项,勾选以下核心配置:

    • 「Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral」(每个外设生成单独的.c/.h文件,模块化编程)
    • 「Generate HAL API calls」
    • 「Set all free pins as analog (to optimize the power consumption)」
      其他配置保持默认,点击右上角「GENERATE CODE」,等待工程生成完成,点击「Open Project」,自动打开Keil MDK工程。

4.2 代码整体架构

本项目采用分层模块化分文件编程,高内聚低耦合,每个功能模块单独拆分.c/.h文件,新手可轻松修改、移植、增删功能,完全贴合STM32模块化编程教程的核心逻辑。

系统整体架构框图(Mermaid可编辑)

STM32F103C8T6核心控制器

数据采集层

输入控制层

执行输出层

显示存储层

核心算法层

调度逻辑层

SHT30温湿度传感器

5路按键输入模块

USART1串口上位机指令

加热PWM驱动

制冷PWM驱动

加湿PWM驱动

除湿PWM驱动

声光报警模块

0.96寸OLED显示模块

AT24C02掉电存储模块

温度PID闭环控制

湿度PID闭环控制

数字滑动滤波算法

双模式运行逻辑

异常保护与报警逻辑

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 3:56:21

LLM、推理模型、Agent、Harness大解析:揭秘编程智能体的强大内核!

一句话总结 这篇文章来自 Sebastian Raschka 大神,这篇文章的核心观点是:编程智能体之所以比普通聊天式 LLM 更强,往往不是单靠模型本身,而是靠 live repo context、提示词缓存、结构化工具、上下文压缩、会话记忆和有边界委派等系…

作者头像 李华
网站建设 2026/4/17 3:56:20

实战解析前端实时通信技术全景:HTTP 轮询、SSE、WebSocket、WebRTC

一、实时通信到底在解决什么问题?在传统 Web 请求模型中,通信是“请求-响应”式的:前端发请求,后端回结果,连接结束。这个模型非常适合 CRUD,但不擅长“后端有新消息就立即推给前端”的场景。于是实时通信技…

作者头像 李华
网站建设 2026/4/17 3:55:59

为什么你的RAG系统P99延迟超标却测不出来?生成式AI基准测试的4层隔离陷阱(含可复现测试脚本)

第一章:生成式AI应用性能基准测试 2026奇点智能技术大会(https://ml-summit.org) 生成式AI应用的性能表现不仅取决于模型参数量与推理框架优化,更受实际部署场景中延迟、吞吐量、内存驻留及长尾请求响应稳定性等多维指标共同制约。基准测试需在可控硬件…

作者头像 李华
网站建设 2026/4/17 3:54:45

Windows 下 OpenClaw 快速搭建与使用指南

前言 2026年爆火的开源AI智能体 OpenClaw(昵称小龙虾),GitHub星标超28万,凭"本地运行零代码自动干活"圈粉无数!本文专为小白打造,用自制的一键部署包,无需命令行、无需手动配环境&am…

作者头像 李华
网站建设 2026/4/17 3:50:15

Anaconda下载安装+环境配置+镜像源教程

本文适配 Windows 64 位 系统,全程无坑、一步一图式教学,涵盖高速下载、无脑安装、环境变量、国内镜像、IDE 集成全环节,新手零门槛上手!Anaconda 是数据科学 / AI 开发必备 Python 环境管理工具,一键集成 Python、con…

作者头像 李华
网站建设 2026/4/17 3:49:14

数据结构之双端队列

一:定义双端队列是一种具有队列和栈性质的数据结构,即可在线性表的两端进行插入和删除等操作二:.Java API中的Deque 知道了双端队列的定义,下面我们来了解一下Java API中的Deque类,知道双端队列是如何创建以及使用的双端队列的创建以及使用可…

作者头像 李华