马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、前言
本篇分享一套完整可用于本科电子信息 / 自动化专业毕业设计的项目:基于 STM32F103 的嵌入式数码相框,配套完整论文、任务书、中期表、外文翻译、答辩 PPT、工程源码,文档编号 DC12675。项目基于 Cortex-M3 内核 STM32 单片机,结合 SD 卡存储、FAT 文件系统、JPG/BMP 图像解码、TFT 液晶驱动,实现图片幻灯片自动轮播,覆盖嵌入式硬件、底层驱动、文件系统、图像解码等核心知识点,非常适合单片机入门学习与毕设参考。
二、项目整体概述
2.1 项目背景
嵌入式电子产品发展迅速,数码相框作为图像显示类典型嵌入式设备,可用于单片机综合实训。STM32 具备外设资源丰富、功耗低、开发成本低廉等优势,本设计以此为主控,读取 SD 卡内图片并在 TFT 屏幕循环播放幻灯片,完成小型独立图像显示设备开发。
2.2 项目交付全套资料
- 13000 字完整毕业论文
- 毕业设计任务书、中期检查表
- 外文翻译 + 外文原文
- 答辩 PPT
- MDK 完整工程源代码
三、硬件架构设计
整个系统分为三大核心硬件模块,搭配辅助外设:
- STM32 主控模块(STM32F10X_MD)
Cortex-M3 内核,负责外设调度、文件读取、图像解码、逻辑控制,系统核心控制器。 - TFT-LCD 液晶显示模块
图像输出载体,实现文字提示、BMP/JPG 图片全屏渲染展示。 - SD 卡存储模块
采用 SPI 通信驱动 SD 卡,搭配 FATFS 文件系统存放图片素材(JPG/JPEG/BMP)。 - 辅助外设:LED 指示灯、复位按键、SPI Flash、RTC 时钟、串口调试接口。
四、开发环境与工具栈
- 操作系统:Windows7
- 编译开发 IDE:MDK3.80(RVMDK)
- 工程宏定义:STM32F10X_MD、USE_STDPERIPH_DRIVER(标准库开发)
- 程序下载工具:mcuisp(串口烧录.hex 文件)
- 调试工具:SSCOM 串口调试助手
- 核心软件库:FATFS 文件系统、JPEG/BMP 图像解码库、各外设底层驱动
五、系统核心功能
- 图片格式解析:支持 SD 卡中 BMP、JPG、JPEG 三种主流图片格式解码;
- 幻灯片轮播:自动遍历图片文件夹,多张图片循环自动播放;
- 分层故障自检:开机依次检测字库、SD 卡、FAT 文件系统、图片目录,异常时 LCD 屏幕打印文字报错;
- 基础交互:RESET 按键硬件复位,LED 闪烁作为系统运行状态提示;
- 文字显示:开机展示毕业设计标题、时间等自定义文字界面。
六、软件程序设计详解
6.1 代码分层架构
- 底层驱动层:系统时钟、延时、串口、SPI、LCD、按键、SD 卡、RTC、LED 底层驱动;
- 中间功能层:FATFS 文件系统移植、字库加载、JPG/BMP 图像解码;
- 应用逻辑层:系统初始化、图片遍历、幻灯片播放、异常提示逻辑。
6.2 系统主程序运行流程
- 初始化系统时钟、延时函数、LCD、按键、LED、SPI Flash 外设;
- 校验字库文件,缺失则屏幕打印错误并卡死;
- SD 卡硬件初始化,校验 SD 卡是否正常挂载;
- 初始化 FATFS 文件系统,检测文件系统是否损坏;
- 检索根目录图片文件夹,无对应文件夹则弹窗提示;
- 进入死循环,遍历所有图片文件,解码后刷新 LCD 实现幻灯片轮播。
6.3 核心主程序片段
- #include "stm32f10x_lib.h"
- #include "usart.h"
- #include "sys.h"
- #include "delay.h"
- #include "lcd.h"
- #include "mmc_sdh"
- #include "fat.h"
- #include "jpegbmp.h"
- int main(void)
- {
- u16 index = 0;
- u16 pic_cnt = 0;
- // 系统时钟初始化72M
- Stm32_Clock_Init(9);
- delay_init(72);
- // 外设初始化
- LCD_Init();
- KEY_Init();
- LED_Init();
- SPI_Flash_Init();
-
- // 字库检测
- if(!Font_Init())
- {
- POINT_COLOR=RED;
- LCD_ShowString(60,50,"Font ERROR");
- while(1);
- }
- // SD卡与文件系统初始化校验
- if(SD_Initialize())
- {
- Show_Str(60,150,"SD卡错误!",16,0);
- delay_ms(2000);
- }
- FAT_Init();
- // 查找图片文件夹
- while(SysInfoGet(1))
- {
- LED0=!LED0;
- Show_Str(60,130,"图片文件夹未找到!",16,0);
- delay_ms(2000);
- }
- Show_Str(60,130,"开始显示...",16,0);
- delay_ms(2000);
- Cur_Dir_Cluster=PICCLUSTER;
- // 图片循环播放主循环
- while(1)
- {
- pic_cnt=0;
- // 遍历、解码、渲染图片逻辑省略
- }
- }
复制代码
|
|