马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、前言/ D( H. ?$ z C2 H' r
2 A$ h5 D- j( W7 O& y0 y- S
" V0 K/ [$ T% y# ?! d) n! v6 |) U9 d
$ [# e3 ?; l: I) e) F
本篇分享一套完整可用于本科电子信息 / 自动化专业毕业设计的项目:基于 STM32F103 的嵌入式数码相框,配套完整论文、任务书、中期表、外文翻译、答辩 PPT、工程源码,文档编号 DC12675。项目基于 Cortex-M3 内核 STM32 单片机,结合 SD 卡存储、FAT 文件系统、JPG/BMP 图像解码、TFT 液晶驱动,实现图片幻灯片自动轮播,覆盖嵌入式硬件、底层驱动、文件系统、图像解码等核心知识点,非常适合单片机入门学习与毕设参考。
' q2 T+ I" [8 u4 R8 H) C, i9 \; t* {! Q4 x$ x" w! T, c
二、项目整体概述
c1 B8 a4 K7 I H6 p1 P
7 i9 n' p$ x- o; T& \+ {0 F2 N3 @
2.1 项目背景
. d7 Z5 O) [. K6 [! z
& b" H2 X5 @! M! ?6 _5 A! J- f" v' ]$ m, u% \+ R: ?
8 a6 l/ D ]- w. n. `, i0 [嵌入式电子产品发展迅速,数码相框作为图像显示类典型嵌入式设备,可用于单片机综合实训。STM32 具备外设资源丰富、功耗低、开发成本低廉等优势,本设计以此为主控,读取 SD 卡内图片并在 TFT 屏幕循环播放幻灯片,完成小型独立图像显示设备开发。, @0 ?# V4 [% W2 \, H
: J8 ]% e. C# P2.2 项目交付全套资料) u& ~7 i2 O. R( G8 }2 h4 ^
7 J7 @/ z5 K7 b- P6 J
) x) i1 r6 l: @
- 13000 字完整毕业论文
- 毕业设计任务书、中期检查表
- 外文翻译 + 外文原文
- 答辩 PPT
- MDK 完整工程源代码
4 Y. g4 s) t/ z
8 z2 A: i$ h. p" P2 k; f三、硬件架构设计1 k* S1 l' v% t3 a* w0 `5 Z4 ^& U0 K
: Z" ~% z" J- |+ m
+ S( q" I+ K8 f; q) W+ S
6 [: H- b( R/ m! ~' h i; f整个系统分为三大核心硬件模块,搭配辅助外设:
# I! V Q* ]6 l$ \' g6 i4 Z) H* V- F# U" `
- STM32 主控模块(STM32F10X_MD)- ?6 p& \7 U0 |. B% K
# G' W5 P2 ?- q) m* n3 C) d
Cortex-M3 内核,负责外设调度、文件读取、图像解码、逻辑控制,系统核心控制器。 - TFT-LCD 液晶显示模块
- B, L0 a4 O! E
2 C; ^: T: U: y& y# o图像输出载体,实现文字提示、BMP/JPG 图片全屏渲染展示。 - SD 卡存储模块, w5 g9 A# }/ v$ G
+ B& j5 X9 z* f采用 SPI 通信驱动 SD 卡,搭配 FATFS 文件系统存放图片素材(JPG/JPEG/BMP)。 - 辅助外设:LED 指示灯、复位按键、SPI Flash、RTC 时钟、串口调试接口。: E; r6 S' U- Z2 G# N1 e0 h
" A1 F: g& {+ [5 e四、开发环境与工具栈
7 _4 f8 t1 h5 Y* n5 K1 m
0 n4 z" H7 ?9 N1 n2 B' v5 P, e& D4 P
- 操作系统:Windows7
- 编译开发 IDE:MDK3.80(RVMDK)
! ^, S% x- L g. t9 M
: G- d9 u4 a' F1 @- 工程宏定义:STM32F10X_MD、USE_STDPERIPH_DRIVER(标准库开发)( L$ z4 o i1 p, {, t: f% f
- 程序下载工具:mcuisp(串口烧录.hex 文件)
- 调试工具:SSCOM 串口调试助手
- 核心软件库:FATFS 文件系统、JPEG/BMP 图像解码库、各外设底层驱动" W1 ~& t/ Z! ]# K/ e, l
9 r+ F4 m- x0 e/ _& O
五、系统核心功能
) P+ h5 Y! S" s( O; B+ S- `; b. {. J, ? w M# t& [* z2 C: E
* z1 d% B) |' Y0 v5 K- 图片格式解析:支持 SD 卡中 BMP、JPG、JPEG 三种主流图片格式解码;
- 幻灯片轮播:自动遍历图片文件夹,多张图片循环自动播放;
- 分层故障自检:开机依次检测字库、SD 卡、FAT 文件系统、图片目录,异常时 LCD 屏幕打印文字报错;
- 基础交互:RESET 按键硬件复位,LED 闪烁作为系统运行状态提示;
- 文字显示:开机展示毕业设计标题、时间等自定义文字界面。- _% m' H3 ^" s0 b: S8 A
8 `' L5 H U5 s: W' T六、软件程序设计详解1 l8 y4 M6 V8 E0 }! A) R
$ w0 R9 b1 f+ R$ o& Q
7 H( ?$ r$ G" C% W: i. I6.1 代码分层架构& w) h0 {( r. _8 L/ m% ~
' M! u4 v$ i. M2 Q8 P% v: O( U
5 j; H9 V0 m4 c, @+ h" ^! A6 ~( x3 p6 p9 T- 底层驱动层:系统时钟、延时、串口、SPI、LCD、按键、SD 卡、RTC、LED 底层驱动;
- 中间功能层:FATFS 文件系统移植、字库加载、JPG/BMP 图像解码;
- 应用逻辑层:系统初始化、图片遍历、幻灯片播放、异常提示逻辑。+ l9 k @, J8 w
+ V" l6 [7 |# j6 L. }6.2 系统主程序运行流程
8 Z9 x# i6 f7 ^# }( V
2 L9 [& d$ k( O0 p8 H; H* ~8 Q. l* U9 m. ~; o$ U
- 初始化系统时钟、延时函数、LCD、按键、LED、SPI Flash 外设;
- 校验字库文件,缺失则屏幕打印错误并卡死;
- SD 卡硬件初始化,校验 SD 卡是否正常挂载;
- 初始化 FATFS 文件系统,检测文件系统是否损坏;
- 检索根目录图片文件夹,无对应文件夹则弹窗提示;
- 进入死循环,遍历所有图片文件,解码后刷新 LCD 实现幻灯片轮播。, U; W! o& p( M/ v7 E: {5 P
) I& c* G6 A$ ~. `5 z6.3 核心主程序片段
1 n% C8 S: M+ M1 ?% t' k
' Q ~ C6 N+ }8 L
+ w `5 _* H4 L8 H+ |- #include "stm32f10x_lib.h"
. }1 Z1 {" I5 Z' t) t8 Y, G - #include "usart.h"
/ C+ d7 R( D8 t/ ~" Z$ ~/ O - #include "sys.h"
7 }+ ]# z& ]- E, t( m' @( u - #include "delay.h"- p6 T: _" c) F% C. t
- #include "lcd.h"
+ d' x# `0 Z6 g; n$ a8 Q& a - #include "mmc_sdh"3 {, n1 m, z. u9 Q
- #include "fat.h"
) q w9 o- k$ R. F - #include "jpegbmp.h"
/ [# N8 i8 u6 \, k: d. ]5 V, ` C - 3 B# b i- c4 ~5 t3 j3 W4 [* @
- int main(void)% G% p3 d, {* m9 O7 o3 J' e
- {' k0 U5 ^+ f3 U+ [& L0 w. }% V7 I K
- u16 index = 0;
. |6 w. U9 N+ Y4 Y+ m - u16 pic_cnt = 0;
9 C, w6 G: Z. K, r) |4 Q+ J8 R - // 系统时钟初始化72M
* J* ^+ z4 V& f9 B - Stm32_Clock_Init(9);
/ V# R* T' w' g) z- l3 k - delay_init(72);
+ O* W H" F9 v3 `7 U - // 外设初始化7 ^* y) b$ G8 u; t2 C2 G9 ~2 C+ d
- LCD_Init();
, _( s v, H4 D5 z - KEY_Init();* z$ g1 Y& Q- o- d2 J
- LED_Init();
: x# _9 ?3 X/ n. T: v* U - SPI_Flash_Init();
, E! \8 }# ]. t0 t$ w& z8 X- ~ -
! W* u: t8 k4 Q - // 字库检测3 M- X) @9 `* Q. i
- if(!Font_Init())
H- I: [, k! W, h: E' w- ^1 C2 G - {& r$ p* y& }4 Q9 V2 X7 f, x
- POINT_COLOR=RED;+ g; p0 g7 E! ~ x' x/ ^2 i
- LCD_ShowString(60,50,"Font ERROR");
0 F$ n7 c, L- x/ z! C - while(1);) s+ [* Y5 {' }
- }
y; M3 w. p8 l' Z g - // SD卡与文件系统初始化校验
1 A- n2 R) k0 u& J% a S( v - if(SD_Initialize())
) w& _2 ?# _% H+ `8 v - {% c/ ]! I7 }; |+ [
- Show_Str(60,150,"SD卡错误!",16,0);9 }9 K5 r( |) l! |! e% q
- delay_ms(2000);# w H2 d5 R% {& m: Q
- }
7 w4 }$ S5 W- y% n( _; p - FAT_Init();
1 g j+ _' u/ m4 O4 i- T$ ^# N - // 查找图片文件夹
, A9 {3 |2 s! }& p3 u$ @ - while(SysInfoGet(1))
3 w4 C+ R+ w5 {" h - {
5 i4 T! }2 Z! ^ - LED0=!LED0;& t- Y: L( F% c& o# O6 J
- Show_Str(60,130,"图片文件夹未找到!",16,0);
8 D: i$ y( `- l+ o6 W - delay_ms(2000);
: |6 `8 u/ H( v- @. t3 j+ L - }
" j% X6 l9 |' Q2 { Q6 @ - Show_Str(60,130,"开始显示...",16,0);
' n( f* x7 O- L9 R - delay_ms(2000);) ^6 e- F% m5 g/ w O* ]9 N2 n
- Cur_Dir_Cluster=PICCLUSTER;
, B' t6 ^" ] f7 t) u9 U - // 图片循环播放主循环) j3 W: i. O: \/ L! S3 E4 N! m
- while(1)
, G# k$ ?9 E* d6 o - {
& l. \' z2 z; d t4 l0 g( t - pic_cnt=0;
8 g9 b4 f) e5 L, h+ |6 N5 @ - // 遍历、解码、渲染图片逻辑省略4 D. ^* z3 B* y: b# G- X$ _3 s6 y) k
- } J+ H. f% J/ R
- }
复制代码 & M- O/ m! ?' q) o
" X1 V% `: N9 |0 X( d# z# Z( X
# s' t1 w; r( c& n" @1 e$ Z
" y2 l! T$ i0 A
1 |/ B! x+ _3 }. G8 [' d5 G; C4 c r, S
' } w9 G ]6 W( y |