欢迎光临
我们一直在努力

医用泵读什么基于STM32的智能血压计数据采集与显示系统 | 保姆式教程 开源可复刻

  电子血压计是家庭健康监测、医疗护理领域的核心刚需设备,也是嵌入式医疗测控类项目开发的经典案例,更是电赛测控类题目的高频原型。市面成品家用血压计价格跨度大,而网上绝大多数开源血压计方案,仅提供零散的传感器驱动代码,无血压测量原理拆解、无示波法算法全流程讲解、无新手踩坑指导,新手不仅无法实现精准的血压测量,甚至连基础的传感器数据读取、气路控制都无法正常实现。本项目基于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 项目核心功能

  1. 一键精准血压测量:采用医用级示波法测量原理,实现收缩压(高压)、舒张压(低压)、心率实时精准测量,血压测量范围0-300mmHg,测量精度±3mmHg;心率测量范围30-180次/分钟,测量精度±2次/分钟,满足家用健康监测需求。
  2. 全流程自动气路控制:内置充气、稳压、慢放气、快速泄压全流程自动控制逻辑,支持过压自动保护,当气囊压力超过300mmHg时自动快速泄压,避免气囊过充损坏,保障测量安全。
  3. 实时数据显示与人机交互:0.96寸OLED屏实时显示测量进度、收缩压、舒张压、心率、测量时间、电池电量等信息;3个独立按键实现一键测量、历史数据翻页查看、阈值设置、系统校准等功能,操作简单直观。
  4. 历史数据掉电存储与查询:基于AT24C02存储芯片,可存储100组历史测量数据,包含收缩压、舒张压、心率、测量序号,掉电不丢失,支持按键翻页查看,方便追踪血压变化趋势。
  5. 超限声光报警与安全保护:可自定义收缩压、舒张压、心率的上下限阈值,当测量值超出阈值范围时,自动触发蜂鸣器声光报警,报警阈值可掉电保存;支持低电压保护、气囊过压保护、电机堵转保护,全方位保障设备使用安全。
  6. 串口数据上报与上位机联动:支持USART串口实时上报测量数据和原始压力波形,可连接电脑上位机实现数据记录、波形显示、批量导出功能,方便二次开发和数据分析。

1.3 项目难度与适配说明

  • 难度等级:进阶级,基于STM32F103C8T6裸机开发,适配STM32 HAL库开发实战学习需求
  • 知识覆盖范围:STM32CubeMX工程配置、GPIO输入输出、I2C/USART串口通信、ADC采集、定时器中断、继电器/电机驱动、血压模块协议解析、示波法血压测量算法、数据掉电存储、人机交互、模块化分文件编程
  • 适配学习阶段:已完成STM32基础外设学习,想要进阶掌握医疗传感器驱动、串口协议解析、闭环测控系统全流程开发的嵌入式学习者;有51单片机基础,想要平滑过渡到STM32进阶项目开发的学习者;电赛备赛阶段,需要练习医疗测控类项目全流程开发、算法落地的参赛者。
  • 实操落地性:所有硬件均为市面通用直插模块,杜邦线即可完成所有接线,无需复杂焊接和PCB设计,代码可直接编译运行,无跳步保姆式讲解,跟着步骤一步步操作,就能顺利完成项目复刻。

1.4 项目硬件成本说明

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

预算方案 参考总成本 核心配置说明 适配人群 极简版 ≤70元 STM32最小系统板+BP3800血压测量模块+0.96寸OLED屏+1个测量按键 纯新手入门,仅实现基础血压测量、实时显示功能,预算有限,无需气路控制和数据存储 推荐版 110-150元 极简版全配置+AT24C02掉电存储模块+有源蜂鸣器报警模块+3个功能按键+微型充气泵+电磁阀+3.7V锂电池+TP4056充电模块 绝大多数学习者,实现完整的一键自动测量、数据显示、历史存储、超限报警、便携供电全功能,兼顾性价比与实用性 进阶版 170-200元 推荐版全配置+1.3寸OLED屏+蓝牙模块+温湿度传感器+高精度压力传感器+大容量锂电池+便携外壳 进阶开发者,想要扩展蓝牙无线数据传输、多参数健康监测、更高测量精度、便携外壳等功能

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

