1. 项目概述
在嵌入式开发领域,ADC(模数转换器)的应用可以说是每个工程师的必修课。今天我要分享的这个实战项目,将带你从零开始实现STM32的ADC功能,完成光敏传感器和烟雾传感器的数据采集,并实现阈值报警功能。这个项目不仅涵盖了硬件连接、软件配置等基础内容,还会深入探讨在实际工程中可能遇到的各种坑点。
作为一名有多年STM32开发经验的工程师,我见过太多初学者在ADC应用上栽跟头。要么是采样精度不够,要么是数据跳动太大,或者是报警逻辑不准确。这个项目就是要把这些常见问题一网打尽,让你真正掌握ADC的应用精髓。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与连接
2.1 所需硬件清单
要完成这个项目,你需要准备以下硬件:
- STM32开发板(以STM32F103C8T6为例)
- 光敏电阻传感器模块
- MQ-2烟雾传感器模块
- 杜邦线若干
- USB转TTL模块(用于串口通信)
- 电阻、LED等基础元件
2.2 传感器特性分析
光敏传感器和烟雾传感器虽然都是模拟量输出,但它们的特性有很大不同:
光敏传感器:
- 输出范围:0-3.3V
- 响应时间:约20ms
- 线性度:在特定范围内近似线性
MQ-2烟雾传感器:
- 工作电压:5V(需要电平转换)
- 预热时间:约1分钟
- 输出特性:非线性,需要查表或算法处理
2.3 电路连接详解
正确的硬件连接是项目成功的基础。以下是具体的连接方式:
-
光敏传感器:
- VCC → 3.3V
- GND → GND
- OUT → PA0(ADC1通道0)
-
MQ-2烟雾传感器:
- VCC → 5V(注意电平匹配)
- GND → GND
- OUT → PA1(ADC1通道1)通过分压电阻降至3.3V
-
报警LED:
- LED阳极 → PB5(通过220Ω电阻)
- LED阴极 → GND
特别注意:MQ-2传感器需要5V供电,但其输出可能超过3.3V,必须使用分压电路保护STM32的ADC输入引脚。
3. 软件环境配置
3.1 开发工具准备
我们使用Keil MDK作为开发环境,需要安装以下组件:
- Keil MDK 5.25或更高版本
- STM32F1xx_DFP设备支持包
- STM32CubeMX(可选,用于初始化代码生成)
3.2 工程创建与配置
- 新建Keil工程,选择正确的芯片型号(STM32F103C8)
- 配置系统时钟为72MHz
- 启用SWD调试接口
- 添加必要的库文件:
- stm32f1xx_hal_adc.c
- stm32f1xx_hal_gpio.c
- stm32f1xx_hal_rcc.c
3.3 ADC初始化代码解析
以下是ADC初始化的关键代码:
c复制ADC_HandleTypeDef hadc1;
void ADC1_Init(void)
{
hadc1.Instance = ADC1;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvM
