基于STM32的阅读器
一直想买一个阅读器来着,但是被价格劝退了,索性自己做一个,便宜又可以拓展。
一.材料
物料清单如下:
此外还有一块3.7v锂电池,500mAh就能用很久,
以及一张32gb以下,256mb以上的tf卡
二.原理图
1.电池模组

2.芯片模组
3.其他外设:
1.tf卡

2.按键

3.tft彩屏

三.设计思路
我比较懒啊,使用了clion+stm32cubemx的开发环境,初始化配置啥的特别方便,然后代码提示ai功能也很全面,然后项目的基本初始化就不展示了,具体看main.c即可。
1.cubemx配置
芯片引脚(其实自己设置的只要三个KEY和两个CS引脚,)


spi配置

fafts配置


2.main.c
main.c 是整个电子书阅读器的主控文件,负责系统初始化、TF 卡挂载、书籍扫描、字库初始化、书架显示以及阅读状态和书架状态之间的切换,是整个程序的入口和调度中心。
3.fatfs.c
fatfs.c 负责初始化 FatFs 文件系统,并把底层的 USER_Driver 驱动连接到 FatFs,使程序能够通过 f_mount、f_open、f_read、f_write 等函数访问 TF 卡文件。
4.booklist.c
booklist.c 负责扫描 0:/book 目录,筛选出 .txt 或 .TXT 文件,并把书名和完整路径保存到书籍列表中,供主界面的书架显示和打开阅读使用。
5.reader.c
reader.c 是阅读器的核心文件,负责打开小说文件、读取文本内容、解析 UTF-8、排版显示正文、翻页、上一页以及保存和恢复每本书的阅读进度。
6.key.c
key.c 负责按键扫描和消抖处理,采用非阻塞方式检测按键,只在按键稳定按下的一瞬间产生一次事件,避免按键抖动和程序卡顿。
7.lcd_st7735.c
lcd_st7735.c 负责 ST7735 液晶屏的底层驱动,包括 SPI 写命令、写数据、初始化屏幕、设置显示区域、清屏、画点、画线、显示英文字符、显示中文字符以及刷 RGB565 图像块。
8.font_manager.c
font_manager.c 负责管理外置中文字库,从 TF 卡中的字库索引文件和字模文件中查找汉字点阵,并加入缓存机制,提高中文显示速度。
9.utf8.c
utf8.c 负责 UTF-8 编码解析,把文本文件中的 1 字节、2 字节或 3 字节 UTF-8 字符转换成 Unicode 编码,为中文显示提供基础。
10.sdcard_spi.c
sdcard_spi.c 负责 TF 卡的 SPI 底层通信,包括 SD 卡初始化、发送命令、读取扇区和写入扇区,是 FatFs 访问 TF 卡的底层支撑。
11.bmp.c
bmp.c 负责显示 BMP 图片,将 24 位 BMP 图片数据读取出来,并转换成 LCD 使用的 RGB565 格式后显示到屏幕上。
12.text_slice.c
text_slice.c 负责按 UTF-8 字符长度对文本文件进行切片,避免把一个中文字符从中间截断,主要用于把较长文本预处理成多个小文件。
13.font_ascii_8x8.c
font_ascii_8x8.c 保存 8×8 的 ASCII 字符点阵数据,用于显示英文字符、数字、符号以及菜单中的简单文字。
14.font_ascii_8x16.c
font_ascii_8x16.c 保存 8×16 的 ASCII 字符点阵数据,可用于更高的英文字符显示效果。
15.font_cn16.c
font_cn16.c 保存少量 16×16 中文点阵数据,可作为内置中文测试字库或在外置字库不可用时显示部分固定汉字。
16.font_lib.c
font_lib.c 目前主要作为字库相关模块的占位文件或接口补充文件,本身代码较少,主要配合 font_lib.h 和其他字库文件使用
17.user_diskio.c
user_diskio.c 是 FatFs 和 SD 卡 SPI 驱动之间的适配层,负责把 FatFs 的磁盘操作接口转换成底层 SD 卡读写函数。它实现了磁盘初始化、状态查询、扇区读取、扇区写入和控制命令,使 FatFs 能够通过 SD_Init()、SD_ReadBlock()、SD_WriteBlock() 等函数访问 TF 卡
然后其他的必要库文件cmake自动生成包含,不多赘述。项目结构是clion自动生成,没什么好调整的。
四.使用方法
TF卡里面要有三个文件夹,如图:

book里面放txt文件,utf-8格式,必须英文名!!!
font是字库,可以自己生成也可以用我的这套,自己生成的要注意文字总数不能超过4500字(含标点),可用python快速生成。
cfg的话不用管,是存阅读数据的。
到这里就基本差不多了,就是按钮功能方面:下一页充当下一个和下一页;菜单充当确认退出。
最后是代码文件,放在gitcode上了TXTReader - AtomGit | GitCode
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)