适配人群
  • 有C语言基础,完成STM32基础外设学习,想要进阶传感器驱动与测控系统开发的嵌入式入门学习者
  • 想要自制智能电子血压计,学习示波法血压测量原理的电子爱好者
  • 电赛备赛阶段,需要练习测控类项目全流程开发、算法落地的参赛者
  • 想要提升STM32 HAL库开发、多外设协同、模块化编程、工程化思维的嵌入式开发者
前置知识要求

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

  1. GPIO推挽输出、上拉输入的配置逻辑,可回顾《STM32入门保姆式教程》第2章
  2. I2C与USART串口通信的底层原理与HAL库驱动方法,可回顾《STM32入门保姆式教程》第4章
  3. ADC采集的基础原理与HAL库驱动方法,可回顾《STM32入门保姆式教程》第3章
  4. 定时器中断的基础配置与使用方法,可回顾《STM32入门保姆式教程》第5章
  5. C语言结构体、函数封装、数组、串口协议解析的基础用法,可回顾《C语言保姆式学习笔记》第6章、第8章

2.1 核心控制器选型

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

  1. 超高性价比,市面通用现货充足,参考单价仅15-25元,新手入门无成本压力
  2. 内置3个USART串口、2个I2C接口,可同时对接血压测量模块、OLED屏、AT24C02存储模块、蓝牙模块、按键等所有外设,无需扩展IO,完美适配本项目的外设需求
  3. 内置12位ADC,可实现电池电压精准采集、模拟压力传感器信号采集;内置多个16位定时器,可实现气路控制时序、测量进度调度、蜂鸣器报警驱动
  4. 72MHz系统时钟,可满足串口协议解析、示波法血压算法运算、人机交互、气路闭环控制的实时性需求,算法运算无卡顿延迟
  5. 开发资料极其丰富,完全适配STM32CubeMX图形化配置工具,HAL库固件包完善,和我的《STM32入门保姆式教程》完全适配,新手可无缝衔接
  6. 引脚兼容同系列多款芯片,后续可无缝升级到STM32F103RCT6、GD32F103C8T6等型号,轻松扩展蓝牙通信、多参数监测、上位机波形显示等功能

和同类型号对比:相比STM32F030,串口和定时器资源更丰富,运算能力更强,完全满足实时测控的需求;相比STM32F407,成本仅为1/5,外设与运算能力完全满足本项目需求,无需性能过剩;相比51单片机,运算能力、外设接口、定时器资源提升数十倍,可实现复杂的示波法算法和多外设协同控制,而51单片机根本无法满足实时测量和算法运算的要求。

2.2 完整硬件BOM清单

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

