🔬 实验17-18:课设(综合设计)

📌 实验目标
  • 综合运用所学知识完成一个 STM32 应用系统
  • 掌握项目开发从需求到实现的完整流程
  • 学会撰写规范的课程设计报告
  • 准备答辩 PPT 并完成演示

一、课设安排

第17-18周为课程设计时间,要求独立或组队完成一个 STM32 综合设计项目。

二、选题方向

分类推荐题目涉及知识点
人机交互电子时钟、密码锁、智能家居控制面板GPIO、定时器、中断、LCD/OLED 显示、按键
测量与采集数字电压表、温湿度监测、超声波测距ADC、传感器驱动、定时器输入捕获
通信与控制蓝牙/遥控小车、电机调速、智能灯控UART、PWM、PC通信、电机驱动
综合应用智能家居终端、可穿戴设备原型多外设综合、RTOS 基础

三、报告要求

课程设计报告需包含:封面、摘要、系统方案、硬件设计、软件设计、测试结果、总结体会。

四、答辩展示要点(来自复习及答辩 PPT)

  1. 展示器件组成:如按键、LED、蜂鸣器等用了哪些外设
  2. 讲核心技术:用了哪些知识点(中断、串口、定时器/PWM…)
  3. 演示功能:现场运行作品,说明它实现了什么、解决什么问题
  4. 说明自己写的代码:指出哪些部分是自己独立完成,结合实验原理讲清楚

五、一个可参考的小项目:智能按键台灯

用按键切换灯光亮度等级,串口打印当前状态——正好覆盖「GPIO + 定时器/PWM + 串口 + 按键」全部核心模块:

main.c(综合了多实验的模块化写法)
#include "stm32f10x.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "timer.h"   // 内含 PWM 初始化与 SetCompare 封装

// 亮度等级 0~3,占空比分别对应 0% / 30% / 60% / 90%
static u8 brightness = 1;

void Set_Level(u8 lv)
{
    const u16 duty_tab[4] = {0, 6, 12, 18};   // ARR=19,20 级
    TIM_SetCompare2(TIM3, duty_tab[lv]);      // TIM3_CH2 → PB5
    printf("brightness -> %d\r\n", lv);
}

int main(void)
{
    u8 key;
    delay_init();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    LED_Init();
    KEY_Init();
    uart_init(115200);
    TIM3_PWM_Init(19, 0);          // 周期 1ms,PWM 输出

    printf("Smart Lamp Ready!\r\n");
    Set_Level(brightness);

    while (1)
    {
        key = KEY_Scan(0);
        if (key == KEY0_PRES)
        {
            brightness = (brightness + 1) % 4;   // 0→1→2→3→0 循环
            Set_Level(brightness);
        }
    }
}
💡 这段代码怎么用?
  1. 把各实验的 led.c / key.c / usart.c / timer.c 组装进同一工程,就是一套课设的软件架构
  2. 用「查表法」把亮度等级映射到占空比,逻辑清晰、易扩展(例如加 4~7 档)
  3. 串口 printf 记录状态,答辩时一边演示一边让评委看到运行日志

六、参考资料

资料文件
课设要求文档课设要求.doc
复习及答辩 PPT复习及答辩.pptx