news 2026/5/6 0:57:52

STM32 驱动 MSP20 传感器 + OLED 显示教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32 驱动 MSP20 传感器 + OLED 显示教程

本文将详细讲解如何使用 STM32 单片机驱动 MSP20 血压 / 气压 / 压力传感器,并将采集到的压力数据实时显示在 OLED 屏幕上。教程采用STM32F103C8T6(最小系统板)、I2C 接口 OLED(0.96 寸)MSP20 传感器,代码基于 HAL 库开发,适合新手学习和实操。

一、硬件准备与原理说明

1. 硬件清单

器件数量备注
STM32F103C8T6 最小系统板1核心控制单元
MSP20 压力传感器1模拟输出型压力传感器
0.96 寸 I2C 接口 OLED 屏1分辨率 128*64,SSD1306 驱动
杜邦线若干连接电路
5V 电源 / USB 数据线1给开发板供电

2. 核心原理

  • MSP20 传感器:属于模拟输出型压力传感器,输出0.5V~4.5V的模拟电压,对应传感器的满量程压力(如 MSP20-010G 对应 0~10kPa,具体量程看传感器型号)。
  • STM32 采集数据:通过 STM32 的ADC 外设采集 MSP20 的模拟电压,将电压值转换为对应的压力值。
  • OLED 显示:通过 STM32 的 I2C 接口驱动 OLED 屏幕,将转换后的压力数据实时显示。

3. MSP20 传感器的用途与适用范围

这部分补充内容能帮助你更全面地了解 MSP20 传感器的实际价值,明确其应用场景和使用边界,也是教程发布时提升实用性的关键部分。

3.1 核心用途(按领域分类)

MSP20 系列传感器凭借体积小、精度高、响应快、成本低的特点,被广泛应用于多个领域,其中血压 / 气压 / 压力检测是其核心应用方向:

  • 医疗健康领域(核心应用场景)
    • 电子血压计(臂式、腕式)的血压检测,是家用和医用无创血压监测设备的核心传感器。
    • 便携式医疗设备:如血氧仪、呼吸机的气压监测,输液泵的压力控制。
    • 理疗设备:如气压按摩仪的压力调节与反馈。
  • 工业测控领域
    • 气动系统:气压表、气动阀门的压力检测与控制,空压机的压力监测。
    • 液压系统:小型液压设备的低压检测(需匹配对应量程的 MSP20 型号)。
    • 环境监测:大气压力、管道气压的实时采集(如工业车间的气压预警系统)。
  • 消费电子领域
    • 智能穿戴设备:智能手表、手环的气压高度计(辅助 GPS 定位)、压力感应(如触控压力识别)。
    • 智能家居:智能马桶的水压检测,净水器的滤芯堵塞压力预警,空气净化器的风道气压监测。
    • 玩具与无人机:无人机的气压定高(低精度场景),遥控车的压力感应刹车。
  • 汽车电子领域
    • 汽车胎压监测系统(TPMS)的辅助压力检测(低端车型适配)。
    • 汽车空调系统的气压监测,燃油管路的低压检测。
  • 物联网 / 户外设备领域
    • 户外手持设备:登山表、户外 GPS 的大气压力与海拔高度测量。
    • 气象站:小型气象监测设备的气压数据采集。
3.2 适用范围(技术与场景边界)

使用 MSP20 传感器时,需明确其适用的技术参数和场景限制,避免误用:

  • 压力量程范围:MSP20 系列有多个量程型号,常见的有0~10kPa(MSP20-010G)、0~50kPa(MSP20-050G)、0~100kPa(MSP20-100G)等,其中0~10kPa/0~30kPa型号主要用于血压 / 气压检测,更高量程型号用于工业压力检测。
  • 工作环境参数
    • 工作温度:-20℃~85℃(民用级),适合常温环境,不建议在高温(如工业熔炉旁)或低温(如极地环境)下长期使用。
    • 工作湿度:0%~95% RH(无冷凝),避免在高湿度冷凝环境中使用(如水下,需额外做防水处理)。
  • 电气参数适配
    • 供电电压:3.3V~5V(推荐 3.3V,与 STM32 单片机电平匹配),避免超过 5V 供电导致传感器损坏。
    • 输出类型:模拟电压输出(0.5V~4.5V),适合单片机 ADC 采集,不支持数字信号直接输出(需额外加 AD 转换模块的场景不推荐使用)。
  • 介质兼容性:MSP20 传感器主要检测干燥气体(空气、氮气等),少量型号可检测非腐蚀性液体(如水、矿物油),但禁止接触腐蚀性介质(如强酸、强碱、有机溶剂),否则会损坏传感器膜片。
  • 安装与精度限制
    • 安装方式:贴片或直插式,适合小型设备的紧凑布局,建议垂直安装(膜片朝上)以减少重力影响。
    • 精度等级:±1.5% FS(满量程),属于民用级精度,不适合高精度工业测控(如实验室级压力校准),但完全满足血压、气压等民用场景需求。