序号 元器件名称 型号 数量 核心功能 参考单价(元) 缺货替代型号 备注 1 核心控制器 STM32F103C8T6最小系统板 1 项目核心控制、传感器驱动、算法运算、外设驱动、逻辑调度 22.0 GD32F103C8T6、STM32F103RCT6 建议选择带排针焊好、CH340下载电路的版本,新手无需焊接 2 血压测量模块 BP3800医用血压模块 1 气囊压力采集、示波法算法运算、血压心率数据输出,测量核心 35.0 HK-2000B、BP3900 自带压力传感器、放大电路、算法芯片,串口输出结果,新手友好 3 显示屏 0.96寸I2C OLED屏 128*64 1 血压心率数据、测量进度、电量、历史数据实时显示 12.0 1.3寸I2C OLED屏、0.91寸OLED屏 I2C接口,接线简单,新手不易翻车 4 掉电存储模块 AT24C02 I2C接口 1 测量阈值、历史数据、系统设置掉电存储 3.5 AT24C04、AT24C08 容量完全满足数据存储需求,I2C驱动通用 5 声光报警模块 有源蜂鸣器+LED指示灯模块 1 血压心率超限声光报警、测量完成提示、故障报警 5.0 无源蜂鸣器模块 有源蜂鸣器无需PWM驱动,接线即可使用,新手友好 6 按键模块 轻触按键直插模块 3 一键测量、历史数据翻页、阈值设置、功能切换 1.0/个 矩阵按键模块 不带自锁,带上拉电阻和防抖电容,新手无需额外加元件 7 微型充气泵 5V微型气泵 血压计专用 1 血压袖带气囊充气,测量气路控制核心 8.0 6V同规格微型气泵 低噪音、小体积,适配血压计袖带,带气管接头 8 微型电磁阀 5V常闭微型电磁阀 1 气囊慢放气、快速泄压控制,测量核心 6.0 3V同规格电磁阀 常闭型,低功耗,适配血压计气路控制 9 继电器模块 5V单路继电器模块 2 充气泵、电磁阀的开关控制,隔离强驱动与主控电路 4.0/个 光耦隔离MOS管驱动模块 光耦隔离,避免电机启动干扰主控系统 10 充电管理模块 TP4056锂电池充电模块 1 3.7V锂电池充电管理,带过充过放保护 4.0 TP4057充电模块 带充电状态指示灯,适配单节3.7V锂电池 11 锂电池 3.7V 18650锂电池 2000mAh 1 整机系统便携供电 12.0 3.7V锂聚合物电池 带保护板,避免过充过放,满电续航≥50次测量 12 稳压模块 AMS1117-3.3V稳压模块 1 锂电池3.7V降压到3.3V,给核心控制器和传感器供电 3.0 ME6211稳压模块 低压差,低纹波,保证传感器供电稳定 13 血压袖带 成人电子血压计袖带 1 手臂血压测量,适配充气泵和电磁阀 10.0 儿童款袖带 通用型,带气管接头,适配绝大多数血压计模块 14 杜邦线/端子 公对母/母对母杜邦线、接线端子 1套 硬件接线、线路连接 8.0 同规格接线配件 建议选择20cm长度杜邦线,适配所有模块接线 15 面包板 400孔面包板 1 模块固定与接线,无需焊接 5.0 830孔面包板 新手友好,可重复接线,无需焊接 — — — — 推荐版合计参考成本143.5元

2.3 硬件采购避坑指南

  1. 新手最高发采购坑1:血压测量模块选型错误,测量精度极差、无算法输出
    很多新手为了省钱买了无算法的模拟压力传感器模块,需要自己设计放大电路、编写示波法血压算法,新手根本无法完成硬件调理和算法开发,最终只能读到压力值,算不出血压心率;还有的新手买了拆机二手模块,传感器老化、校准数据丢失,测量精度极差,误差超过20mmHg,根本无法使用。
    避坑方案:新手必须选择带硬件算法、串口直接输出血压心率结果的成品BP3800模块,模块内部集成了压力传感器、信号放大电路、32位MCU和医用级示波法算法,串口直接输出收缩压、舒张压、心率、实时压力值,无需新手自己写算法,大幅降低开发难度;必须选择全新原装模块,带出厂校准证书,测量误差≤±3mmHg,严禁购买拆机二手模块。

  2. 新手最高发采购坑2:充气泵和电磁阀选型错误,无法完成测量、气路失控
    很多新手买了大流量、高电压的充气泵,充气速度过快,无法精准控制气囊压力,导致测量失败;还有的新手买了常开型电磁阀,断电时气囊无法保压,根本无法完成测量;甚至有的新手买了无气管接头的泵阀,无法和袖带连接,完全无法使用。
    避坑方案:必须选择5V/6V血压计专用微型充气泵,充气流量5-8L/min,充气速度适中,可精准控制气囊压力,适配家用血压计袖带;电磁阀必须选择5V常闭型微型电磁阀,断电时关闭保压,通电时泄压,完全适配血压测量的气路控制逻辑;泵阀必须带匹配的气管接头,可直接和血压袖带的气管连接,无需额外改装。

  3. 新手最高发采购坑3:泵阀驱动选型错误,电机启动导致系统重启、烧芯片
    很多新手直接用STM32的GPIO引脚驱动充气泵和电磁阀,GPIO引脚的驱动电流最大只有20mA,而充气泵的工作电流超过500mA,直接驱动会瞬间烧毁GPIO引脚,甚至整个STM32芯片;还有的新手用三极管直接驱动,无隔离保护,电机启动时的反向电动势和电源干扰会串入主控电路,导致系统频繁重启、数据乱跳。
    避坑方案:必须选择光耦隔离的5V单路继电器模块驱动充气泵和电磁阀,光耦隔离可完全隔离动力回路和控制回路,避免电机干扰串入主控系统,继电器的驱动电流可达10A,完全满足充气泵和电磁阀的驱动需求;严禁用GPIO引脚直接驱动电机和电磁阀,也不建议新手用三极管/MOS管直接驱动,光耦隔离继电器是最安全、最稳定、新手最易上手的驱动方案。

  4. 新手最高发采购坑4:电源模块选型错误,泵阀启动时系统重启、数据乱跳
    很多新手直接用STM32核心板的5V引脚给充气泵和电磁阀供电,核心板的稳压电路负载能力差,泵阀启动时电流骤增,导致电源电压瞬间跌落,STM32系统频繁复位重启,测量数据乱跳;还有的新手用无保护板的裸锂电池,泵阀堵转时导致电池过放、鼓包,甚至引发安全隐患。
    避坑方案:充气泵和电磁阀的动力电源必须直接从锂电池正极取电,经过继电器控制,不经过核心板的稳压电路,避免大电流导致的电压跌落;给STM32主控和传感器单独配置AMS1117-3.3V LDO稳压模块,单独供电,保证供电稳定;锂电池必须选择带保护板的成品电池,搭配TP4056充电模块,实现过充、过放、过流、短路全保护,避免电池损坏和安全隐患。

  5. 缺货通用替代方案
    若显示屏缺货,可替换为同I2C接口的其他型号OLED屏,仅需修改对应的屏幕驱动代码,主控制逻辑无需修改;核心控制器缺货,可直接替换为GD32F103C8T6,CubeMX配置、HAL库代码99%兼容,仅需修改时钟配置即可;BP3800模块缺货,可替换为HK-2000B、BP3900同类型串口血压模块,仅需修改对应的串口协议解析代码,核心测量逻辑完全无需修改;存储模块缺货,可替换为同I2C接口的AT24C系列芯片,仅需修改设备地址和存储地址映射,驱动逻辑完全通用。


