0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个小项目看懂 STM32 全部外设

信盈达 2026-01-09 19:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、项目目标:让外设真正“协作起来”

这个小项目要实现的功能非常明确:

  1. 读取温度传感器数据(ADC
  2. 显示温度在 OLED 上(I2C
  3. 温度超限时蜂鸣器报警(PWM/定时器
  4. 通过按键调整报警阈值(GPIO 输入)
  5. 通过串口输出调试信息(UART
  6. 后台定时刷新显示(定时中断 + DMA

这一个项目,几乎覆盖了 STM32 的全部核心外设模块,是最适合系统学习的实践框架。


二、外设初始化思路

1. RCC 时钟系统

所有外设都依赖时钟。先开启 GPIO、USART、ADC、TIM、I2C 等模块的时钟。

  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
  2. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_I2C1,ENABLE);

2. GPIO 配置

  • 按键:输入模式,带上拉电阻
  • 蜂鸣器、LED:推挽输出
  • 串口 TX/RX:复用推挽输出、浮空输入
  • I2C:开漏输出

三、ADC 模块:采集温度数据

ADC 是模拟世界进入 MCU 的入口。

  • 选择通道(如 ADC1_IN0)
  • 配置采样时间
  • 启动转换并读取结果
  1. ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
  2. ADC_SoftwareStartConvCmd(ADC1,ENABLE);
  3. while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
  4. tempValue=ADC_GetConversionValue(ADC1);

可通过分压电路接 NTC 热敏电阻,将电压转换为温度值。


四、I2C 模块:驱动 OLED 显示

OLED 显示模块常用 SSD1306 芯片,通过 I2C 与 MCU 通信

  • 初始化 I2C(SCL/SDA)
  • 发送初始化命令
  • 周期刷新显示缓冲区
  1. I2C_Start();
  2. I2C_SendByte(0x78);// 设备地址
  3. I2C_SendByte(0x00);// 命令模式
  4. I2C_SendByte(0xAF);// 开启显示
  5. I2C_Stop();

在循环中刷新数据显示:

  1. 温度:26.5
  2. 阈值:30
  3. 状态:正常

五、PWM + 定时器:控制蜂鸣器报警

PWM 信号可由定时器输出,通过占空比控制蜂鸣器响度。

  • 配置定时器周期、分频系数
  • 配置 PWM 模式
  • 当温度超出阈值时,开启 PWM 输出
  1. TIM_OCInitTypeDef TIM_OCInitStructure;
  2. TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
  3. TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
  4. TIM_OCInitStructure.TIM_Pulse=500;
  5. TIM_OC1Init(TIM3,&TIM_OCInitStructure);

六、UART 串口输出调试信息

嵌入式开发中,UART 是最常用的调试工具。

我们可以定期输出温度、阈值、报警状态,用于监控系统状态。

  1. printf("Temp=%.2f, Th=%.2f, Status=%s\r\n",temp,threshold,status);

七、按键输入:阈值动态调整

按键检测需要消抖处理,推荐使用定时中断周期采样。

  • 按下 “+”:阈值上调
  • 按下 “-”:阈值下降
  1. if(KEY_UP==0)threshold+=1;
  2. if(KEY_DOWN==0)threshold-=1;

八、DMA + 定时中断:后台刷新机制

为了让系统持续工作但不占用主循环,可使用 DMA 结合定时中断实现后台任务:

  • 定时器中断周期触发一次数据刷新
  • DMA 自动搬运显示数据到 I2C 缓冲区
  • 主循环只负责逻辑判断

九、系统主循环逻辑

综合以上外设,主循环的结构大致如下:

  1. while(1)
  2. {
  3. temp=Read_Temperature();
  4. if(temp>threshold)
  5. Buzzer_On();
  6. else
  7. Buzzer_Off();
  8. OLED_ShowTemperature(temp);
  9. UART_PrintStatus(temp,threshold);
  10. }

这一小段循环,几乎串起了 STM32 的所有关键模块:

ADC 采集 → 数据逻辑判断 → PWM 控制输出 → I2C 显示 → UART 调试。


十、扩展与总结

通过这个小项目,你会发现 STM32 的外设并不是孤立存在的,而是围绕数据流与控制流相互协作:

  • 数据从ADC进入系统;
  • 经由定时器与中断机制组织逻辑;
  • 由I2C、UART、PWM将结果输出到外部世界。

理解这条链路,你就真正迈过了 STM32 的学习门槛。


结语

很多人学习 STM32 时陷在细节:一个寄存器、一段 HAL 库函数、一个外设例程。

但当你通过一个完整的系统去理解它们的协作关系,外设就不再是孤立的模块,而是系统的一部分。

从这个小项目开始,把“每个外设单独跑通”变成“让它们一起工作”,你就能真正读懂 STM32。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2578

    文章

    55821

    浏览量

    795472
  • STM32
    +关注

    关注

    2313

    文章

    11206

    浏览量

    375258
  • RCC
    RCC
    +关注

    关注

    0

    文章

    96

    浏览量

    28758
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    适合新手做的小项目

    接触Labview一个月,有没有适合新手做的小项目,求介绍下
    发表于 08-09 14:14

    请问除了Flash芯片STM32F7的QSPI能接其他外设吗?

    如题,最近要用STM32F767ZI做一个小项目,需要用STM32F7外接QSPI
    发表于 11-23 08:41

    stm32做了小项目

    前些日子用stm32做了小项目,现在对项目中出现的些奇怪问题总结如下。这里不做代码层面的探
    发表于 08-11 09:32

    使用NodeMCU开发一些小项目

    NodeMCU是开源的物联网平台,拥有开源,交互式,可编程,低成本,简单,智能,WI-FI硬件等特点,可以在Arduino IDE中进行编程开发,对新手十分友好。这是本人使用NodeMCU开发的一些小项目,仅为自己
    发表于 11-01 06:13

    如何利用STM32开发计算器小项目

    如何利用STM32开发计算器小项目
    发表于 11-17 06:58

    使用STM32H750型号的单片机做一个小项目

    、问题叙述笔者最近在使用STM32H750型号的单片机做一个小项目,调试的时候发现无法进行软件仿真,进入仿真之后出现下图类似的错误,并且无法进入main函数。笔者在网上找了许多方法,
    发表于 11-23 07:36

    【野火鲁班猫2开发板体验】Debian + 物联网 + 综合小项目

    野火鲁班猫2单板电脑=物联网+综合小项目野火开发板,鲁班猫2单板电脑,这次分享物联网+综合小项目使用到外设有火焰传感器,蜂鸣器,语音模块
    发表于 03-08 20:12

    【鲁班猫创意氛围赛】鲁班猫2单板电脑=物联网+综合小项目

    野火鲁班猫2单板电脑=物联网+综合小项目 项目概述 这次分享物联网+综合小项目 使用的开发板 野火家的开发板,鲁班猫2单板电脑开发板
    发表于 05-18 20:06

    单片机的一些小项目资料

    单片机的一些小项目,单片机入门必备,适合初学者
    发表于 11-18 17:24 11次下载

    物联网小项目STM32F103单片机通过MQTT协议连接阿里云

    物联网小项目STM32F103单片机通过MQTT协议连接阿里云
    发表于 11-19 10:51 43次下载
    物联网<b class='flag-5'>小项目</b>:<b class='flag-5'>STM32</b>F103单片机通过MQTT协议连接阿里云

    STM32学习——入门小项目

    STM32学习——入门小项目
    发表于 12-07 17:21 72次下载
    <b class='flag-5'>STM32</b>学习——入门<b class='flag-5'>小项目</b>

    一个STM32CubeIDE项目

    使用STM32CubeIDE的第一个项目开始第一个项目添加代码今天开始做一个
    发表于 12-29 19:29 11次下载
    第<b class='flag-5'>一个</b><b class='flag-5'>STM32</b>CubeIDE<b class='flag-5'>项目</b>

    Arduino Bootcamp师生小项目

    电子发烧友网站提供《Arduino Bootcamp师生小项目.zip》资料免费下载
    发表于 07-28 11:22 0次下载
    Arduino Bootcamp师生<b class='flag-5'>小项目</b>

    Linux小项目-数码相册设计

    这是基于Linux系统开发板设计小项目-数码相册,在LCD屏上可以显示完成常见的图片显示,翻页、旋转、缩放等功能。
    的头像 发表于 08-14 09:15 3209次阅读

    【开源小项目】基于STM32的OLED舵机菜单显示

    本文的OLED多级菜单UI为综合性的STM32小项目,使用多传感器与OLED显示屏实现智能终端的效果。项目中的多级菜单UI使用了较为常见
    的头像 发表于 01-16 12:06 5952次阅读