二、硬件接线

1. MSP20 与 STM32 接线

MSP20 传感器引脚说明:

  • VCC:供电(3.3V/5V,推荐 3.3V)
  • GND:接地
  • OUT:模拟电压输出
  • NC:空脚,无需连接

接线表(STM32F103C8T6):

MSP20 引脚STM32 引脚说明
VCC3.3V传感器供电
GNDGND共地
OUTPB0接 ADC1 的通道 8
NC-悬空

2. OLED 与 STM32 接线(I2C)

OLED 引脚STM32 引脚说明
VCC3.3V屏幕供电
GNDGND共地
SCLPB6I2C 时钟线
SDAPB7I2C 数据线

注意:如果你的 OLED 屏是 5V 供电,需注意电平匹配,建议使用 3.3V 供电避免损坏 STM32。

三、软件准备

1. 开发环境

  • STM32CubeMX(用于配置 STM32 外设,生成初始化代码)
  • Keil MDK-ARM(用于编写、编译代码,下载程序到 STM32)
  • ST-Link 调试器(或 USB 转串口,用于下载程序)

四、代码编写

1. 导入 OLED 驱动代码

0.96 寸 I2C OLED 的驱动基于 SSD1306 芯片,需要导入对应的驱动文件:

  • 新建oled.coled.h文件,添加到 Keil 工程的SrcInc目录下。
  • 驱动代码可自行下载(SSD1306 I2C 驱动,网络上有成熟的开源代码),核心功能包括:OLED 初始化、清屏、显示字符 / 数字、显示字符串等。

关键提示:OLED 的 I2C 地址如果是 0x7A,需在驱动代码中修改OLED_I2C_ADDR为 0x7A(默认一般为 0x78)。

2. 核心代码编写

1.adc.c(部分)
​ ​ /** **************************************************************************************************** * @file adc.c * @author 送外卖的工程师 * @version V1.0 * @date 2025-11-23 * @brief MSP20血压/气压/压力传感器驱动 **************************************************************************************************** * @attention * * 实验平台:STM32F103C8T6 * CSDN:送外卖的工程师 * 技术指导VX:wmz14026 * 淘宝店铺:小马科技 * 闲鱼店铺:送外卖的工程师 * * 修改说明 * V1.0.0.251211 * 第一次发布 **************************************************************************************************** */ void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init 0 */ /* USER CODE END ADC1_Init 0 */ ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init 1 */ /* USER CODE END ADC1_Init 1 */ /** Common config */ hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_8; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ /* USER CODE END ADC1_Init 2 */ } //主函数中添加 p=0.48471*v1 + 4.4168; // p= 48.471x + 4.4168 得到气压值 if(p<5) p=0; //初始值归零 display_xy(p); ​ ​
2.adc.h
/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file adc.h * @brief This file contains all the function prototypes for * the adc.c file ****************************************************************************** * @attention * * Copyright (c) 2025 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __ADC_H__ #define __ADC_H__ #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "main.h" /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ extern ADC_HandleTypeDef hadc1; /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ void MX_ADC1_Init(void); /* USER CODE BEGIN Prototypes */ uint32_t adc_get_result_average(uint32_t ch, uint8_t times); /* USER CODE END Prototypes */ #ifdef __cplusplus } #endif #endif /* __ADC_H__ */

五、下载与测试