【⚠️ 安全强制警示】本项目涉及充气泵、电磁阀等动力部件,所有接线必须全程断电操作,严禁带电接线、带电触摸泵阀端子和电源引脚;测量前必须测试过压保护功能,严禁气囊压力超过300mmHg,避免气囊过充爆裂、伤人;严禁短路锂电池正负极,否则会导致电池起火、爆炸,引发安全事故!所有接线必须先接控制回路,再接动力回路,上电前必须完成全流程自检,无短路、无接反才能上电!

3.1 硬件接线表

接线分为安全控制区动力驱动区两部分,新手必须先完成安全控制区接线,自检无误后,再进行动力驱动区接线,所有模块必须可靠共地,这是系统稳定运行的核心前提。

STM32控制器引脚 外设模块引脚 功能说明 杜邦线颜色建议 3.3V OLED屏VCC、BP3800模块VCC、AT24C02 VCC、按键模块VCC 控制模块3.3V电源供电 红色 5V 蜂鸣器模块VCC、继电器模块VCC、TP4056充电模块输出 5V电源供电 橙色 GND 所有模块GND引脚、稳压模块GND、锂电池GND、充电模块GND、继电器模块GND 所有模块共地连接 黑色 PB6 OLED屏 SCL、AT24C02 SCL I2C1时钟线,屏幕、存储模块驱动 黄色 PB7 OLED屏 SDA、AT24C02 SDA I2C1数据线,屏幕、存储模块驱动 蓝色 PA0 按键1(测量/确认) 一键测量启动、参数确认 橙色 PA1 按键2(上翻/参数+) 历史数据上翻、阈值增加 粉色 PA2 按键3(下翻/参数-) 历史数据下翻、阈值减少 紫色 PA3 蜂鸣器模块 IN 声光报警控制输出 棕色 PA4 报警LED模块 IN 报警指示灯控制输出 黄色 PA5 充气泵继电器 IN 充气泵开关控制输出 绿色 PA6 电磁阀继电器 IN 电磁阀开关控制输出 白色 PA9(TX) BP3800模块 RX 血压模块串口数据发送,指令下发 青色 PA10(RX) BP3800模块 TX 血压模块串口数据接收,结果读取 青色 PA2(TX) 串口模块 RX 上位机数据上报串口发送 青色(复用,软件切换) PA3(RX) 串口模块 TX 上位机指令接收串口接收 青色(复用,软件切换) PB0 电池电压采集 ADC1通道8 锂电池分压采集,电量检测与低电压保护 红色 锂电池3.7V+ 充气泵继电器 常开端 充气泵电源输入 红色粗线 充气泵继电器 公共端 充气泵正极 充气泵电源控制 红色粗线 充气泵负极 锂电池GND 充气泵电源地 黑色粗线 锂电池3.7V+ 电磁阀继电器 常开端 电磁阀电源输入 红色粗线 电磁阀继电器 公共端 电磁阀正极 电磁阀电源控制 红色粗线 电磁阀负极 锂电池GND 电磁阀电源地 黑色粗线 AMS1117 输入+ 锂电池3.7V正极 稳压模块电源输入 红色粗线 AMS1117 输入- 锂电池GND 稳压模块电源地 黑色粗线 AMS1117 输出+ STM32 3.3V引脚、BP3800 VCC 稳压模块3.3V输出,给控制模块供电 红色 AMS1117 输出- STM32 GND引脚 稳压模块输出地 黑色 TP4056 输出+ 锂电池3.7V正极 充电模块充电输出 红色粗线 TP4056 输出- 锂电池GND 充电模块充电地 黑色粗线 TP4056 输入+ 5V电源输入 充电模块电源输入 红色 TP4056 输入- 5V电源GND 充电模块电源地 黑色

