马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、前言
: x F4 G9 y- @- W2 n8 m0 N- b {4 t1 Z+ m: b
* q9 \$ @" _) a, k9 H% _7 |. g" n) H4 X% M1 P
本篇分享一套完整可用于本科电子信息 / 自动化专业毕业设计的项目:基于 STM32F103 的嵌入式数码相框,配套完整论文、任务书、中期表、外文翻译、答辩 PPT、工程源码,文档编号 DC12675。项目基于 Cortex-M3 内核 STM32 单片机,结合 SD 卡存储、FAT 文件系统、JPG/BMP 图像解码、TFT 液晶驱动,实现图片幻灯片自动轮播,覆盖嵌入式硬件、底层驱动、文件系统、图像解码等核心知识点,非常适合单片机入门学习与毕设参考。
3 C/ P0 _7 J: A
{7 n! v8 X1 z4 e2 s' O二、项目整体概述
* m/ ^: M2 S/ ]8 S% w" _% I
0 F: Z0 e: t+ Q3 [
( r4 @5 I$ B4 R+ L) K* O; N2.1 项目背景
' L \3 I/ q; c; |0 {% }+ |' u% R3 e: _" v9 J$ H6 Z
8 Z1 _4 c4 D( f
6 z4 X5 B/ F! T1 h
嵌入式电子产品发展迅速,数码相框作为图像显示类典型嵌入式设备,可用于单片机综合实训。STM32 具备外设资源丰富、功耗低、开发成本低廉等优势,本设计以此为主控,读取 SD 卡内图片并在 TFT 屏幕循环播放幻灯片,完成小型独立图像显示设备开发。8 Q( v0 N1 l( Y k+ Y" |
) c+ W4 f% r6 G
2.2 项目交付全套资料0 c' p! ?1 e% Y9 H9 H$ w
4 g; `5 h, p0 |7 ^% T" w. ]" }
) g4 B3 ~: s: t8 {, e5 G- 13000 字完整毕业论文
- 毕业设计任务书、中期检查表
- 外文翻译 + 外文原文
- 答辩 PPT
- MDK 完整工程源代码- H5 u; U: i C* X0 }- \ C9 E
9 g/ s, K6 O7 x2 ]' ]三、硬件架构设计9 M% ~" p: h* z6 |
) }4 ?6 o% k8 B+ B u% M
$ A# W% g+ n i+ p1 U& B
" Y) Z# o% W8 b' D3 S7 M整个系统分为三大核心硬件模块,搭配辅助外设:
- z! M; C3 Q- c8 d9 n" u( U0 U) x& x g( Y
- STM32 主控模块(STM32F10X_MD)
& j3 V5 l2 G+ d4 |8 C
9 m7 Q& U1 h& `/ p, @3 z' HCortex-M3 内核,负责外设调度、文件读取、图像解码、逻辑控制,系统核心控制器。 - TFT-LCD 液晶显示模块4 |- S- P/ T' D! n( R/ t) R
, S8 A: i6 j' _7 Y3 M
图像输出载体,实现文字提示、BMP/JPG 图片全屏渲染展示。 - SD 卡存储模块
8 E6 }2 H3 `- P" \+ g
! G. w; H" _! |* B2 t7 g+ f- T采用 SPI 通信驱动 SD 卡,搭配 FATFS 文件系统存放图片素材(JPG/JPEG/BMP)。 - 辅助外设:LED 指示灯、复位按键、SPI Flash、RTC 时钟、串口调试接口。
# |% |9 S J9 \. i+ R! V, a
) H- n$ |: |5 W. V# q四、开发环境与工具栈3 U0 @- S! r* f9 q4 X6 P, z
5 ` Y/ a- f; Q+ \1 ^/ b; y6 K
0 P/ M$ C: J6 |0 J4 m- 操作系统:Windows7
- 编译开发 IDE:MDK3.80(RVMDK)7 h# ~2 Z" |0 o, o+ G
; A1 l$ G$ r+ `9 R5 B. ?- 工程宏定义:STM32F10X_MD、USE_STDPERIPH_DRIVER(标准库开发)
( j% q& h* p, t5 i
- 程序下载工具:mcuisp(串口烧录.hex 文件)
- 调试工具:SSCOM 串口调试助手
- 核心软件库:FATFS 文件系统、JPEG/BMP 图像解码库、各外设底层驱动/ S; E6 J5 J' C8 p; Z- E3 j) J
' ^3 ~3 V& Y5 c4 O五、系统核心功能" z$ C% R# Y3 g
! Z9 B! [; i1 {2 S- @
' `! q- u# A4 w( L" A- 图片格式解析:支持 SD 卡中 BMP、JPG、JPEG 三种主流图片格式解码;
- 幻灯片轮播:自动遍历图片文件夹,多张图片循环自动播放;
- 分层故障自检:开机依次检测字库、SD 卡、FAT 文件系统、图片目录,异常时 LCD 屏幕打印文字报错;
- 基础交互:RESET 按键硬件复位,LED 闪烁作为系统运行状态提示;
- 文字显示:开机展示毕业设计标题、时间等自定义文字界面。2 M8 w& j0 }/ t9 _2 ]
( x: f( E' X% f六、软件程序设计详解, X% [ S. V) i$ m; x
# ^( G8 e* Q7 U1 P+ a+ [6 i
1 |& `7 K; R g0 ~6.1 代码分层架构! \/ J) {* C t1 p
. \4 u; ^6 s/ |1 c# h2 x3 Z
- B% s4 G: _1 A9 x: |
- 底层驱动层:系统时钟、延时、串口、SPI、LCD、按键、SD 卡、RTC、LED 底层驱动;
- 中间功能层:FATFS 文件系统移植、字库加载、JPG/BMP 图像解码;
- 应用逻辑层:系统初始化、图片遍历、幻灯片播放、异常提示逻辑。4 i/ Y+ c4 d5 ~. H0 o8 e/ r
4 ]# {& ?! E G& L& k! J# i/ J6.2 系统主程序运行流程& w- z& F% }7 I: H: }
& P! c, S5 A/ B% d& \4 H' f3 `" g7 Z; a3 O2 \8 T T( T
- 初始化系统时钟、延时函数、LCD、按键、LED、SPI Flash 外设;
- 校验字库文件,缺失则屏幕打印错误并卡死;
- SD 卡硬件初始化,校验 SD 卡是否正常挂载;
- 初始化 FATFS 文件系统,检测文件系统是否损坏;
- 检索根目录图片文件夹,无对应文件夹则弹窗提示;
- 进入死循环,遍历所有图片文件,解码后刷新 LCD 实现幻灯片轮播。5 M" H/ L7 z$ _
# r ~8 i0 D! g. G- l
6.3 核心主程序片段
# x$ O# }/ @. A0 \
& h. ]5 x& d+ G) J$ j; }
# e+ W v$ J" E8 Z4 Q4 W9 V; T- #include "stm32f10x_lib.h"
3 x9 i6 H) [& I - #include "usart.h"/ l/ I( _$ A- U
- #include "sys.h"
& U: K3 e8 O- H* L1 x! ^ - #include "delay.h"
% `9 T7 W7 ?) n' M: X, c; ^ - #include "lcd.h"
3 ]4 J) g* l' r' q% @ - #include "mmc_sdh"5 P& n, P9 W$ B; z s- L) r
- #include "fat.h"& n4 _6 Y: f% ]% \$ v+ M3 f( G1 T4 V4 s
- #include "jpegbmp.h"
+ ]0 w. N& M! C a# o. s - , A# p! H4 L ?
- int main(void)$ G8 [" D0 r( E
- {
: V( O/ |: t/ E) M1 Z [ - u16 index = 0;
3 o/ {8 x/ m8 C6 ?, d - u16 pic_cnt = 0;$ r \3 F- P2 c6 F1 j X
- // 系统时钟初始化72M- f& T( q$ f- K$ p, ^
- Stm32_Clock_Init(9);
3 R9 p- z5 p3 {; }( z0 u+ { - delay_init(72);2 q# a! Z' S. O8 P: m( e
- // 外设初始化8 f/ |/ U) ?$ C" A
- LCD_Init();
' n( v) w' u" W7 c, s - KEY_Init();" V- k. g: C+ Z/ f
- LED_Init();, w- K. e7 V' N2 R8 A6 K) r* p1 x* }
- SPI_Flash_Init();
/ C3 C5 u2 E8 F2 Z; |% k. t6 t8 y - 5 L& e% X9 S, [( r
- // 字库检测1 f' v3 _! [* d0 k7 N; p' s J; t
- if(!Font_Init())/ _' ^1 n' F: E* I
- {
4 S; I& N( }) X: h- ^% @* u0 \ - POINT_COLOR=RED;7 i' W9 \0 D" Y8 n. X$ {
- LCD_ShowString(60,50,"Font ERROR");/ S( I$ k) y# c M) I' p( h
- while(1);
r# X }1 o4 p/ B' t# @4 Q/ I - }
2 q; }, w6 n: e - // SD卡与文件系统初始化校验
! O/ o7 q0 e8 y - if(SD_Initialize())) ]7 L8 r+ t3 C7 x* `) x
- {
) X. J) S3 W3 `% O6 P! w - Show_Str(60,150,"SD卡错误!",16,0);
$ ?" T4 r& O+ u6 E$ A) k+ _ - delay_ms(2000);( G( @. `6 m) H. {! i: K* l) d7 S
- }
, c' l8 i2 ?" f5 V& M - FAT_Init();) I5 f, h: J& O. s
- // 查找图片文件夹9 M" w5 r8 G# u$ r0 s( k
- while(SysInfoGet(1))
8 n# D! }! y" ^( f6 `5 `, R9 ~3 G - {
( X" o- K p1 L% Q - LED0=!LED0;
% x0 W: `5 S5 c" A0 n8 K - Show_Str(60,130,"图片文件夹未找到!",16,0);
- k6 w) K! W; t - delay_ms(2000);; D% ~# O' b2 r
- } E/ ~, A) [% U D+ @
- Show_Str(60,130,"开始显示...",16,0);
1 m9 l, R# a O6 A6 d% s* s( n& | - delay_ms(2000);/ M( h2 I, a2 ^( N3 i: U" ?* X
- Cur_Dir_Cluster=PICCLUSTER;; `; ]" d, W# n C0 R- O9 z( T
- // 图片循环播放主循环9 J$ j8 r. r/ l: o0 J
- while(1)
) { O" q) ]: g, N2 p' a1 P - {9 F, s" [9 ]8 r: ~( E# p
- pic_cnt=0;/ k2 Y( }5 ~; b0 J5 \8 `0 Y
- // 遍历、解码、渲染图片逻辑省略
9 S4 Z/ f. ~5 d8 W* C) n - }
, m, l) p$ G: j& ?* E - }
复制代码 * e* P: j9 c) c: g
' _0 {" C6 H& j% A9 c _3 ]
- z4 d8 B1 E3 |' t
$ v) }, T# t! ]
+ v0 \4 w2 _* G {4 d- U$ V0 w' K
3 k8 ^7 l( P5 p1 u1 B1 o4 C0 Y' u+ e2 ]2 ?4 G# K/ |
|