1. 编译代码

  1. 在 Keil 中点击Build(编译)或Rebuild(重新编译),确保代码无错误。

2. 下载程序

  1. 将 ST-Link 调试器连接到 STM32 最小系统板的 SWD 接口(SWDIO、SWCLK、GND)。
  2. 在 Keil 中点击Download(下载),将程序烧录到 STM32 中。

3. 测试效果

  1. 给 STM32 供电,此时 OLED 屏幕会显示压力值。
  2. 用手按压 MSP20 传感器的注射器,观察 OLED 上的压力值是否随压力变化而更新。
  3. 若用于血压检测场景,可将 MSP20 传感器连接到血压计的气囊管路,测试压力变化与实际血压的对应关系。

六、常见问题解决

  1. OLED 屏幕无显示

    • 检查接线是否正确(SCL→PB6,SDA→PB7),确保 VCC 和 GND 接对。
    • 确认 OLED 的 I2C 地址是否正确(0x78 或 0x7A),修改驱动代码中的地址。
    • 检查 OLED 初始化函数是否执行成功。
  2. 压力值始终为 0 或最大值

    • 检查 MSP20 的接线(OUT→PA0),确保模拟输出引脚连接正确。
    • 检查 ADC 采集函数是否正常读取到值(可添加串口打印调试)。
  3. 压力值波动过大

    • 增加 ADC 的采样时间(如改为239.5 Cycles),或多次采样取平均值(如采集 10 次取平均)。
    • 给 MSP20 的 VCC 引脚添加 0.1μF 的去耦电容,减少电源干扰(尤其在血压检测等高精度场景中)。
    • 确保传感器感应面无异物遮挡,且安装环境无剧烈振动。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 23:33:07

2026年全套Java面试合集,终于整理完了!

一、Java并发面试题 1、 ThreadLocal 1.1 谈谈你对ThreadLocal的理解&#xff1f; ThreadLocal的作用主要是做数据隔离&#xff0c;填充的数据只属于当前线程&#xff0c;变量的数据对别的线程而言是相对隔离的。它不是针对程序的全局变量&#xff0c;只是针对当前线程的全局…

作者头像 李华
网站建设 2026/4/30 23:37:33

数字孪生技术有哪些实际应用?

数字孪生&#xff0c;作为一种将物理实体或系统在其全生命周期内&#xff0c;通过数据驱动在虚拟空间中构建动态镜像的技术&#xff0c;正深刻改变着众多行业的运作模式。它不仅是一个简单的三维模型&#xff0c;更是一个集成了实时数据、模拟分析、预测决策能力的综合系统。随…

作者头像 李华
网站建设 2026/5/4 11:39:24

我为什么要离开家乡,来北京打拼?(说说我自己的故事...)

建了一个新号&#xff1a;1. 讲职场与第二曲线&#xff1b;2. 聊自己的故事&#xff0c;内心的感悟。谢谢大家&#xff0c;听我的故事。希望对大伙也有帮助。最近做了一个新产品&#xff1a;70天&#xff0c;每天30分钟&#xff0c;短视频行动营&#xff08;第二曲线最佳选择&a…

作者头像 李华
网站建设 2026/4/30 22:46:32

如何在 LTspice放置 .op data 并能够设置显示的小数点个数?

简 介&#xff1a; 本文介绍了在LTspice中格式化.op数据标签的方法。通过使用round函数可以设置显示数据的小数点位数&#xff0c;使仿真结果更加简洁直观。具体操作是右键点击.op数据标签&#xff0c;使用round函数调整小数位数。这种方法能有效优化电路静态偏置量的显示效果&…

作者头像 李华
网站建设 2026/5/5 16:49:55

Wan2.2-T2V-A14B支持长时间序列生成吗?实测60秒连续输出

Wan2.2-T2V-A14B支持长时间序列生成吗&#xff1f;实测60秒连续输出 在影视制作、广告创意和虚拟内容生产领域&#xff0c;一个长期悬而未决的难题是&#xff1a;AI能否真正理解“时间”&#xff1f; 不是简单拼接几帧画面&#xff0c;也不是靠后期插值强行延长视频&#xff…

作者头像 李华