老粉都知道,所有模块必须可靠共地,这是单片机系统稳定运行的核心前提,这里给大家划个重点:STM32的GND、血压模块GND、屏幕GND、存储模块GND、继电器模块GND、稳压模块GND、锂电池GND,必须全部可靠连接在一起,绝对不能出现控制回路和动力回路分开供电、不共地的情况,否则会出现串口通信失败、传感器数据乱跳、系统频繁死机的问题,新手最容易在这里翻车。

3.2 接线步骤分步讲解

  1. 第一步:安全控制区接线
    先将STM32最小系统板固定在面包板上,BP3800血压模块尽量靠近STM32核心板安装,缩短串口通信线长度,减少信号干扰。先接GND主线:将所有控制模块(BP3800、OLED屏、AT24C02、按键、蜂鸣器)的GND引脚,用黑色杜邦线全部连接到STM32最小系统板的GND引脚,确保所有控制模块共地;再接VCC主线:将3.3V供电的控制模块VCC引脚连接到稳压模块的3.3V输出端,5V供电的模块VCC引脚连接到STM32的5V引脚,先接GND,再接VCC,避免模块上电瞬间出现电平异常,导致芯片损坏。

  2. 第二步:通信总线接线
    按照接线表,连接OLED屏和AT24C02的I2C总线,两个模块共用PB6(SCL)、PB7(SDA)引脚,严格区分时钟线和数据线,绝对不能接反;连接BP3800血压模块的串口引脚,STM32的TX接模块的RX,STM32的RX接模块的TX,交叉连接,绝对不能接反,否则无法通信;串口通信线尽量短,避免和电源线平行走线,减少电磁干扰。

  3. 第三步:人机交互与控制IO接线
    连接3个按键模块,按键一端接对应GPIO引脚,另一端全部接GND,GPIO配置为上拉输入模式,无需额外加上拉电阻;连接蜂鸣器和LED报警模块,IN引脚接对应GPIO,VCC接5V,GND接STM32的GND,保证驱动电流充足,报警音量足够;连接充气泵和电磁阀的继电器控制引脚,IN引脚接对应GPIO,VCC接5V,GND接STM32的GND,继电器模块的控制地必须和主控共地,保证控制信号正常。

  4. 第四步:动力驱动区接线(全程断电,严禁带电操作)
    【⚠️ 二次安全警示】本步骤涉及充气泵、电磁阀动力回路,必须全程断电,锂电池完全断开,严禁带电接线!

    1. 先接继电器控制回路:两个继电器模块的IN引脚分别接STM32的PA5、PA6,VCC接5V,GND接STM32的GND,确保控制回路接线正确,继电器吸合/断开控制正常。
    2. 再接充气泵动力回路:锂电池正极接充气泵继电器的常开端(NO),继电器的公共端(COM)接充气泵正极,充气泵负极接锂电池负极,继电器的常闭端(NC)悬空不接;接线完成后,手动给继电器IN引脚接高电平,继电器吸合,充气泵正常工作,接低电平断开,充气泵停止,确保控制逻辑正确。
    3. 最后接电磁阀动力回路:锂电池正极接电磁阀继电器的常开端(NO),继电器的公共端(COM)接电磁阀正极,电磁阀负极接锂电池负极,继电器的常闭端(NC)悬空不接;接线完成后,手动给继电器IN引脚接高电平,继电器吸合,电磁阀打开泄压,接低电平断开,电磁阀关闭保压,确保控制逻辑正确。
  5. 第五步:电源与电池电压采集接线
    锂电池正极串联100K精密电阻,负极串联10K精密电阻到GND,两个电阻的中间节点接STM32的PB0引脚(ADC采集通道),实现电池电压分压采集,分压比例11:1,最大输入电压4.2V时,ADC引脚电压为0.38V,远低于3.3V量程上限,绝对安全;AMS1117稳压模块的输入端接锂电池正负极,输出端接STM32的3.3V和GND引脚,给整个控制系统供电;TP4056充电模块的输出端接锂电池正负极,输入端接5V电源,实现锂电池充电管理;锂电池必须串联电源开关,方便控制整车电源通断,开关必须接在正极回路中。

