APP 的架构设计
2026/5/25 2:17:04
| 器件 | 数量 | 备注 |
|---|---|---|
| STM32F103C8T6 最小系统板 | 1 | 核心控制单元 |
| MSP20 压力传感器 | 1 | 模拟输出型压力传感器 |
| 0.96 寸 I2C 接口 OLED 屏 | 1 | 分辨率 128*64,SSD1306 驱动 |
| 杜邦线 | 若干 | 连接电路 |
| 5V 电源 / USB 数据线 | 1 | 给开发板供电 |
这部分补充内容能帮助你更全面地了解 MSP20 传感器的实际价值,明确其应用场景和使用边界,也是教程发布时提升实用性的关键部分。
MSP20 系列传感器凭借体积小、精度高、响应快、成本低的特点,被广泛应用于多个领域,其中血压 / 气压 / 压力检测是其核心应用方向:
使用 MSP20 传感器时,需明确其适用的技术参数和场景限制,避免误用:
MSP20 传感器引脚说明:
VCC:供电(3.3V/5V,推荐 3.3V)GND:接地OUT:模拟电压输出NC:空脚,无需连接接线表(STM32F103C8T6):
| MSP20 引脚 | STM32 引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | 传感器供电 |
| GND | GND | 共地 |
| OUT | PB0 | 接 ADC1 的通道 8 |
| NC | - | 悬空 |
| OLED 引脚 | STM32 引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | 屏幕供电 |
| GND | GND | 共地 |
| SCL | PB6 | I2C 时钟线 |
| SDA | PB7 | I2C 数据线 |
注意:如果你的 OLED 屏是 5V 供电,需注意电平匹配,建议使用 3.3V 供电避免损坏 STM32。
0.96 寸 I2C OLED 的驱动基于 SSD1306 芯片,需要导入对应的驱动文件:
oled.c、oled.h文件,添加到 Keil 工程的Src和Inc目录下。关键提示:OLED 的 I2C 地址如果是 0x7A,需在驱动代码中修改
OLED_I2C_ADDR为 0x7A(默认一般为 0x78)。
/** **************************************************************************************************** * @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); /* 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__ */Build(编译)或Rebuild(重新编译),确保代码无错误。Download(下载),将程序烧录到 STM32 中。OLED 屏幕无显示
压力值始终为 0 或最大值
压力值波动过大
239.5 Cycles),或多次采样取平均值(如采集 10 次取平均)。