8. 课设
📌 本节学习目标
- 了解课程设计的要求和评分标准
- 理解单片机系统开发的完整流程
- 学习综合项目的设计思路
- 掌握设计报告撰写规范
8.1 课程设计要求
课程设计是本课程的重要环节,占期末成绩 40%。具体要求如下:
- 以个人或小组为单位,自主选题完成一个 STM32 应用系统
- 需包含硬件电路设计和软件程序开发
- 提交完整的课程设计报告
- 鼓励创新,可结合传感器、通信模块等外设
8.2 选题参考范围
| 类型 | 推荐题目 | 涉及知识点 |
|---|---|---|
| 显示类 | OLED 电子时钟、温湿度显示终端 | GPIO、定时器、I2C/SPI、ADC |
| 控制类 | 直流电机调速系统、步进电机控制 | PWM、定时器、GPIO |
| 通信类 | 蓝牙遥控小车、串口数据采集系统 | UART、中断、PWM |
| 测量类 | 数字电压表、超声波测距仪 | ADC、定时器输入捕获 |
| 智能化 | 智能家居控制、循迹避障小车 | 综合应用 |
8.3 报告撰写规范
课程设计报告需包含以下内容:
- 封面:题目、姓名、学号、班级
- 摘要:300 字左右的项目概述
- 系统方案:总体框图、方案论证与选择
- 硬件设计:原理图、器件选型说明
- 软件设计:程序流程图、关键代码说明
- 系统测试:测试方法、结果分析
- 总结与体会
- 参考文献
8.4 综合项目代码骨架
课设通常是「按键 + LED/蜂鸣器 + 串口 + 定时器/PWM」的组合。下面是一个可复用的框架,把各实验学过的模块拼起来:
综合项目 main.c 骨架
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include "timer.h"
int main(void)
{
u8 key;
delay_init(); // ① 延时(SysTick)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // ② 中断分组(整个系统只设一次)
LED_Init(); // ③ 外设初始化
KEY_Init();
uart_init(115200); // 串口,波特率 115200
TIM3_Int_Init(4999, 7199); // 定时器中断,500ms
printf("System Start, Clock = %dHz\r\n", SystemCoreClock); // ④ 串口打印启动信息
while (1)
{
key = KEY_Scan(0); // ⑤ 按键扫描(防抖)
switch (key)
{
case KEY0_PRES: LED_Toggle(); printf("KEY0\r\n"); break;
case KEY1_PRES: Beep_Toggle(); printf("KEY1\r\n"); break;
default: break;
}
}
}
// 定时器中断服务函数:每隔 500ms 做周期任务
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
// 周期任务,如:采集传感器、刷新显示
}
}💡 这段代码怎么用?
- 把 ①~⑤ 作为标准步骤背下来:延时 → 中断分组 → 外设初始化 → 串口打印 → 主循环扫描
printf输出依赖实验 11 的fputc重定向,能帮你快速定位「卡在哪一步」- 主循环保持精简,周期任务放定时器中断里——这是嵌入式程序的基本架构
8.5 评分标准
| 项目 | 分值 | 评分要素 |
|---|---|---|
| 功能完整性 | 30 | 基本功能实现,扩展功能酌情加分 |
| 硬件设计 | 20 | 电路设计合理,器件选型恰当 |
| 软件设计 | 20 | 程序结构清晰,代码规范,注释完整 |
| 设计报告 | 20 | 格式规范,内容完整,分析深入 |
| 答辩表现 | 10 | 演示流畅,回答问题准确 |
💡 建议可从实验课上做过的项目作为起点,在其基础上增加功能扩展。也可以到 资源中心 > GitHub 开源仓库 寻找灵感。
📎 配套资料课件:8.课设.pptx | 课设要求:实验17-18:课设