3.3 接线完成自检方法

  1. 第一步:断电通断自检(全程断电,锂电池完全断开,无安全风险)
    所有模块接线完成后,先不要接锂电池,用万用表通断档,测量锂电池正负极接线端子之间的阻值,若阻值接近0,说明存在严重短路,必须立即排查接线,重点检查稳压模块输入输出是否接反、锂电池正负极是否短路、充电模块接线是否接反、继电器动力回路是否短路,直到短路问题解决,绝对不能接锂电池上电,否则会直接烧芯片、模块,甚至导致电池起火。
    再测量3.3V和GND之间、5V和GND之间的阻值,若阻值接近0,说明控制回路存在短路,排查控制模块的VCC和GND是否接反,杜邦线是否有毛刺导致短路,直到短路问题完全解决。

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

  3. 第三步:控制功能自检(控制区上电,下载单模块验证代码)
    下载单模块验证代码,依次测试每个控制模块的功能:OLED屏是否正常点亮、显示内容正常;按键按下是否正常响应,无误触发;BP3800模块是否能正常初始化,串口通信正常,读取模块ID和版本号;AT24C02读写是否正常;继电器吸合/断开控制正常,蜂鸣器报警正常;ADC电池电压采集是否正常,确保所有控制模块功能正常,再接入动力回路和锂电池,进行整机测试。

  4. 第四步:动力回路安全自检(断电状态下接入动力回路,锂电池断开)
    断电状态下,接入充气泵、电磁阀、继电器动力回路接线,用万用表测量动力回路正负极之间的阻值,无短路;用手捏动气囊,袖带无漏气,气管连接正常;确认无误后,先不接袖带,接入锂电池,给整车上电,下载单模块验证代码,测试充气泵和电磁阀的控制逻辑:给高电平,继电器吸合,充气泵启动/电磁阀打开;给低电平,继电器断开,充气泵停止/电磁阀关闭,控制逻辑正确,泵阀工作正常,无堵转、异响、发热严重的问题,确认动力回路正常后,再接上血压袖带,进行整机测量测试。

