电子血压计是家庭健康监测、医疗护理领域的核心刚需设备,也是嵌入式医疗测控类项目开发的经典案例,更是电赛测控类题目的高频原型。市面成品家用血压计价格跨度大,而网上绝大多数开源血压计方案,仅提供零散的传感器驱动代码,无血压测量原理拆解、无示波法算法全流程讲解、无新手踩坑指导,新手不仅无法实现精准的血压测量,甚至连基础的传感器数据读取、气路控制都无法正常实现。本项目基于STM32F103C8T6核心控制器,采用HAL库开发,基于医用级BP3800血压测量模块,实现收缩压、舒张压、心率的精准测量,支持一键测量、实时数据显示、历史数据掉电存储、超限声光报警、串口数据上报等全功能,全程采用无跳步保姆式教学,零基础也能跟着完成项目复刻,是STM32 HAL库开发、医疗测控系统开发、电赛备赛实战的优质可复刻项目。
- 一、项目整体介绍
- 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 项目背景与意义
血压是反映人体心血管健康状态的核心生理指标,家用电子血压计已经成为家庭健康监测的必备设备,而基于嵌入式系统的智能血压计开发,涵盖了生物医学信号采集、串口通信协议解析、气路闭环控制、示波法血压算法、人机交互、低功耗嵌入式开发等核心技术,是嵌入式医疗测控领域的典型入门进阶项目,也是电赛测控类题目的高频考点。
网上绝大多数开源血压计方案,都存在严重的新手不友好问题:要么只提供成品血压模块的简单串口读写代码,无血压测量的核心原理讲解,新手根本不懂示波法的测量逻辑;要么采用模拟压力传感器+放大电路的方案,硬件设计复杂,新手很难完成硬件焊接和信号调理,测量精度极差;要么气路控制逻辑缺失,无过压保护、泄压控制,存在气囊过充爆裂的安全隐患;代码无注释、逻辑混乱,新手无法修改、移植、扩展功能。
本项目完全开源,所有硬件均为市面通用直插模块,无需复杂PCB设计和焊接,杜邦线即可完成所有接线;代码采用模块化分文件设计,带逐行注释,可直接编译运行;从血压测量原理、示波法算法、硬件接线、CubeMX配置、代码开发、调试优化全流程无跳步拆解,新手不仅能做出一台精准可用的智能血压计,还能彻底掌握背后的核心原理,全面提升STM32综合开发能力和测控系统设计思维,完全贴合STM32进阶学习、电赛备赛的核心需求。
1.2 项目核心功能
- 一键精准血压测量:采用医用级示波法测量原理,实现收缩压(高压)、舒张压(低压)、心率实时精准测量,血压测量范围0-300mmHg,测量精度±3mmHg;心率测量范围30-180次/分钟,测量精度±2次/分钟,满足家用健康监测需求。
- 全流程自动气路控制:内置充气、稳压、慢放气、快速泄压全流程自动控制逻辑,支持过压自动保护,当气囊压力超过300mmHg时自动快速泄压,避免气囊过充损坏,保障测量安全。
- 实时数据显示与人机交互:0.96寸OLED屏实时显示测量进度、收缩压、舒张压、心率、测量时间、电池电量等信息;3个独立按键实现一键测量、历史数据翻页查看、阈值设置、系统校准等功能,操作简单直观。
- 历史数据掉电存储与查询:基于AT24C02存储芯片,可存储100组历史测量数据,包含收缩压、舒张压、心率、测量序号,掉电不丢失,支持按键翻页查看,方便追踪血压变化趋势。
- 超限声光报警与安全保护:可自定义收缩压、舒张压、心率的上下限阈值,当测量值超出阈值范围时,自动触发蜂鸣器声光报警,报警阈值可掉电保存;支持低电压保护、气囊过压保护、电机堵转保护,全方位保障设备使用安全。
- 串口数据上报与上位机联动:支持USART串口实时上报测量数据和原始压力波形,可连接电脑上位机实现数据记录、波形显示、批量导出功能,方便二次开发和数据分析。
1.3 项目难度与适配说明
- 难度等级:进阶级,基于STM32F103C8T6裸机开发,适配STM32 HAL库开发实战学习需求
- 知识覆盖范围:STM32CubeMX工程配置、GPIO输入输出、I2C/USART串口通信、ADC采集、定时器中断、继电器/电机驱动、血压模块协议解析、示波法血压测量算法、数据掉电存储、人机交互、模块化分文件编程
- 适配学习阶段:已完成STM32基础外设学习,想要进阶掌握医疗传感器驱动、串口协议解析、闭环测控系统全流程开发的嵌入式学习者;有51单片机基础,想要平滑过渡到STM32进阶项目开发的学习者;电赛备赛阶段,需要练习医疗测控类项目全流程开发、算法落地的参赛者。
- 实操落地性:所有硬件均为市面通用直插模块,杜邦线即可完成所有接线,无需复杂焊接和PCB设计,代码可直接编译运行,无跳步保姆式讲解,跟着步骤一步步操作,就能顺利完成项目复刻。
1.4 项目硬件成本说明
本项目整体参考总成本区间为60-200元,针对不同需求设置3个分级预算方案,所有元器件均为通用型号,可灵活替换:
1.5 适配人群与前置知识要求
适配人群
- 有C语言基础,完成STM32基础外设学习,想要进阶传感器驱动与测控系统开发的嵌入式入门学习者
- 想要自制智能电子血压计,学习示波法血压测量原理的电子爱好者
- 电赛备赛阶段,需要练习测控类项目全流程开发、算法落地的参赛者
- 想要提升STM32 HAL库开发、多外设协同、模块化编程、工程化思维的嵌入式开发者
前置知识要求
【前置知识回顾】本项目核心外设的基础操作逻辑,均在我的《STM32入门保姆式教程》中有完整讲解,老粉可以直接跳过:
- GPIO推挽输出、上拉输入的配置逻辑,可回顾《STM32入门保姆式教程》第2章
- I2C与USART串口通信的底层原理与HAL库驱动方法,可回顾《STM32入门保姆式教程》第4章
- ADC采集的基础原理与HAL库驱动方法,可回顾《STM32入门保姆式教程》第3章
- 定时器中断的基础配置与使用方法,可回顾《STM32入门保姆式教程》第5章
- C语言结构体、函数封装、数组、串口协议解析的基础用法,可回顾《C语言保姆式学习笔记》第6章、第8章
2.1 核心控制器选型
本项目核心控制器选用STM32F103C8T6最小系统板,核心选型优势如下:
- 超高性价比,市面通用现货充足,参考单价仅15-25元,新手入门无成本压力
- 内置3个USART串口、2个I2C接口,可同时对接血压测量模块、OLED屏、AT24C02存储模块、蓝牙模块、按键等所有外设,无需扩展IO,完美适配本项目的外设需求
- 内置12位ADC,可实现电池电压精准采集、模拟压力传感器信号采集;内置多个16位定时器,可实现气路控制时序、测量进度调度、蜂鸣器报警驱动
- 72MHz系统时钟,可满足串口协议解析、示波法血压算法运算、人机交互、气路闭环控制的实时性需求,算法运算无卡顿延迟
- 开发资料极其丰富,完全适配STM32CubeMX图形化配置工具,HAL库固件包完善,和我的《STM32入门保姆式教程》完全适配,新手可无缝衔接
- 引脚兼容同系列多款芯片,后续可无缝升级到STM32F103RCT6、GD32F103C8T6等型号,轻松扩展蓝牙通信、多参数监测、上位机波形显示等功能
和同类型号对比:相比STM32F030,串口和定时器资源更丰富,运算能力更强,完全满足实时测控的需求;相比STM32F407,成本仅为1/5,外设与运算能力完全满足本项目需求,无需性能过剩;相比51单片机,运算能力、外设接口、定时器资源提升数十倍,可实现复杂的示波法算法和多外设协同控制,而51单片机根本无法满足实时测量和算法运算的要求。
2.2 完整硬件BOM清单
【合规提示】以下所有元器件仅提供型号参考,采购渠道仅可选择电商通用平台、正规元器件商城,无任何指定店铺推荐,所有单价为市面通用参考价格,实际价格以采购时为准。
2.3 硬件采购避坑指南
-
新手最高发采购坑1:血压测量模块选型错误,测量精度极差、无算法输出
很多新手为了省钱买了无算法的模拟压力传感器模块,需要自己设计放大电路、编写示波法血压算法,新手根本无法完成硬件调理和算法开发,最终只能读到压力值,算不出血压心率;还有的新手买了拆机二手模块,传感器老化、校准数据丢失,测量精度极差,误差超过20mmHg,根本无法使用。
避坑方案:新手必须选择带硬件算法、串口直接输出血压心率结果的成品BP3800模块,模块内部集成了压力传感器、信号放大电路、32位MCU和医用级示波法算法,串口直接输出收缩压、舒张压、心率、实时压力值,无需新手自己写算法,大幅降低开发难度;必须选择全新原装模块,带出厂校准证书,测量误差≤±3mmHg,严禁购买拆机二手模块。 -
新手最高发采购坑2:充气泵和电磁阀选型错误,无法完成测量、气路失控
很多新手买了大流量、高电压的充气泵,充气速度过快,无法精准控制气囊压力,导致测量失败;还有的新手买了常开型电磁阀,断电时气囊无法保压,根本无法完成测量;甚至有的新手买了无气管接头的泵阀,无法和袖带连接,完全无法使用。
避坑方案:必须选择5V/6V血压计专用微型充气泵,充气流量5-8L/min,充气速度适中,可精准控制气囊压力,适配家用血压计袖带;电磁阀必须选择5V常闭型微型电磁阀,断电时关闭保压,通电时泄压,完全适配血压测量的气路控制逻辑;泵阀必须带匹配的气管接头,可直接和血压袖带的气管连接,无需额外改装。 -
新手最高发采购坑3:泵阀驱动选型错误,电机启动导致系统重启、烧芯片
很多新手直接用STM32的GPIO引脚驱动充气泵和电磁阀,GPIO引脚的驱动电流最大只有20mA,而充气泵的工作电流超过500mA,直接驱动会瞬间烧毁GPIO引脚,甚至整个STM32芯片;还有的新手用三极管直接驱动,无隔离保护,电机启动时的反向电动势和电源干扰会串入主控电路,导致系统频繁重启、数据乱跳。
避坑方案:必须选择光耦隔离的5V单路继电器模块驱动充气泵和电磁阀,光耦隔离可完全隔离动力回路和控制回路,避免电机干扰串入主控系统,继电器的驱动电流可达10A,完全满足充气泵和电磁阀的驱动需求;严禁用GPIO引脚直接驱动电机和电磁阀,也不建议新手用三极管/MOS管直接驱动,光耦隔离继电器是最安全、最稳定、新手最易上手的驱动方案。 -
新手最高发采购坑4:电源模块选型错误,泵阀启动时系统重启、数据乱跳
很多新手直接用STM32核心板的5V引脚给充气泵和电磁阀供电,核心板的稳压电路负载能力差,泵阀启动时电流骤增,导致电源电压瞬间跌落,STM32系统频繁复位重启,测量数据乱跳;还有的新手用无保护板的裸锂电池,泵阀堵转时导致电池过放、鼓包,甚至引发安全隐患。
避坑方案:充气泵和电磁阀的动力电源必须直接从锂电池正极取电,经过继电器控制,不经过核心板的稳压电路,避免大电流导致的电压跌落;给STM32主控和传感器单独配置AMS1117-3.3V LDO稳压模块,单独供电,保证供电稳定;锂电池必须选择带保护板的成品电池,搭配TP4056充电模块,实现过充、过放、过流、短路全保护,避免电池损坏和安全隐患。 -
缺货通用替代方案
若显示屏缺货,可替换为同I2C接口的其他型号OLED屏,仅需修改对应的屏幕驱动代码,主控制逻辑无需修改;核心控制器缺货,可直接替换为GD32F103C8T6,CubeMX配置、HAL库代码99%兼容,仅需修改时钟配置即可;BP3800模块缺货,可替换为HK-2000B、BP3900同类型串口血压模块,仅需修改对应的串口协议解析代码,核心测量逻辑完全无需修改;存储模块缺货,可替换为同I2C接口的AT24C系列芯片,仅需修改设备地址和存储地址映射,驱动逻辑完全通用。
【⚠️ 安全强制警示】本项目涉及充气泵、电磁阀等动力部件,所有接线必须全程断电操作,严禁带电接线、带电触摸泵阀端子和电源引脚;测量前必须测试过压保护功能,严禁气囊压力超过300mmHg,避免气囊过充爆裂、伤人;严禁短路锂电池正负极,否则会导致电池起火、爆炸,引发安全事故!所有接线必须先接控制回路,再接动力回路,上电前必须完成全流程自检,无短路、无接反才能上电!
3.1 硬件接线表
接线分为安全控制区和动力驱动区两部分,新手必须先完成安全控制区接线,自检无误后,再进行动力驱动区接线,所有模块必须可靠共地,这是系统稳定运行的核心前提。
老粉都知道,所有模块必须可靠共地,这是单片机系统稳定运行的核心前提,这里给大家划个重点:STM32的GND、血压模块GND、屏幕GND、存储模块GND、继电器模块GND、稳压模块GND、锂电池GND,必须全部可靠连接在一起,绝对不能出现控制回路和动力回路分开供电、不共地的情况,否则会出现串口通信失败、传感器数据乱跳、系统频繁死机的问题,新手最容易在这里翻车。
3.2 接线步骤分步讲解
-
第一步:安全控制区接线
先将STM32最小系统板固定在面包板上,BP3800血压模块尽量靠近STM32核心板安装,缩短串口通信线长度,减少信号干扰。先接GND主线:将所有控制模块(BP3800、OLED屏、AT24C02、按键、蜂鸣器)的GND引脚,用黑色杜邦线全部连接到STM32最小系统板的GND引脚,确保所有控制模块共地;再接VCC主线:将3.3V供电的控制模块VCC引脚连接到稳压模块的3.3V输出端,5V供电的模块VCC引脚连接到STM32的5V引脚,先接GND,再接VCC,避免模块上电瞬间出现电平异常,导致芯片损坏。 -
第二步:通信总线接线
按照接线表,连接OLED屏和AT24C02的I2C总线,两个模块共用PB6(SCL)、PB7(SDA)引脚,严格区分时钟线和数据线,绝对不能接反;连接BP3800血压模块的串口引脚,STM32的TX接模块的RX,STM32的RX接模块的TX,交叉连接,绝对不能接反,否则无法通信;串口通信线尽量短,避免和电源线平行走线,减少电磁干扰。 -
第三步:人机交互与控制IO接线
连接3个按键模块,按键一端接对应GPIO引脚,另一端全部接GND,GPIO配置为上拉输入模式,无需额外加上拉电阻;连接蜂鸣器和LED报警模块,IN引脚接对应GPIO,VCC接5V,GND接STM32的GND,保证驱动电流充足,报警音量足够;连接充气泵和电磁阀的继电器控制引脚,IN引脚接对应GPIO,VCC接5V,GND接STM32的GND,继电器模块的控制地必须和主控共地,保证控制信号正常。 -
第四步:动力驱动区接线(全程断电,严禁带电操作)
【⚠️ 二次安全警示】本步骤涉及充气泵、电磁阀动力回路,必须全程断电,锂电池完全断开,严禁带电接线!- 先接继电器控制回路:两个继电器模块的IN引脚分别接STM32的PA5、PA6,VCC接5V,GND接STM32的GND,确保控制回路接线正确,继电器吸合/断开控制正常。
- 再接充气泵动力回路:锂电池正极接充气泵继电器的常开端(NO),继电器的公共端(COM)接充气泵正极,充气泵负极接锂电池负极,继电器的常闭端(NC)悬空不接;接线完成后,手动给继电器IN引脚接高电平,继电器吸合,充气泵正常工作,接低电平断开,充气泵停止,确保控制逻辑正确。
- 最后接电磁阀动力回路:锂电池正极接电磁阀继电器的常开端(NO),继电器的公共端(COM)接电磁阀正极,电磁阀负极接锂电池负极,继电器的常闭端(NC)悬空不接;接线完成后,手动给继电器IN引脚接高电平,继电器吸合,电磁阀打开泄压,接低电平断开,电磁阀关闭保压,确保控制逻辑正确。
-
第五步:电源与电池电压采集接线
锂电池正极串联100K精密电阻,负极串联10K精密电阻到GND,两个电阻的中间节点接STM32的PB0引脚(ADC采集通道),实现电池电压分压采集,分压比例11:1,最大输入电压4.2V时,ADC引脚电压为0.38V,远低于3.3V量程上限,绝对安全;AMS1117稳压模块的输入端接锂电池正负极,输出端接STM32的3.3V和GND引脚,给整个控制系统供电;TP4056充电模块的输出端接锂电池正负极,输入端接5V电源,实现锂电池充电管理;锂电池必须串联电源开关,方便控制整车电源通断,开关必须接在正极回路中。
3.3 接线完成自检方法
-
第一步:断电通断自检(全程断电,锂电池完全断开,无安全风险)
所有模块接线完成后,先不要接锂电池,用万用表通断档,测量锂电池正负极接线端子之间的阻值,若阻值接近0,说明存在严重短路,必须立即排查接线,重点检查稳压模块输入输出是否接反、锂电池正负极是否短路、充电模块接线是否接反、继电器动力回路是否短路,直到短路问题解决,绝对不能接锂电池上电,否则会直接烧芯片、模块,甚至导致电池起火。
再测量3.3V和GND之间、5V和GND之间的阻值,若阻值接近0,说明控制回路存在短路,排查控制模块的VCC和GND是否接反,杜邦线是否有毛刺导致短路,直到短路问题完全解决。 -
第二步:控制区空载上电自检(仅给控制区上电,锂电池、动力回路完全断开)
断开所有动力回路的接线,仅用USB线给STM32核心板通5V电,观察核心板、OLED屏、BP3800模块、继电器模块的电源指示灯是否正常亮起,若有模块指示灯不亮,立即断电,排查该模块的VCC/GND是否接反、是否虚接。持续上电5分钟,观察所有模块无发热、冒烟、异味等异常情况,用万用表测量每个模块的供电电压,确保3.3V模块电压在3.2V-3.4V之间,5V模块电压在4.8V-5.2V之间,无电压过低、电压波动的问题。 -
第三步:控制功能自检(控制区上电,下载单模块验证代码)
下载单模块验证代码,依次测试每个控制模块的功能:OLED屏是否正常点亮、显示内容正常;按键按下是否正常响应,无误触发;BP3800模块是否能正常初始化,串口通信正常,读取模块ID和版本号;AT24C02读写是否正常;继电器吸合/断开控制正常,蜂鸣器报警正常;ADC电池电压采集是否正常,确保所有控制模块功能正常,再接入动力回路和锂电池,进行整机测试。 -
第四步:动力回路安全自检(断电状态下接入动力回路,锂电池断开)
断电状态下,接入充气泵、电磁阀、继电器动力回路接线,用万用表测量动力回路正负极之间的阻值,无短路;用手捏动气囊,袖带无漏气,气管连接正常;确认无误后,先不接袖带,接入锂电池,给整车上电,下载单模块验证代码,测试充气泵和电磁阀的控制逻辑:给高电平,继电器吸合,充气泵启动/电磁阀打开;给低电平,继电器断开,充气泵停止/电磁阀关闭,控制逻辑正确,泵阀工作正常,无堵转、异响、发热严重的问题,确认动力回路正常后,再接上血压袖带,进行整机测量测试。
3.4 硬件接线避坑指南
-
高频错误1:串口TX/RX接反,血压模块通信失败,无数据输出
异常后果:BP3800模块无法初始化,串口通信失败,无法读取血压心率数据,新手很难排查根因。
解决方案:严格遵循串口通信的交叉连接规则,STM32的TX接模块的RX,STM32的RX接模块的TX,绝对不能接反;接线前先核对模块的引脚标注,明确TX和RX引脚;下载串口回环测试代码,短接STM32的TX和RX,发送数据能正常接收,说明串口外设正常,再排查模块接线和波特率配置。 -
高频错误2:继电器控制逻辑错误,气路失控,无法完成测量
异常后果:充气泵无法启动、电磁阀无法关闭,气囊无法充气保压,根本无法完成测量;甚至出现充气泵一直充气,无法停止,导致气囊过充爆裂的安全隐患。
解决方案:必须明确继电器的引脚定义,常开端(NO) 是继电器吸合时导通,断开时关闭,完全适配充气泵和电磁阀的控制需求;充气泵的控制逻辑:需要充气时,给继电器IN引脚高电平,继电器吸合,充气泵通电启动;停止充气时,给低电平,继电器断开,充气泵停止。电磁阀的控制逻辑:需要保压时,给低电平,继电器断开,电磁阀关闭保压;需要泄压时,给高电平,继电器吸合,电磁阀打开泄压;代码中必须加入过压保护,当气囊压力超过300mmHg时,强制打开电磁阀泄压,停止充气泵,避免气囊过充。 -
高频错误3:控制回路和动力回路不共地,系统频繁重启、数据乱跳
异常后果:BP3800模块串口通信乱码,数据乱跳,充气泵启动时STM32系统频繁复位重启,新手很难排查根因。
解决方案:必须保证所有模块的GND全部连接在一起,STM32的GND、继电器模块的控制GND、稳压模块的GND、锂电池的GND,必须用粗线可靠连接,形成完整的地回路;严禁控制回路和动力回路分开供电、不共地,即使分开供电,也必须将两个电源的GND可靠连接在一起,否则会出现电平异常,导致所有外设工作异常;动力回路的电源线尽量粗,远离控制信号线,避免电磁干扰。 -
高频错误4:电池电压采集分压电路错误,烧坏ADC引脚
异常后果:分压电阻比例错误,输入到ADC引脚的电压超过3.3V,直接烧坏STM32的ADC引脚,甚至整个芯片,无法修复。
解决方案:单节锂电池满电电压最高4.2V,必须采用100K+10K的精密电阻分压,分压比例11:1,4.2V输入时,ADC引脚的电压为4.2/11≈0.38V,远低于3.3V的量程上限,绝对安全;严禁用小阻值电阻分压,导致分压后的电压超过3.3V;同时在ADC引脚和GND之间并联3.3V TVS管和104瓷片电容,做过压保护和硬件滤波,保护ADC引脚。 -
高频错误5:气管连接错误,袖带漏气、无法保压
异常后果:气囊充气时漏气,压力无法上升,无法完成测量;或者气管弯折,气路堵塞,无法充气、泄压,测量失败。
解决方案:血压袖带的气管、充气泵、电磁阀必须用三通接头可靠连接,确保气路密封,无漏气;气管尽量短,避免弯折、挤压,保证气路通畅;接线完成后,先进行气路密封性测试:启动充气泵,将气囊压力充到200mmHg,停止充气,关闭电磁阀,观察压力值,10秒内压力下降不超过5mmHg,说明气路密封正常,否则排查漏气点,重新连接气管。
【合规声明】本代码仅供嵌入式学习与开发参考使用,禁止无修改直接复用提交课程作业/竞赛作品,需根据自身需求进行修改、优化与创新,严格遵守对应场景的学术规范与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工程配置分步教程
-
芯片选择
打开STM32CubeMX,点击「ACCESS TO MCU SELECTOR」,在芯片搜索框输入「STM32F103C8T6」,选择对应芯片,点击「Start Project」,进入工程配置界面。 -
时钟源配置
点击左侧「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会自动计算所有时钟频率,确保所有时钟无红色报错。 -
调试接口配置
点击左侧「SYS」选项,在「Debug」下拉菜单选择「Serial Wire」(串行线调试接口),这是ST-Link下载器对应的调试接口,必须配置,否则后续无法下载代码、调试程序。 -
GPIO外设配置
按照接线表,依次配置所有GPIO引脚,点击对应引脚,选择对应的功能模式,所有GPIO配置完成后,在左侧「GPIO」选项中,统一配置引脚参数:引脚号 功能模式 上拉下拉 输出速度 引脚标签 PA0-PA2 输入模式 上拉输入 – KEY1-KEY3 PA3-PA6 推挽输出 下拉 中速 BEEP、LED、PUMP、VALVE 【前置知识回顾】GPIO推挽输出、上拉输入的配置逻辑,可回顾我的《STM32入门保姆式教程》第2章,老粉可以直接跳过。
-
I2C外设配置
本项目使用I2C1驱动OLED屏和AT24C02模块,点击左侧「I2C1」选项,模式选择「I2C」,I2C时钟频率配置为400KHz(快速模式),GPIO引脚对应PB6(SCL)、PB7(SDA),保持默认参数即可。
【前置知识回顾】I2C通信的基础原理与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第4章。 -
串口外设配置
本项目使用USART1用于BP3800血压模块通信,USART2用于上位机数据上报,点击左侧「USART1」选项,模式选择「Asynchronous」(异步通信),波特率配置为9600(BP3800模块默认波特率),数据位8位,停止位1位,校验位无,开启USART1全局中断,中断优先级配置为3;USART2配置与USART1一致,波特率配置为115200,开启全局中断,中断优先级配置为3。
【前置知识回顾】USART串口通信的基础原理与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第4章。 -
ADC配置
本项目使用ADC1通道8(PB0)采集电池电压,点击左侧「ADC1」选项,开启通道8,单次转换模式,右对齐,采样时间配置为239.5个周期,提升采样精度。
【前置知识回顾】ADC采集的基础原理与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第3章。 -
定时器配置
本项目使用TIM3定时器作为系统时基,实现10ms定时中断,用于按键扫描、测量进度调度、报警控制,点击左侧「TIM3」选项,时钟源选择「Internal Clock」(内部时钟),预分频器PSC=71,自动重装载值ARR=9999,定时周期=72MHz/(71+1)/(9999+1)=10ms,开启TIM3全局中断,中断优先级配置为2,保证调度的实时性。
【前置知识回顾】定时器中断的基础配置与使用方法,可回顾我的《STM32入门保姆式教程》第5章。 -
工程生成配置
点击顶部「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模块化编程教程的核心逻辑。








