🔬 实验17-18:课设(综合设计)
📌 实验目标
- 综合运用所学知识完成一个 STM32 应用系统
- 掌握项目开发从需求到实现的完整流程
- 学会撰写规范的课程设计报告
- 准备答辩 PPT 并完成演示
一、课设安排
第17-18周为课程设计时间,要求独立或组队完成一个 STM32 综合设计项目。
二、选题方向
| 分类 | 推荐题目 | 涉及知识点 |
|---|---|---|
| 人机交互 | 电子时钟、密码锁、智能家居控制面板 | GPIO、定时器、中断、LCD/OLED 显示、按键 |
| 测量与采集 | 数字电压表、温湿度监测、超声波测距 | ADC、传感器驱动、定时器输入捕获 |
| 通信与控制 | 蓝牙/遥控小车、电机调速、智能灯控 | UART、PWM、PC通信、电机驱动 |
| 综合应用 | 智能家居终端、可穿戴设备原型 | 多外设综合、RTOS 基础 |
三、报告要求
课程设计报告需包含:封面、摘要、系统方案、硬件设计、软件设计、测试结果、总结体会。
四、答辩展示要点(来自复习及答辩 PPT)
- 展示器件组成:如按键、LED、蜂鸣器等用了哪些外设
- 讲核心技术:用了哪些知识点(中断、串口、定时器/PWM…)
- 演示功能:现场运行作品,说明它实现了什么、解决什么问题
- 说明自己写的代码:指出哪些部分是自己独立完成,结合实验原理讲清楚
五、一个可参考的小项目:智能按键台灯
用按键切换灯光亮度等级,串口打印当前状态——正好覆盖「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);
}
}
}💡 这段代码怎么用?
- 把各实验的
led.c / key.c / usart.c / timer.c组装进同一工程,就是一套课设的软件架构 - 用「查表法」把亮度等级映射到占空比,逻辑清晰、易扩展(例如加 4~7 档)
- 串口
printf记录状态,答辩时一边演示一边让评委看到运行日志
六、参考资料
| 资料 | 文件 |
|---|---|
| 课设要求文档 | 课设要求.doc |
| 复习及答辩 PPT | 复习及答辩.pptx |