3.4 硬件接线避坑指南

  1. 高频错误1:串口TX/RX接反,血压模块通信失败,无数据输出
    异常后果:BP3800模块无法初始化,串口通信失败,无法读取血压心率数据,新手很难排查根因。
    解决方案:严格遵循串口通信的交叉连接规则,STM32的TX接模块的RX,STM32的RX接模块的TX,绝对不能接反;接线前先核对模块的引脚标注,明确TX和RX引脚;下载串口回环测试代码,短接STM32的TX和RX,发送数据能正常接收,说明串口外设正常,再排查模块接线和波特率配置。

  2. 高频错误2:继电器控制逻辑错误,气路失控,无法完成测量
    异常后果:充气泵无法启动、电磁阀无法关闭,气囊无法充气保压,根本无法完成测量;甚至出现充气泵一直充气,无法停止,导致气囊过充爆裂的安全隐患。
    解决方案:必须明确继电器的引脚定义,常开端(NO) 是继电器吸合时导通,断开时关闭,完全适配充气泵和电磁阀的控制需求;充气泵的控制逻辑:需要充气时,给继电器IN引脚高电平,继电器吸合,充气泵通电启动;停止充气时,给低电平,继电器断开,充气泵停止。电磁阀的控制逻辑:需要保压时,给低电平,继电器断开,电磁阀关闭保压;需要泄压时,给高电平,继电器吸合,电磁阀打开泄压;代码中必须加入过压保护,当气囊压力超过300mmHg时,强制打开电磁阀泄压,停止充气泵,避免气囊过充。

  3. 高频错误3:控制回路和动力回路不共地,系统频繁重启、数据乱跳
    异常后果:BP3800模块串口通信乱码,数据乱跳,充气泵启动时STM32系统频繁复位重启,新手很难排查根因。
    解决方案:必须保证所有模块的GND全部连接在一起,STM32的GND、继电器模块的控制GND、稳压模块的GND、锂电池的GND,必须用粗线可靠连接,形成完整的地回路;严禁控制回路和动力回路分开供电、不共地,即使分开供电,也必须将两个电源的GND可靠连接在一起,否则会出现电平异常,导致所有外设工作异常;动力回路的电源线尽量粗,远离控制信号线,避免电磁干扰。

  4. 高频错误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. 高频错误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工程配置分步教程
  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-PA2 输入模式 上拉输入 – KEY1-KEY3 PA3-PA6 推挽输出 下拉 中速 BEEP、LED、PUMP、VALVE

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

  5. I2C外设配置
    本项目使用I2C1驱动OLED屏和AT24C02模块,点击左侧「I2C1」选项,模式选择「I2C」,I2C时钟频率配置为400KHz(快速模式),GPIO引脚对应PB6(SCL)、PB7(SDA),保持默认参数即可。
    【前置知识回顾】I2C通信的基础原理与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第4章。

  6. 串口外设配置
    本项目使用USART1用于BP3800血压模块通信,USART2用于上位机数据上报,点击左侧「USART1」选项,模式选择「Asynchronous」(异步通信),波特率配置为9600(BP3800模块默认波特率),数据位8位,停止位1位,校验位无,开启USART1全局中断,中断优先级配置为3;USART2配置与USART1一致,波特率配置为115200,开启全局中断,中断优先级配置为3。
    【前置知识回顾】USART串口通信的基础原理与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第4章。

  7. ADC配置
    本项目使用ADC1通道8(PB0)采集电池电压,点击左侧「ADC1」选项,开启通道8,单次转换模式,右对齐,采样时间配置为239.5个周期,提升采样精度。
    【前置知识回顾】ADC采集的基础原理与HAL库驱动方法,可回顾我的《STM32入门保姆式教程》第3章。

  8. 定时器配置
    本项目使用TIM3定时器作为系统时基,实现10ms定时中断,用于按键扫描、测量进度调度、报警控制,点击左侧「TIM3」选项,时钟源选择「Internal Clock」(内部时钟),预分频器PSC=71,自动重装载值ARR=9999,定时周期=72MHz/(71+1)/(9999+1)=10ms,开启TIM3全局中断,中断优先级配置为2,保证调度的实时性。
    【前置知识回顾】定时器中断的基础配置与使用方法,可回顾我的《STM32入门保姆式教程》第5章。

  9. 工程生成配置
    点击顶部「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可编辑)
赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » 医用泵读什么基于STM32的智能血压计数据采集与显示系统 | 保姆式教程 开源可复刻

登录

找回密码

注册